概念学习(Concept Learning)
- 从特殊的训练样例中归纳出一般函数是机器学习的核心问题。一般函数是对理想目标函数的函数逼近(function approximation)。简而言之,从特殊到普通。与此对应的是演绎推理(deductive reasoning),就是从一般性的前提出发,通过推导(即“演绎”),得到具体的称述或个别结论的过程(可以看作预测过程,根据一般规律得出结论)。
- 归纳学习假设:任一假设如果在足够大的训练样例集中很好地逼近目标函数,它也能在未见实例中很好地逼近目标函数。只是这里的足够大的定义不是很好确定。另外,这只是一个假设,虽然具有合理性,但难道这个假设就一定是最好的么?
- 概念学习是指从有关某个布尔函数的输入输出训练样例中推断出该布尔函数。这里假设并限定了目标函数是布尔函数。另外,这是一个由特殊向一般的过程。
- 如果把概念学习看做是一个搜索过程,范围是假设的表示所隐含定义的整个空间。搜索的目标就是为了寻找能最好地拟合训练样例的假设。
- 在心理学中,概念学习就是学习把具有共同属性的事物集合在一起并冠以一个名称,把不具有此类属性的事物排除出去。学习的过程具有排他性。由此,也可以看出为什么ML中的概念学习总表示为一个布尔函数(排他性,不是即非啊)。
- 归纳学习假设:任一假设如果在足够大的训练样例中很好地逼近目标函数,它也能在未见实例中很好地逼近目标函数。
- 概念学习可以看作是一个搜索过程,范围是假设的表示所隐含定义的整个空间。搜索的目标是为了寻找能最好地拟合训练样例的假设。
- FIND-S:寻找极大特殊假设(从特殊到普通的线路),对反例不做处理,并且只是所有可能假设(all possible hypothesis)H中的一个。
- 将h初始化为H中最特殊的假设。
- 对每一个正例x,对h的每一个属性约束ai,如果x满足ai那么不做任何处理;否则将h中ai替换为x满足的下一个更一般约束。
- 输入假设h。
- 候选消除算法(Candidate-Elimination)的输出是与训练样例一致的所有假设的集合。
- 当一个假设h与训练样例集合D一致,当且仅当对D中每一个样例<x, c(x)>都有h(x) = c(x)。数学表示为:Consistent(h, D) ≡ (∀<x, c(x)> ∈ D) h(x) = c(x) 注:通俗讲,就是假设输出和样本输出完全一致。
- 关于假设空间H和训练样例集D的变型空间,标记为VSH,D,是H中与训练样例D一致的所有假设构成的子集。数学表示为:VSH,D ≡ { h ∈ H | Consistent(h, D)}
- 列表消除算法:
- 变型空间VersionSpace←包含H中所有假设的列表
- 对每个训练样例<x, c(x)>,从变型空间中移除所有h(x)≠ c(x)的假设h
- 输出VersionSpace中的假设列表。
- 定义:令hj和hk为在X上定义的布尔函数。称hj more_general_than_or_equal_to hk(记作hj≥ghk),当且仅当(∀x∈ X) [(hk(x) = 1) →(hj(x) = 1)] 注:满足hk必然满足hj
- 定义:关于假设空间H和训练数据D的一般边界(general boundary)G,是在H中与D相一致的极大一般(maximally general)成员的集合。 G ≡ { g ∈ H | Consistent(g, D) ∧ (¬ ∃g'∈H)[(g' > gg)∧Consistent(g, D)]}
- 定义:关于假设空间H和训练数据D的特殊边界(specific boundary)S,是在H中与D相一致的极大特殊(maximally specific)成员的集合。S ≡ { s ∈ H | Consistent(s, D) ∧ (¬ ∃s'∈H)[(s > ss')∧Consistent(s', D)]}
- 变型空间表示定理:令X为一任意的实例集合,H为X上定义的布尔函数假设的集合。令c:→X{0, 1}为X上定义的任一目标概念,并令D为任一训练样例的集合{<x, c(x)>}。对所有的X,H,c,D以及良好定义的S和G: VSH,D = { h ∈ H | (∃s∈S)(∃g∈G)(g≥gh≥gs)}

图1 实例视图
17. 使用变形空间的候选消除算法。在最初阶段G和S:G0←{ <?, ?, ?, ?, ?, ?> }(最一般)和S0←{ <Φ, Φ, Φ, Φ, Φ, Φ> }(最不一般)
从上图可以看出,变形空间具有层次性,且根据属性个数来划分。G是0开始,而S是从max开始。候选消除算法成立的条件:1.在训练样例中没有错误;2.H中确实包含描述目标概念的正确假设。如果S和G收敛到一个空的结合,那么说明样例中有错误。
将G集合初始化为H中极大一般假设
将S集合初始化为H中极大特殊假设
对每个训练样例d,进行以下操作:
- 如果d是一正例
- 从G中移去所有与d不一致的假设
- 对S中每个与d不一致的假设s
- 从S中移去s
- 把s的所有的极小一般化式h加入到S中,其中h满足
- h与d一致,而且G的某个成员比h更一般
- 从S中移去所有这样的假设:它比S中另一假设更一般
- 如果d是一个反例
- 从S中移去所有与d不一致的假设
- 对G中每个与d不一致的假设g
- 从G中移去g
- 把g的所有的极小特殊化式h加入到G中,其中h满足
- h和d一致,而且S的某个成员比h更特殊
- 从G中移去所有这样的假设:它比G中另一假设更特殊
18. 定义:考虑对于实例集合X的概念学习算法L(归纳学习)。令c为X上定义的任一概念,并令Dc = {<x, c(x)>}为c的任意训练样例集合。令L(xi, Dc)表示经过数据Dc的训练后L赋予实例xi的分类。L的归纳偏置是最小断言集合B(前提集合),它使任意目标概念c和相应的训练样例Dc满足:(∀xi ∈ X)[(B ∧ Dc ∧ xi) ├ L(xi, Dc)]。注:这里的前提就是c ∈ H这个前提,即B = { c ∈ H },符号├是演绎的意思。
这是概念学习的一个简单示例的C++代码。
#include <iostream>
using namespace std;
typedef enum Sky{Sunny,Rainy}Sky;
typedef enum AirTemp{Warm,Cold,Cool}AirTemp;
typedef enum Humidity{Normal,High}Humidity;
typedef enum Wind{Strong}Wind;
//typedef enum Water{Warm,Cold}Water;
typedef enum Forecast{Same,Change}Forecast;
typedef struct Sample
{
Sky sky;
AirTemp airTemp;
Humidity humidity;
Wind wind;
AirTemp water;
Forecast forecast;
bool EnjoySport;
}Sample;
typedef struct Record
{
Sample yangben;
int xiabiao[];
}Record;
void InitSampleArray(Sample sap[])
{
sap[].sky = Sunny;
sap[].airTemp = Warm;
sap[].humidity = Normal;
sap[].wind = Strong;
sap[].water = Warm;
sap[].forecast = Same;
sap[].EnjoySport = true;
sap[].sky = Sunny;
sap[].airTemp = Warm;
sap[].humidity = High;
sap[].wind = Strong;
sap[].water = Warm;
sap[].forecast = Same;
sap[].EnjoySport = true;
sap[].sky = Rainy;
sap[].airTemp = Cold;
sap[].humidity = High;
sap[].wind = Strong;
sap[].water = Warm;
sap[].forecast = Change;
sap[].EnjoySport = false;
sap[].sky = Sunny;
sap[].airTemp = Warm;
sap[].humidity = High;
sap[].wind = Strong;
sap[].water = Cool;
sap[].forecast = Change;
sap[].EnjoySport = true;
}
void InitRecord(Sample& s,Record& r)
{
r.yangben.airTemp = s.airTemp;
r.yangben.EnjoySport = s.EnjoySport;
r.yangben.forecast = s.forecast;
r.yangben.humidity = s.humidity;
r.yangben.sky = s.sky;
r.yangben.water = s.water;
r.yangben.wind = s.wind;
for(int i = ;i < ;i++)
r.xiabiao[i] = ; }
void GenerateRule(Sample sap[],Record& record)
{
for(int i = ;i < ;i++)
{
if(sap[i].EnjoySport == true)
{
if(sap[i].airTemp != record.yangben.airTemp)
{
record.xiabiao[] = ;
}
if(sap[i].forecast != record.yangben.forecast)
{
record.xiabiao[] = ;
}
if(sap[i].humidity != record.yangben.humidity)
{
record.xiabiao[] = ;
}
if(sap[i].sky != record.yangben.sky)
{
record.xiabiao[] = ;
}
if(sap[i].water != record.yangben.water)
{
record.xiabiao[] = ;
}
if(sap[i].wind != record.yangben.wind)
{
record.xiabiao[] = ;
}
}
}
for(int i = ;i < ;i++)
{
cout << record.xiabiao[i] << endl;
}
}
void Test(Sample& test,Record& record)
{
test.EnjoySport = true;
if(record.xiabiao[] == )
{
if(record.yangben.airTemp != test.airTemp)
{
test.EnjoySport = false;
}
}
else if(record.xiabiao[] == )
{
if(record.yangben.forecast != test.forecast)
{
test.EnjoySport = false;
}
}
else if(record.xiabiao[] == )
{
if(record.yangben.humidity != test.humidity)
{
test.EnjoySport = false;
}
}
else if(record.xiabiao[] == )
{
if(record.yangben.sky != test.sky)
{
test.EnjoySport = false;
}
}
else if(record.xiabiao[] == )
{
if(record.yangben.water != test.water)
{
test.EnjoySport = false;
}
}
else if(record.xiabiao[] == )
{
if(record.yangben.wind != test.wind)
{
test.EnjoySport = false;
}
} if(test.EnjoySport == true)
{
cout << "喜欢运动!" << endl;
}
else
{
cout << "不喜欢运动!" << endl;
}
}
int main()
{
Sample sap[];
InitSampleArray(sap);
Record record;
InitRecord(sap[],record);
GenerateRule(sap,record);
Sample test;
test.airTemp = Cool;
test.forecast = Change;
test.humidity = Normal;
test.sky = Rainy;
test.water = Cold;
test.wind = Strong;
Test(test,record);
getchar();
}
概念学习(Concept Learning)的更多相关文章
- 【转载】 《Human-level concept learning through probabilistic program induction》阅读笔记
原文地址: https://blog.csdn.net/ln1996/article/details/78459060 --------------------- 作者:lnn_csdn 来源:CSD ...
- Paper Reading - Learning like a Child: Fast Novel Visual Concept Learning from Sentence Descriptions of Images ( ICCV 2015 )
Link of the Paper: https://arxiv.org/pdf/1504.06692.pdf Innovations: The authors propose the Novel V ...
- [ML] Concept Learning
Candidate Elimination Thanks for Sanketh Vedula. This is a good demo to understand candidate elimina ...
- c++ 概念及学习/c++ concept&learning(三)
这一篇继续说说程序设计中的基本语句:控制块 一 if类控制语句 if if else if , else if ,else if(条件语句){如果条件为真,要做的一些事情} if(条件语句) {如 ...
- c++ 概念及学习/c++ concept&learning(二)
上篇内容讲述了整个语言的发展[为什么会产生编程语言],以及学习C++所需要掌握的内容.这节开始认识第一部分最基本的内容:C++的内建类型,也就是基本类型. 在这些知识之前留一个问题:为什么基本所有语言 ...
- c++ 概念及学习/c++ concept&learning(一)
学习过计算机组成原理就会知道,处理器会从主存中取得指令,然后进行解释执行.而他们的交流方式是以二进制方式进行的,也就是他们只能识别1和0 :其实计算机是不知道1和0的,现在的实现方式是以高电压与低电压 ...
- ML一(概念学习和一般到特殊序)
概念学习和一般到特殊序 Concept Learning and the General-To-Specific Ordering 1 简介 1.1 定义 概念学习(Concept Learning) ...
- (转) Learning from Imbalanced Classes
Learning from Imbalanced Classes AUGUST 25TH, 2016 If you’re fresh from a machine learning course, c ...
- Introducing: Machine Learning in R(转)
Machine learning is a branch in computer science that studies the design of algorithms that can lear ...
随机推荐
- crontab 日志备份定时任务
-l选项,查看当前用户的所有定时任务: [xiluhua@vm-xiluhua][/home]$ crontab -l * * * * * /home/xiluhua/shell_script/log ...
- Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
docs.jboss.org文档示例代码:(http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/) sta ...
- Linux设置FQDN
FQDN是Fully Qualified Domain Name的缩写, 含义是完整的域名. 例如, 一台机器主机名(hostname)是www, 域后缀(domain)是example.com, 那 ...
- Redis的使用完整版
[Redis基本] 1.redis安装完成后的几个文件: redis-benchmark 性能测试工具(批量写入)./bin/redis-benchmark -n 10000 即可一次性写入100 ...
- cocospod 安装和使用
一 ruby 安装 要安装coocspod 首先需要安装ruby,可以先安装xcode,在安装macport 下载地址,最后执行命令 port install ruby 二.安装CocoaPods 1 ...
- 20151221001 GridView 模板
<asp:GridView ID="GridView1" runat="server" AllowPaging=" ...
- Linux高级变量
http://blog.chinaunix.net/uid-27040051-id-3450991.html 高级变量 基本形式 [1].变量扩展 格式 ${变量名称} [2].命令扩展 格式 $(命 ...
- python请求java Selenium Webdriver
下载jar包: selenium-server-standalone-2.44.0.jar 运行jar包: java -jar selenium-server-standalone-2.44.0.ja ...
- mysql 字段引号那个像单引号的撇号用法
我们知道通常的SQL查询语句是这么写的: select col from table; 这当然没问题,但如果字段名是“from”呢? select from from table; 若真的这么写,必然 ...
- dot函数
dot函数是两个向量的点乘,注意lua中dot函数的写法 th> a [torch.DoubleTensor of size 1x3] [.0002s] th> b [torch.Doub ...