上一集中,我们讲解了K近邻算法,那是一个十分入门的算法,并没有显式的训练方法。这次,我们要做一个真正的机器学习算法,决策树算法。当然,它也是一个多元分类器。相比较K近邻算法对于数值型的数据处理较为舒服,因为毕竟是算距离,所以你就算是跑到天涯海角,也能算出来。但是决策树对于数值型的数据处理起来还是有些吃力,最好的话能有较少的几类标称数据才行。
好的,闲话少说。我们进入正题,同样的,我们继续举例子,我高中时候最喜欢生物了,界门纲目科属种,等等,我记得是有9层分类,这就像我们的决策树,那么我们每一次分类都会有一些特征,比如蜘蛛来说。蜘蛛是动物界,这个依据还用说么,是节肢动物门,这个分类依据就是因为属于这种动物的两侧对称,异律分节,身体以及足分节,可分为头胸腹3部分,每一体节上有一对……balabala等等,我也看不懂。然后依次往下类推了。对不对,分类上面是不是就是这么简单?这就使决策树的使用,只需要把待检测的样本的每一个特征依次比对,依照决策树依次比对即可。
什么,这就完了?这算什么机器学习决策树,这种我也会啊。别急,这只是进行实验的过程,机器学习中的重点在于这个分类器的构建,也就是这个决策树的产生。对,也就是说,机器学习,学习的是什么,是分类方法。这种分类方法不是你告诉他的,不是我告诉他的,是他自己通过训练样本自己学习而来的。这么神奇?对,这次我们讲解的是一个相对简单的决策树算法,ID3算法。
ID3算法的主要思想是,不对,先介绍一下决策树构建的顺序。决策树构建,首先要选取第一个分类的特征,那么,我们选择哪一个呢?点点豆豆,随机选择吗?不,这样的话,可能选择出来的决策树又长而且效率不高,这时候,就要用到ID3算法,为的是选择出来一个尽可能高效的分类特征,也就是区别度最大的一个。那这个所谓的区别度最大的一个特征,怎么找出来,可能你说能分得最清楚的,或者是分的最详细的等等。这些没有办法量化,不量化,就不能进行处理啊。于是,这时候,信息论可以出场了。它包含了一个描述信息无序程度的量度,叫做信息熵。什么,不明白?熵原来是物理学里的衡量能量无序程度的度量,信息熵自然就是衡量信息无序程度的度量。在数学上的表示是这样的:
好吧,好像是有点大了,不过也很值得这么大,因为它的提出是香农,而曾经计算机界的最大的实验室,贝尔实验室最后分裂了,它的缩小版就是香农实验室。而在贝尔实验室和MIT(麻省理工学院)有很多人将香农和爱因斯坦相提并论,而其他人认为这种对比是不公平的,而不公平的对象不是爱因斯坦,而是香农。当然,我们并不能讲香农和爱因斯坦谁更厉害,但是至少在计算机技术人员的眼里,香农所代表的成就是难以企及的。
这就是信息熵的表达式,看起来很简单的样子,其中Pi所代表的是第i个信息占所有信息总和的概率,而取log2则是为了单位,因为去Log2的话,单位是比特,其他的也可以。这样,一个信息集合的信息熵就计算完成了。这个H的数目越大,表示了信息的无序程度越高,而对于人的直观反映就是个体与个体之间的差异性越大。比如也许苹果和橘子的差距没有苹果和香蕉的差异大,这是因为苹果和橘子除了都是水果外,它们还都是圆形的,这就是信息熵的表现形式。
我们的储备知识足够了,现在要讲ID3算法了,它的主要思想是选择一个特征,通过这个特征,可以把信息集合的信息熵下降的最快,也就是选择差别度最大的一个特征。比如我们的动物,植物,微生物,这种分类就是最大的感觉是一样的,只不过动物界的分类是经过了成百上千年的人类经验积累而得来的。我相信,如果我们能够提供出足够多的样本数据和样本特征,计算机一定会构建出区分当今生物界的另外一套体系。
我们现在用的ID3算法是最简单的,每次选取一个特征值来进行判别。那有人可能会问了,万一我的种类超过了我的特征值,这该如何区分呢。好吧,我们现在这个算法不能够完成你这个目标,不过后面的算法也许可以了,请继续关注。现在我们把它简化了,如果最后出现特征值用完了,但是类别还没分清楚的话,我们就进行多数表决,让所属个数最多的分类来表示这个分类。这样,就可以构建出决策树了。
而机器学习中所谓的训练过程,就是拿已有的数据,让机器进行决策树的构建,而测试过程,就是让机器通过构建的决策树来进行分类。这次可是急切学习了,可不要说我懒,总是用懒惰学习。
现在,我们已经介绍了2种机器学习的方法了,在机器学习中,这2种方法是较为简单的方法,不过它已经可以做很多不可思议的事情了。比如给你足够多的女生的照片,让你判断喜欢还是不喜欢,通过一阵子的训练,机器就会知道你喜欢什么样的女生。比如给你足够多的衣服,让你去选择买什么样的,通过一阵子训练,机器就会知道你喜欢什么样的衣服,或者说,可以知道你最看重的是什么,比如品牌,还是样式还是什么,等等。当然,以后攻克癌症啊,或者是发现人类的起源啊等等这些看似梦幻的研究,最终都会有一个答案。
我在期待,我也在努力,你在哪里!