决策树
ID3算法
-
信息论基础
信息论中,熵度量了事务的不确定性,越不确定的事务,它的熵就越大。表示形式如下:
[H(X)=-sum_{i=1}^np_ilog_2 p_i ]多个变量联合熵表示如下:
[H(X,Y)=-sum_{i=1}^np(x_i,y_i)log p(x_i,y_i) ]条件熵的表示如下:
[H(X|Y)=-sum_{i=1}^np(x_i,y_i)log p(x_i|y_i)=sum_{j=1}^np(y_j)H(X|y_j) ] -
ID3算法
ID3算法是使用信息增益来判断当前节点应该用哪个特征来构建决策树。由上节可知,(H(X)-H(X|Y))它度量了X在知道了Y以后不确定性减少的程度,这个度量我们称为互信息,记为(I(X,Y)),在决策树ID3算法中叫做信息增益,信息增益越大,则越适合做分类。
-
ID3算法过程
1)先算样本总体的熵H(D)
2)对于每个特征算其条件熵H(D|A)
3)计算信息增益I(D,A)=H(D)-H(D|A)
4)选择对应信息增最大的那个特征作为分类特征。
-
ID3算法缺点
1)取值较多的特征比取值少的特征信息增益大
2)ID3不能应用于连续型数据
3)没有考虑缺失值
4)没有考虑过拟合问题
C4.5算法
-
对ID3算法缺点的改进
1)对于取值多信息增益大的问题,引入信息增益比的度量(I_R(X,Y))它定义如下:
[I_R(D,A)=frac{I(A,D)}{H_A(D)} ]其中D为样本特征的输出集合,A为样本特征,对于特征熵(H_A(D))定义如下:
[H_A(D)=-sum_{i=1}^nfrac{|D_i|}{|D|}log_2frac{|Di|}{|D|} ]其中n为特征A的类别数,(|D_i|)为特征A的第i个取值对应的样本个数,|D|为样本总个数。
这样,特征越多的对应特征熵越大,它作为分母可以校正信息增益偏向于取值较多特征的问题。
2)将连续特征的离散化,主要是将相邻两个样本取平均值
[T_i=frac{a_i+a_{i+1}}{2} ]3)调节权重,具体略。。。
4)引入正则化和剪枝的方法
-
C4.5算法的缺点
1)决策树算法容易过拟合
2)二叉树比C4.5生成的多叉树效率更高
3)C4.5如何应用于回归模型
4)对数运算和排序计算很耗时
CART算法
-
使用基尼系数代替信息增加比
基尼系数代表了模型的纯度,基尼系数越小,则不纯度越低,特征越好,这和信息增益比是相反的。基尼系数表示为如下:
[Gini(p)=sum_{k=1}^Kp_k(1-p_k)=1-sum_{k=1}^Kp_k^2 ]如果是二分类问题,则表示为:
[Gini(p)=2p(1-p) ]对于给定样本D,假设有K个类别,第k个类别的数量为(C_k),则样本的基尼系数表示为:
[Gini(D)=1-sum_{k=1}^K(frac{|C_k|}{|D|})^2 ]特别对于二分类问题,可以表示如下:
[Gini(D,A)=frac{|D_1|}{|D|}Gini(D_1)+frac{|D_2|}{|D|}Gini(D_2) ]二次计算比对数运算效率更高。基尼系数和熵的曲线非常接近。
-
CART将多分类改为多次二分类
计算以(T_i=frac{a_i+a_{i+1}}{2})作为分类点的基尼系数,选择基尼系数小的点,作为分类点。
-
CART算法流程
1)计算当前节点的各个特征对数据集D的基尼系数。
2)选择基尼系数最小的特征A,将剩余数据分为(D_1、D2)两部分
3)递归直至没有特征或满足误差要求
-
CART回归算法
算法输出离散值则为分类,输出连续值则为回归。
CART回归树的度量目标是,对于任意特征划分特征A,对于划分点s两边分成的数据集(D_1、D_2),使得求出的(D_1、D_2)的方差最小,表示为:
[underbracemin_{A,s}[underbracemin_{c_1}sum_{x_iin (A,s)}(y_i-c_1)^2+underbracemin_{c_2}sum_{x_iin D_2(A,s)}(y_i-c_2)^2] ]其中,(c_1)为(D_1)数据集样本输出均值,(c_2)为(D_2)数据集样本输出均值。
-
CART剪枝算法
剪枝,目的是增强算法的泛化能力,类似于线性回归的正则化。
决策树算法总结
决策树算法优点:
- 简单直观,生成的树很直观
- 不需要预处理,不需要归一化、处理缺失值等
- 预测代价是(O(log _2m)),m为样本数
- 可以处理离散值和连续值
- 可以处理多维输出分类
- 可解释性强
- 可以用剪枝提高泛化能力
- 对异常点容错性较好,健壮性高
决策树算法缺点:
- 容易过拟合
- 样本发生改变,树结构剧烈变动
- 最优决策树是一个NP难问题,通过启发式方法寻找决策树
- 比较复杂的关系很难用决策树学习
- 某些特征样本比例过大,决策树容易偏向这些特征
scikit-learn决策树算法使用
scikit-learn决策树算法使用CART算法,可以做分类和回归,分类的类是DecisionTreeClassifier,回归决策树对应的是DecisionTreeRegressor。
-
主要参数
1)criterion:默认是gini、即CART算法,也可是entropy即信息增益,回归时使用mse或者mae
2)splitter:特征选择的标准best或者random
3)max_features:
4)max_depth:决策树的最大深度
5)min_sample_split:限制子树继续划分的条件
6)其他
-
注意事项
1)当样本少而特征多时,很容易过拟合
2)在样本少而特征多时,推荐先做维度规约,如主成分分析PCA、特征选择Losso或者独立成分分析ICA等,维度下降后,决策树模型效果更好。
3)注意观察样本,分布是否均匀。
-
可视化决策树(略)
-
DecisionTreeClassifier实例
from sklearn.tree import DecisionTreeClassifier clf = DecisionTreeClassifier(max_depth=4) clf.fit(X,y) z=clf.predict(np.c_[xx.raverl(),yy.ravel()])