监督算法:根据训练样本推测某一分类或某一数值。
分类
1. 贝叶斯分类器
1.1 训练:
贝叶斯在对训练样本训练时,样本需要包含特征列表和对应的分类。比如,判断包含单词“Python”的文档是属于编程语言的,还是关于蛇的,如下图的:
特征 | 分类 |
Python是以鸟和哺乳动物为食的大蟒 | 蛇 |
Python最初是作为一门脚本语言被开发出来的 | 语言 |
。。。。。。 | 。。。。。。 |
分类器会记录所有特征,并计算其分别与分类的数字概率,将特征提取为单词特征,利用分词实现,经过训练后,可以得到一组概率如下:
特征(单词) | 语言 | 蛇 |
动态 | 0.6 | 0.1 |
长度 | 0.1 | 0.2 |
源代码 | 0.3 | 0.1 |
动物 | 0.0 | 0.6 |
其代表的意思是,“动态”这个单词是“语言”类文章的概率是0.6,属于“蛇”类文章的是0.1。
1.2 分类:
假设有一篇包含“长度”,“动态”和“源代码”的文档,请判断该文档的分类。训练时得到的都是单个特征,这里需要将特征进行组合,利用贝叶斯公式求后验概率,在该组合下属于类别“语言”的概率为:
P(语言 /{长度、动态、源代码})=
P({长度、动态、源代码}/语言)* P(语言)
条件概率P({长度、动态、源代码}/语言)为:
P({长度、动态、源代码}/语言) =
P(长度/语言)*P(动态/语言)*P(源代码/语言)
假设类别出现的概率相等:
P(蛇) = P(语言)= 0.5
则P(语言 /{长度、动态、源代码})= 0.1*0.6*0.3 / 0.5 = 0.036
同理,属于“蛇”类别的概率为:
P(蛇 /{长度、动态、源代码})=
P({长度、动态、源代码}/蛇)* P(蛇) =
0.2*0.1*0.1/ 0.5 = 0.004
因此,出现“长度”,“动态”和“源代码”的文档应该是“语言”类。
1.3 优点和缺点:
优点:
最大的优点是对大数据量的训练和查询速度较快,并且训练和分类的过程也仅仅是对特征概率的简单数学运算。
支持增量的学习训练模式,即不借助任何已训练的数据就可以更新特征概率值。
可读性强,容易理解
缺点:
最大的缺点是不支持基于特征组合的情况。例如,邮件过滤,假如由于工作的原因邮件中会经常出现“在线”这个词,而有个朋友开了家药店,经常会发一些包含“药店”的信息。另外,也会收到包含“在线药店”的垃圾邮件。这个时候,分类器是被告知“在线”和“药店”是出现在非垃圾邮件中的,而在被告知“在线药店”是垃圾邮件时,其“在线”和“药店”特征概率的就会改变,因此这些单词的特征概率是单独给的。
这是“集体编程智慧”的书中给出的例子,但是我觉得并不是不能改进,对于贝叶斯来说,它并不关心有哪些特征,只关心特征的概率,因此当有组合特征时,只需要将组合特征作为一个新的特征记录下来就可以了,这个组合特征是独立的,享受独立的概率变化。
2. 决策树分类器
2.1 训练:
每一步选择一个属性作为节点,进行拆分,选择的准则就是信息增益Gain。例如对水果分类的例子:
直径 | 颜色 | 水果 |
4 | 红 | 苹果 |
4 | 绿 | 苹果 |
1 | 红 | 樱桃 |
1 | 绿 | 葡萄 |
5 | 红 | 苹果 |
其类别属性有两个:直径和颜色。首先计算选择颜色进行划分的结果:
红 | 绿 |
苹果 | 苹果 |
樱桃 | 葡萄 |
苹果 |
|
下面看看选择直径进行拆分的结果:
直径 < 4 | 直径 > =4 |
樱桃 | 苹果 |
葡萄 | 苹果 |
| 苹果 |
通过观察的话,我们会认为选择直径的效果较好,为什么?因为我们可以通过直径 苹果全都划分到一边,那这个代表什么呢?如何用数学表达呢?
这里引入一个概念叫“熵”-Entropy,起源于热学,最初表示能量的分布;图像处理领域一幅图像的熵代表了其像素值的分布;在统计学中,熵代表了样本的分布。熵越大代表能量分布也不均匀、图像像素变化越大、样本种类越繁杂。因此,我们可以得出,在直径>=4时将的空间中都是苹果,因此次划分空间的熵小,而<4的熵则大!下面有数学表示:
P(i) = 出现的次数 / 划分空间的样本数
Entropy = 结果中所有的P(i) *logP(i) 的和
熵越小,就意味集合中样本同质越严重,等于0时代表所有元素都是一个类型。通常通过信息增益(Gain)来作为选择的准则:
Gain = entropy (original)– weight1*entropy (set1) – weight2*(set2)
weight是权重 = 子集的大小 / 原始集合大小
这样每次选择信息增益最大的作为划分。
决策树选择准则的目的就是为了使得空间样本的熵越来越小。
2.1 优点和缺点:
优点:解释性强;能处理特征之间的影响,比如贝叶斯缺点中的特征组合问题。
缺点:不支持增量学习模型,每次训练都需要从头开始;如果样本类别空间很大,节点数量过多,树的结构会异常庞大和复杂,分类效率降低。
3. 神经网络
训练:反向转播法
分类:正向传播法
优点和缺点:
优点: 能够处理复杂的非线性函数,能发现不同输入间的依赖关系。
允许增量式训练,不需要保留已训练的原始样本。
缺点: 黑盒,不易理解
没有明确的规则(网络结构,规模)
4. 支持向量机
4.1 线性可分的情况
确定决策域,确定决策域的边界,确定边界上的样本点,这些样本点称为支持向量!
4.2 线性不可分的情况– 核技法
对于如下图的样本分布情况,不存在任意一条直线能将其分开:
解决的方法是,样本空间转换,即将样本通过线性变换(比如 两个样本各减去其均值,再分别求平方)转换到另外一个新的空间中,这种方法是多项式变换。
4.3 优点和缺点
优点: 功能强大,在正确的参数下效果很好。
分类时的速度快,因为只需判断在分界线的那一侧就可以了
缺点: 每个数据集的最佳核变换函数极其参数都是不一样的,对于不同个样本需要不同的核函数和参数。
一般情况下,SVM适合大数据量的问题,而决策树分类则适合规模小的数据集。
SVM如同神经网络一样黑盒,由于存在空间的转换
5. k-最近邻(KNN)
对于输入的样本,就算空间样本中距离它最近的k的样本,根据这k个样本中各个类别的比例来分类。
优点: 能利用复杂函数进行预测,又能简单易懂。
增量学习,在线模型
缺点: 分类过程效率低(需要比较所有的样本空间)
确定缩放因子(当样本很大时)