引言
之前写的都太冗余了,其实代码什么的后面都差不多,把那章一个完整的机器学习项目认真学会了,就可以上Kaggle上面修炼了。以后我会试着用更简洁的语言,把问题大致说清楚,更大程度上忽略细节。
决策树
什么是决策树
决策树很简单,下图就是一颗决策树,能区分香蕉、西瓜、橙子三种水果。
是
否
是
否
是否是圆的
是否是绿的
香蕉
西瓜
橙子
但是对于我们所说的决策树,很关键一点就是,每个叶子节点里面包含的不是一个确定的类,而是成为某一类的概率,我们送于训练的样本通常来说并不存在某种方式把每类都分清楚(都分清楚了反而是过拟合)。
如何构建决策树
决策树判断是非常简单的,问题在于如何训练
基尼指数
G
i
=
1
?
∑
k
=
1
n
P
i
,
k
2
G_i={1-\sum_{k=1}^n}P_{i,k}^2
Gi?=1?∑k=1n?Pi,k2? 基尼指数代表纯度,如果只含一个类,显然等于0,纯度非常高。越高纯度说明这个节点预测能力越强,可想而知我们希望节点的基尼指数尽可能高。
信息熵
H
i
=
?
∑
k
=
1
,
P
i
,
k
!
=
0
n
P
i
,
k
l
o
g
(
P
i
,
k
)
H_i=-\sum_{k=1,P_{i,k}!=0}^nP_{i,k}log(P_{i,k})
Hi?=?∑k=1,Pi,k?!=0n?Pi,k?log(Pi,k?) 信息熵就是含的信息量,如果一个节点只有一类,那log1=0,即信息熵为0。 众所周知,熵的意思是无序程度,熵越大不确定度越高,我们总是希望不确定性低一点,所以熵要尽可能小。 我们将依据这两个指标(二选一)建立树,聪明的你一定想到办法了
CART算法(sklearn使用的算法)
增长树算法,每次用一个一个特征和一个阈值
(
t
,
t
k
)
(t,t_k)
(t,tk?)去进行预测,使得结点基尼指数最大。但是由于分开的两个节点包含样本数量不同,所以要把样本数作为权重加和计算。
ID3算法
最开始就一个节点,信息熵很大。我们使用某个特征对节点进行拆分,拆分完后几个节点的加权信息熵要尽可能小。信息增益就是原本的信息熵减掉新的信息熵,信息增益要尽可能大。
C4.5算法
H
f
H_f
Hf?代表代表父节点的信息熵 信息增益率
I
G
R
i
=
H
f
?
H
i
H
i
IGR_i=\frac{H_f-H_i}{H_i}
IGRi?=Hi?Hf??Hi??,信息增益率作为划分集合的标准
集成学习
什么是集成学习
用多个模型进行预测,并通过组合获得更好的预测效果(基本是最强的机器学习方式了)。
Adamboost
用第一个模型进行预测,由于模型很简单会产生很多错误预测,增加这部分的比重,使用第二个模型进行训练,以此类推。要控制模型基分类器的数量,防止过拟合。
GradientBoost
梯度提升,用第二个模型预测第一个模型的残差,以此类推。
Stacking
一种思想,上面两种是使用序列化的思想进行集成学习的。而Stacking则是依靠训练模型来组合已有的模型。sklearn不支持stacking,要自己进行组合。
随即森林
把样本进行拆分,每次使用其中一些特征,训练出很多课树,然后调节每棵树的权重并组合,获得最终结果。 最简单就是投票机制,五颗决策树中四颗说这是西瓜,一个说是黄瓜,那他就是西瓜。
各种牛逼的boostedtree
xgboost、lightGBM等
|