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

  1. 【转载】 《Human-level concept learning through probabilistic program induction》阅读笔记

    原文地址: https://blog.csdn.net/ln1996/article/details/78459060 --------------------- 作者:lnn_csdn 来源:CSD ...

  2. 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 ...

  3. [ML] Concept Learning

    Candidate Elimination Thanks for Sanketh Vedula. This is a good demo to understand candidate elimina ...

  4. c++ 概念及学习/c++ concept&learning(三)

    这一篇继续说说程序设计中的基本语句:控制块 一 if类控制语句 if if else if  , else if ,else if(条件语句){如果条件为真,要做的一些事情}  if(条件语句) {如 ...

  5. c++ 概念及学习/c++ concept&learning(二)

    上篇内容讲述了整个语言的发展[为什么会产生编程语言],以及学习C++所需要掌握的内容.这节开始认识第一部分最基本的内容:C++的内建类型,也就是基本类型. 在这些知识之前留一个问题:为什么基本所有语言 ...

  6. c++ 概念及学习/c++ concept&learning(一)

    学习过计算机组成原理就会知道,处理器会从主存中取得指令,然后进行解释执行.而他们的交流方式是以二进制方式进行的,也就是他们只能识别1和0 :其实计算机是不知道1和0的,现在的实现方式是以高电压与低电压 ...

  7. ML一(概念学习和一般到特殊序)

    概念学习和一般到特殊序 Concept Learning and the General-To-Specific Ordering 1 简介 1.1 定义 概念学习(Concept Learning) ...

  8. (转) Learning from Imbalanced Classes

    Learning from Imbalanced Classes AUGUST 25TH, 2016 If you’re fresh from a machine learning course, c ...

  9. Introducing: Machine Learning in R(转)

    Machine learning is a branch in computer science that studies the design of algorithms that can lear ...

随机推荐

  1. 为什么很多人用keepalived来实现redis故障转移

    目前,Redis还没有一个类似于MySQL Proxy或Oracle RAC的官方HA方案.Redis作者有一个名为Redis Sentinel的计划 ,据称将会有监控,报警和自动故障转移三大功能,非 ...

  2. jython语言学习笔记

    1.变量可以随便定义,不限制类型,不限制数值.开头空4个空格,使用def定义函数,可以嵌套,可以传参. 2.每个语句结束的时候没有分号.定义类的时候没有括号.在print语句的后面有格式转换时要加上% ...

  3. struts2上传

    注意事项:文件名必须是:文件域+FileName,如: // 封装上传文件域的属性 private File uploadImage; // 封装上传文件名的属性 private String upl ...

  4. Install Hive

    一.Hive将元数据存储在RDBMS中,有三种模式可以连接到数据: 1.single User Mode:此模式连接到一个In-memory的数据库Derby,一般用于Unit Test. 2.Mul ...

  5. 15、Jdbc的优化(BeanUtils组件)

    Jdbc的优化! BeanUtils组件 自定义一个持久层的框架 DbUtils组件 案例优化 1. BeanUtils组件 1.1    简介 程序中对javabean的操作很频繁, 所以apach ...

  6. iOS身份证的正则验证

    在ios项目的开发中可能很多地方都需要用到身份证校验,一般在开发的时候很多人都是直接百度去网上荡相关的正则表达式和校验代码,但是网上疯狂粘贴复制的校验代码本身也可能并不准确,可能会有风险,比如2013 ...

  7. PullToRefresh 下拉刷新的样式修改

    资源文件结构图, 先看看下拉刷新头的布局, <?xml version="1.0" encoding="utf-8"?> <merge xml ...

  8. raw_input() 与 input()

    这两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互.但他们的功能不尽相同. >>> raw_input_A = raw_input("raw_inpu ...

  9. River Hopscotch(二分POJ3258)

    River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9263 Accepted: 3994 Descr ...

  10. 分页sql存储过程算法

    /****** Object: StoredProcedure [dbo].[PRO_Pub_FenYe] Script Date: 08/04/2014 11:14:22 ******/ SET A ...