算法总结(集体编程智慧) - 分类

监督算法:根据训练样本推测某一分类或某一数值。

分类


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个样本中各个类别的比例来分类。

    优点:     能利用复杂函数进行预测,又能简单易懂。

    增量学习,在线模型

    缺点:     分类过程效率低(需要比较所有的样本空间)

                   确定缩放因子(当样本很大时)

阅读更多
个人分类: 集体编程智慧
上一篇优化算法 - 遗传算法
下一篇算法总结(集体编程智慧) - 聚类、优化
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭