【机器学习】一看就懂的教程:决策树

在机器学习中,监督分类(自己先选定好特征参数)有朴素贝叶斯,支持向量机SVM,还有决策树。对于前两个,可以看下面两篇文章复习:

[机器学习]一看就懂的教程:朴素贝叶斯

[机器学习]一看就懂的教程:支持向量机SVM

决策树,听名字就知道很简单,所以这个算法我也是非常简单的过一下

构建决策树 Decision Trees

下图的样本,通过决策树,要进行三次分割

【机器学习】一看就懂的教程:决策树

代码是十分简单

#导入模块
from sklearn import tree   

X = [[0, 0], [1, 1]]
Y = [0, 1]

#创建分类器,进行拟合
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)

用决策树拟合出来的决策面是小锯齿形的,如下图这样

【机器学习】一看就懂的教程:决策树

决策树参数

1.min_samples_split 当前节点允许分裂的最小样本数

也就是根节点的样本数小于这个值的时候就不用再分裂了,例如下图
当min_samples_split=2时,最右边的值为1的根节点不需要再分裂,其他均需再分裂
当min_samples_split=41时,所有根节点都不需要再分裂

【机器学习】一看就懂的教程:决策树

2.entropy 熵 一系列样本中的不纯度的测量值

例如再无人车驾驶时,蓝色为加速,红色为减速,第一幅图是地面坡度与颠簸程度,第二幅图是地面坡度与速度限制,很明显,第二幅图的纯度更高

【机器学习】一看就懂的教程:决策树
熵的公式:

H(X)=i=1np(xi)log2p(xi)H(X)=-\sum_{i=1}^np(x_{i})log_{2}p(x_{i})

其中
p(xi)p(x_{i})
是第i类中的样本占总样本数的比例

如果所有的样本都属于同一类(class),那么熵的值为0,如果所有的样本都是均匀分布在所有的类中,那么熵的值为1

3.Information Gain 信息增益:父节点的熵减去子节点的熵的加权平均

我们来看一个例子:

坡度 颠簸 限速 速度
颠簸
平滑
颠簸 不限
平滑 不限

现在有一个父节点是:慢慢快快,熵为1

我们按照坡度来进行划分,得到两个子节点,一个是“慢慢快”,一个是“快”

慢慢快快
慢慢快

右边的“慢"结点的熵为:0

左边的”慢慢快“的熵为:0.9183(其中P(慢)=2/3, P(快)=1/3)

如果计算有困难,可以直接在Python IDLE里面计算:


import scipy.stats
print scipy.stats.entropy([2,1],base=2)


那么信息增熵(坡度)=父节点的熵减去子节点的熵的加权平均=1-1/4(3×0.9183+1×0)=0.3112

同样的方法,得到
信息增熵(颠簸)=0
信息增熵(限速)=1

因此限速就是我们应该划分的变量

OK,这就是决策树的全部,其实决策树理解起来非常简单,而熵和信息增熵是其中比较难的点,不过没关系,相信你这么聪明,一定看得懂的啦~

更多的文章,请看:

【机器学习】一看就懂的教程:决策树