数据挖掘-CART,C4.5,ID3,决策树,朴素贝叶斯
CART和C4.5决策树有什么区别?
1.C4.5算法是在ID3算法的基础上采用信息增益率的方法选择测试属性。 ID3算法和C4.5算法虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但其生成的决策树分支较大,规模较大。为了简化决策树的规模,提高生成决策树的效率,又出现了根据GINI系数来选择测试属性的决策树算法CART。
2.CART算法采用一种二分递归分割的技术,与基于信息熵的算法不同,CART算法对每次样本集的划分计算GINI系数,GINI系数,GINI系数越小则划分越合理。CART算法总是将当前样本集分割为两个子样本集,使得生成的决策树的每个非叶结点都只有两个分枝。因此CART算法生成的决策树是结构简洁的二叉树。
C4.5对ID3的改进
1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;(ID3采用信息增益)
2) 在树构造过程中进行剪枝;
3) 能够完成对连续属性的离散化处理;
4) 能够对不完整数据进行处理。
CART算法
原文出自:http://www.cnblogs.com/zhangchaoyang
分类回归树(CART,Classification And Regression Tree)也属于一种决策树,上回文我们介绍了基于ID3算法的决策树。作为上篇,这里只介绍CART是怎样用于分类的。
分类回归树是一棵二叉树,且每个非叶子节点都有两个孩子,所以对于第一棵子树其叶子节点数比非叶子节点数多1。
表1
名称 | 体温 | 表面覆盖 | 胎生 | 产蛋 | 能飞 | 水生 | 有腿 | 冬眠 | 类标记 |
人 | 恒温 | 毛发 | 是 | 否 | 否 | 否 | 是 | 否 | 哺乳类 |
巨蟒 | 冷血 | 鳞片 | 否 | 是 | 否 | 否 | 否 | 是 | 爬行类 |
鲑鱼 | 冷血 | 鳞片 | 否 | 是 | 否 | 是 | 否 | 否 | 鱼类 |
鲸 | 恒温 | 毛发 | 是 | 否 | 否 | 是 | 否 | 否 | 哺乳类 |
蛙 | 冷血 | 无 | 否 | 是 | 否 | 有时 | 是 | 是 | 两栖类 |
巨蜥 | 冷血 | 鳞片 | 否 | 是 | 否 | 否 | 是 | 否 | 爬行类 |
蝙蝠 | 恒温 | 毛发 | 是 | 否 | 是 | 否 | 是 | 否 | 哺乳类 |
猫 | 恒温 | 皮 | 是 | 否 | 否 | 否 | 是 | 否 | 哺乳类 |
豹纹鲨 | 冷血 | 鳞片 | 是 | 否 | 否 | 是 | 否 | 否 | 鱼类 |
海龟 | 冷血 | 鳞片 | 否 | 是 | 否 | 有时 | 是 | 否 | 爬行类 |
豪猪 | 恒温 | 刚毛 | 是 | 否 | 否 | 否 | 是 | 是 | 哺乳类 |
鳗 | 冷血 | 鳞片 | 否 | 是 | 否 | 是 | 否 | 否 | 鱼类 |
蝾螈 | 冷血 | 无 | 否 | 是 | 否 | 有时 | 是 | 是 | 两栖类 |
上例是属性有8个,每个属性又有多少离散的值可取。在决策树的每一个节点上我们可以按任一个属性的任一个值进行划分。比如最开始我们按:
1)表面覆盖为毛发和非毛发
2)表面覆盖为鳞片和非鳞片
3)体温为恒温和非恒温
等等产生当前节点的左右两个孩子。按哪种划分最好呢?有3个标准可以用来衡量划分的好坏:GINI指数、双化指数、有序双化指数。下面我们只讲GINI指数。
GINI指数
总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)。比如体温为恒温时包含哺乳类5个、鸟类2个,则:
体温为非恒温时包含爬行类3个、鱼类3个、两栖类2个,则
所以如果按照“体温为恒温和非恒温”进行划分的话,我们得到GINI的增益(类比信息增益):
最好的划分就是使得GINI_Gain最小的划分。
终止条件
一个节点产生左右孩子后,递归地对左右孩子进行划分即可产生分类回归树。这里的终止条件是什么?什么时候节点就可以停止分裂了?直观的情况,当节点包含的数据记录都属于同一个类别时就可以终止分裂了。这只是一个特例,更一般的情况我们计算χ2值来判断分类条件和类别的相关程度,当χ2很小时说明分类条件和类别是独立的,即按照该分类条件进行分类是没有道理的,此时节点停止分裂。注意这里的“分类条件”是指按照GINI_Gain最小原则得到的“分类条件”。
假如在构造分类回归树的第一步我们得到的“分类条件”是:体温为恒温和非恒温。此时:
哺乳类 | 爬行类 | 鱼类 | 鸟类 | 两栖类 | |
恒温 | 5 | 0 | 0 | 2 | 0 |
非恒温 | 0 | 3 | 3 | 0 | 2 |
我在《独立性检验》中讲述了χ2的计算方法。当选定置信水平后查表可得“体温”与动物类别是否相互独立。
还有一种方式就是,如果某一分支覆盖的样本的个数如果小于一个阈值,那么也可产生叶子节点,从而终止Tree-Growth。
如何确定叶子节点的类?
前面提到Tree-Growth终止的方式有2种,对于第一种方式,叶子节点覆盖的样本都属于同一类,那么这种情况下叶子节点的类自然不必多言。对于第二种方式,叶子节点覆盖的样本未必属于同一类,直接一点的方法就是,该叶子节点所覆盖的样本哪个类占大多数,那么该叶子节点的类别就是那个占大多数的类。
剪枝
当分类回归树划分得太细时,会对噪声数据产生过拟合作用。因此我们要通过剪枝来解决。剪枝又分为前剪枝和后剪枝:前剪枝是指在构造树的过程中就知道哪些节点可以剪掉,于是干脆不对这些节点进行分裂,在N皇后问题和背包问题中用的都是前剪枝,上面的χ2方法也可以认为是一种前剪枝;后剪枝是指构造出完整的决策树之后再来考查哪些子树可以剪掉。
在分类回归树中可以使用的后剪枝方法有多种,比如:代价复杂性剪枝、最小误差剪枝、悲观误差剪枝等等。
朴素贝叶斯分类方法
源自:http://www.cnblogs.com/zhangchaoyang/articles/2586402.html
我们统计了14天的气象数据(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play)。如果给出新一天的气象指标数据:sunny,cool,high,TRUE,判断一下会不会去打球。
table 1
outlook | temperature | humidity | windy | play |
sunny | hot | high | FALSE | no |
sunny | hot | high | TRUE | no |
overcast | hot | high | FALSE | yes |
rainy | mild | high | FALSE | yes |
rainy | cool | normal | FALSE | yes |
rainy | cool | normal | TRUE | no |
overcast | cool | normal | TRUE | yes |
sunny | mild | high | FALSE | no |
sunny | cool | normal | FALSE | yes |
rainy | mild | normal | FALSE | yes |
sunny | mild | normal | TRUE | yes |
overcast | mild | high | TRUE | yes |
overcast | hot | normal | FALSE | yes |
rainy | mild | high | TRUE | no |
这个问题可以用决策树的方法来求解,当然我们今天讲的是朴素贝叶斯法。这个一”打球“还是“不打球”是个两类分类问题,实际上朴素贝叶斯可以没有任何改变地解决多类分类问题。决策树也一样,它们都是有导师的分类方法。
朴素贝叶斯模型有两个假设:所有变量对分类均是有用的,即输出依赖于所有的属性;这些变量是相互独立的,即不相关的。之所以称为“朴素”,就是因为这些假设从未被证实过。
注意上面每项属性(或称指标)的取值都是离散的,称为“标称变量”。
step1.对每项指标分别统计:在不同的取值下打球和不打球的次数。
table 2
outlook | temperature | humidity | windy | play | |||||||||
yes | no | yes | no | yes | no | yes | no | yes | no | ||||
sunny | 2 | 3 | hot | 2 | 2 | high | 3 | 4 | FALSE | 6 | 2 | 9 | 5 |
overcast | 4 | 0 | mild | 4 | 2 | normal | 6 | 1 | TRUR | 3 | 3 | ||
rainy | 3 | 2 | cool | 3 | 1 |
step2.分别计算在给定“证据”下打球和不打球的概率。
这里我们的“证据”就是sunny,cool,high,TRUE,记为E,E1=sunny,E2=cool,E3=high,E4=TRUE。
A、B相互独立时,由:
得贝叶斯定理:
得:
又因为4个指标是相互独立的,所以
我们只需要比较P(yes|E)和P(no|E)的大小,就可以决定打不打球了。所以分母P(E)实际上是不需要计算的。
P(yes|E)*P(E)=2/9×3/9×3/9×3/9×9/14=0.0053
P(no|E)*P(E)=3/5×1/5×4/5×3/5×5/14=0.0206
所以不打球的概率更大。