引言
最近在读西瓜书,查阅了多方资料,恶补了数值代数、统计概率和线代,总算是勉强看懂了西瓜书中的公式推导。但是知道了公式以后还是要学会应用的,几经摸索发现python下的sklearn包把机器学习中经典的算法都封装好了,因此,打算写几篇博客记录一下sklearn包下的常用学习算法的使用,防止自己以后忘了,嘿嘿。
1.决策树
决策树是一种常见的机器学习算法,它的原理就是以事物的属性为节点,属性的不同取值为分支构造一棵多叉树。初始的多叉树可以学习到训练集上的事物的所有属性,我们通过相关的方法对这棵树进行剪枝和层次调整后,使之对于训练集中未出现过的新数据具有一定的分类能力,即泛化。
2.决策树算法种类
由1中对决策树的描述,我们可以知道生成决策树的核心问题就是分支的选择,即每一步我们应该选择待分类事物的哪一个属性作为分支属性,我们应该把对事物影响大的属性尽可能放在树的高层,这是因为越往下走剩下的样本就会越少对事物影响大的属性应该在树中对大多数样本起到分类作用。基于不同的分支选择方法,决策树主要有三类,即ID3算法,C4.5算法和CART算法。
1.ID3算法
ID3主要基于信息增益来进行分支属性的选择。首先引入信息熵:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
y
∣
p
k
l
o
g
2
p
k
Ent(D)=-\sum_{k=1}^{|y|} p_klog_2p_k
Ent(D)=−k=1∑∣y∣pklog2pk其中,|y|表示样本类别总数,
p
k
p_k
pk表示第k类样本所占的比例,我们可以把Ent(D)看成一个多元函数,使用拉格朗日乘数法(还需要结合分析法)即可求出其最大最小值,即:
0
≤
E
n
t
(
D
)