ML04_2分类之决策树

强烈的觉得脑子有点不够用了,急切的想要找寻一种快速的恢复精力的方法。。。

之前的线性分类器等的输出是一个代数公式,而决策树的输出已过是一棵条件数。

ML04_2分类之决策树_第1张图片
决策树实例

1、决策树算法

参考资料:《数据挖掘:概念与技术》e3第8章
决策树算法要解决的核心问题:1)该按照什么样的次序来选择变量?2)对于连续变量,最佳分离点在哪里?
先解决第二个问题:1)如果是分类变量,则对于其每个分类都产生一个分支;2)如果是连续变量,则产生两个分支,分裂点通常选择两个已知点的中点。
常用的决策树算法有ID3、C4.5、CART及组合算法。下面重点介绍一下ID3和ID4.5

1.1 ID3

Interative Dichotomiser,迭代的二分器,是由机器学习研究人员Quinlan在20世纪初期开发的决策树算法。
为了解决变量的次序选择问题,ID3引入了信息增益的概念。下面用一个示例来说明这个概念。

ML04_2分类之决策树_第2张图片

假设现在的目标是对顾客是否购买电脑进行分类。首先要计算期望信息:


然后从age开始,考察对每个age的buys_computer的分布,计算出根据age划分的期望信息:

ML04_2分类之决策树_第3张图片

这种划分的信息增益为:


类似的,可以计算出Gain(income)=0.029,Gain(student)=0.151,Gain(credit_rating)=0.048,由于age具有最高的信息增益,所以被选为分裂属性。

ML04_2分类之决策树_第4张图片

这样的过程可以递归进行下去,这样就解决了属性选择的问题。

1.2 ID4.5

ID4.5也是Quinlan提出的,是对ID3的改进。主要是为了解决ID3倾向于选择分类多的变量作为分裂变量的问题。引入了增益率的概念,加入了惩罚项。

1.3 组合算法

常见的组合算法包括bagging(装袋法)、boosting(提升法)和randomForest。
组合算法的思想大致相同,主要的基于样本产生新样本的思路不同。
1)基于学习数据集抽样产生若干训练集
2)使用训练集产生若干分类器
3)每个分类器分别迚行预测,通过简单选举多数,判定最终所属分类

ML04_2分类之决策树_第5张图片
组合算法的大致步骤

bagging算法对训练集进行等可能的有放回的抽样,产生出新的训练集;而boosting则是为每个样本增加了权重的概念;randomForest不仅对观测进行抽样,而且对变量也进行随机抽样。
分类的效果而言:randomForest > boosting > bagging

2、R示例

多说一句,如何在R中找到想要的包?如想要找到R包中实现了bagging和boost算法的包。
打开R包的查看目录Available CRAN Packages By Name,ctrl+F查找bagging,会找到有很多包实现了bagging算法,通过查看包简介,确定了如下包:adabag:Applies Multiclass AdaBoost.M1, SAMME and Bagging

下面以对r中的iris数据集分类为例,介绍bagging、adaboost和randomForest的使用方法。

library(adabag)
#使用bagging对iris进行分类
iris.bagging <- bagging(Species~., data=iris, mfinal=10)
iris.bagging.pred<-predict.bagging(iris.bagging,iris,newmfinal = 10)
iris.bagging.pred$confusion
iris.bagging.pred$error
#使用adaboost对iris进行分类
iris.adaboost <- boosting(Species~., data=iris, boos=TRUE, mfinal=5)
importanceplot(iris.adaboost)
iris.adaboost.pred <- predict.boosting(iris.adaboost,newdata=iris)
iris.adaboost.pred$confusion
iris.adaboost.pred$error
#使用randomForest对iris进行分类
library(randomForest)
iris.rf<-randomForest(Species~., data=iris)
iris.rf.pred<-predict(iris.rf,iris)
table(iris.rf.pred,iris$Species)

你可能感兴趣的:(ML04_2分类之决策树)