文章目录
一、决策树
1、树模型
- 决策树:从根节点开始一步步走到叶子节点(决策)
- 所有的数据最终都会落到叶子节点,既可以做分类也可以做回归
2、树的组成
- 根节点:第一个选择点
- 非叶子节点与分支:中间节点
- 叶子节点:最终的决策结果
3、决策树的训练与测试
- 训练阶段:从给定的训练集构造出来一棵树(从根节点开始选择特征,重点在于如何进行特征切分)
- 测试阶段:根据构造出来的树模型从上到下去执行一遍
- 难点:决策树的难点在于如何构建树模型,需要考虑的因素很多
4、如何切分特征(选择节点)
通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根节点,以此类推。
5、经典衡量标准—熵
- 熵:表示随机变量不确定性的度量(物体内部的混乱程度)
- 公式: H ( x ) = − ∑ i = 1 n p i ∗ log p i , i = 1 , 2 , ⋯ , n (1) H(x)=-\sum_{i=1}^np_i*\log p_i,\,\,i=1,2,\cdots,n\tag{1} H(x)=−i=1∑npi∗logpi,i=1,2,⋯,n(1)
- 例子:两个集合,即: A = [ 1 , 1 , 1 , 1 , 1 , 2 , 2 ] , B = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ] (2) A=[1,1,1,1,1,2,2],\,\,B=[1,2,3,4,5,6,7]\tag{2} A=[1,1,1,1,1,2,2],B=[1,2,3,4,5,6,7](2)显然A集合的熵值要低,因为A里面只有两种类别,相对稳定一些;而B中类别太多,熵值就会大很多。
- 事物的不确定越大,其熵值也就越大。
当 p = 0 p=0 p=0或 p = 1 p=1 p=1时, H ( p ) = 0 H(p)=0 H(p)=0,随机变量完全没有不确定性;
当 p = 0.5 p=0.5 p=0.5时, H ( p ) = 1 H(p)=1 H(p)=1,随机变量的不确定性最大。 - 通过信息增益来决策一个节点的选择。信息增益说表示特征X使得类Y的不确定性减少的程度。
6、改进衡量标准
(1)ID3
ID3就是用信息增益来衡量特征的重要性。
(2)C4.5
用信息增益率,解决了ID3问题,考虑了自身熵值。
(3)CART
使用Gini系数来当做衡量标准,计算公式为: G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 (3) Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2\tag{3} Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2(3)和熵的衡量标准类似,计算方式不相同。
7、剪枝策略
- 决策树过拟合风险很大,理论上可以完全分得开数据,因此需要进行剪枝。
- 剪枝策略:预剪枝,后剪枝
- 预剪枝:边建立决策树边进行剪枝的操作(使用较多)
- 后剪枝:当建立完决策树后来进行剪枝操作
(1)预剪枝
在构建决策树时,限制深度、叶子节点个数、叶子节点样本数、信息增益量等。
(2)后剪枝
通过一定的衡量标准,即: C α ( T ) = C ( T ) + α ⋅ ∣ T l e a f ∣ (4) C_\alpha(T)=C(T)+\alpha\cdot|T_{leaf}|\tag{4} Cα(T)=C(T)+α⋅∣Tleaf∣(4)叶子节点越多,损失越大。
二、集成算法
1、Ensemble learning
- 目的:让机器学习效果更好
- Bagging:训练多个分类器取平均 f ( x ) = 1 M ∑ m = 1 M f m ( x ) (5) f(x)=\frac1M\sum_{m=1}^Mf_m(x)\tag{5} f(x)=M1m=1∑Mfm(x)(5)
- Boosting:从弱学习器开始加强,通过加权来进行训练 F m ( x ) = F m − 1 ( x ) + arg min h ∑ i = 1 n L ( y i , F m − 1 ( x i ) + h ( x i ) ) (6) F_m(x)=F_{m-1}(x)+\argmin_h\sum_{i=1}^nL(y_i,F_{m-1}(x_i)+h(x_i))\tag{6} Fm(x)=Fm−1(x)+hargmini=1∑nL(yi,Fm−1(xi)+h(xi))(6)
- Stacking:聚合多个分类或回归模型(可以分阶段来做)
2、Bagging模型
- 全称:bootstrap aggregation(其实就是并行训练一堆分类器)
- 最典型的代表就是随机森林
- 随机:数据采样随机,特征选择随机
- 森林:很多个决策树并行放在一起
- 随机森林优势:
① 它能够处理很高维度(特征很多)的数据,并且不用做特征选择
② 在训练完后,它能够给出哪些特征比较重要
③ 容易做成并行化方法,速度比较快
④ 可以进行可视化展示,便于分析
3、Boosting模型
- 典型代表:Adaboost、Xgboost
- Adaboost会根据前一次的分类效果调整数据权重
- 解释:如果某一个数据在这次分错了,那么在下一次我就会给它更大的权重
- 最终的结果:每个分类器根据自身的准确性来确定各自的权重,再结合
4、Stacking模型
- 堆叠:暴力模型,拿来一堆分类器直接上
- 可以堆叠各种各样的分类器(KNN,SVM,RF等等)
- 分阶段:第一阶段得出各自结果,第二阶段再用前一阶段结果训练
- 堆叠在一起确实能使得准确率提升,但是速度是个问题!
三、参考文献
[1] 唐宇迪. 跟着迪哥学Python数据分析与机器学习实战[M]. 北京: 人民邮电出版社, 2019: 154-174.