特征重要性判断(一)----决策树

一、决策树的基本框架

  • 决策树是一类基本的机器学习算法。它是基于树状结构来进行决策,从上到下依次进行判断,最终得到模型的决策。
  • 一般的,一棵决策树包含一个根节点、若干个内部节点和若干个叶子节点;叶子节点对应决策结果,其他每个节点则对应一个属性测试;每个节点包含的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本全集。从根节点到每个叶子节点的路径对应了一个判断测试序列。
  • 决策树的生成是一个递归过程。在决策树的算法中,如果出现下述三种情形之一,会终止继续划分,返回递归结果:1、当前节点包含的样本都是同一类别;2、当前节点能够划分的属性集合为空,或者节点中的样本在属性上的取值相同;3、当前节点不包含任何样本。
  • 决策算法的关键或不同在于:如何选择最优的划分属性。一般来说,随着决策树划分过程的不断进行,我们希望决策树的分支节点所包含的样本尽可能是同一类别。

二、基于信息增益的划分

  • “熵”(Entropy)是度量样本集合纯度(purity)最常用的一种指标。假定当前样本集合 D D D中第 k k k类样本所占的比例为 p k ( k = 1 , 2 , . . . . ∣ Y ∣ ) p_k(k = 1,2,....|Y|) pk(k=1,2,....Y),则样本集D的熵可以定义为: E n t r o p y ( D ) = − ∑ k = 1 ∣ Y ∣ p k l o g 2 p k Entropy(D) =- \displaystyle\sum_{k=1}^{|Y|}p_k{log_2}p_k Entropy(D)=k=1Ypklog2pk E n t r o p y ( D ) Entropy(D) Entropy(D)的值越小,表示D的纯度越高。
  • 假定离散属性 a a a V V V个可能的取值 a 1 , a 2 , . . . , a V {a^1,a^2,...,a^V} a1,a2,...,aV,若使用 a a a来对样本集 D D D进行划分,则会产生 V V V个分支节点,其中第 v v v个分支节点包含了 D D D中所有在属性 a a a上取值为 a v a^v av的样本,即为 D v D^v Dv。首先计算出 D v D^v Dv的熵 E n t r o p y ( D v ) Entropy(D^v) Entropy(Dv),再考虑到不同的分子节点所包含的样本数不同,给分支节点赋予权重 ∣ D v ∣ / ∣ D ∣ |D^v|/|D| Dv/D,也就是样本数越多的分支节点的影响越大,基于此,可以计算出用属性 a a a对样本集 D D D进行划分所获得的“信息增益”(information gain)。 G a i n ( D , a ) = E n t r o p y ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t r o p y ( D v ) Gain(D, a) = Entropy(D) - \displaystyle\sum_{v=1}^{V}\dfrac{|D^v|}{|D|}{Entropy(D^v)} Gain(D,a)=Entropy(D)v=1VDDvEntropy(Dv)
  • 一般而言,信息增益越大,则意味着使用属性 a a a来进行划分所获得的“纯度提升”越大。因此,我们可用信息增益来进行决策树的划分属性选择。ID3决策树学习算法就是以信息增益为准则来选择划分属性。

三、基于信息增益率的划分

  • 由于信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优划分属性。增益率定义为: G a i n R a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) GainRatio(D, a) = \dfrac{Gain(D,a)}{IV(a)} GainRatio(D,a)=IV(a)Gain(D,a)。其中 I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a) = - \displaystyle\sum_{v=1}^{V}\dfrac{|D^v|}{|D|}{log_2{\dfrac{|D^v|}{|D|}}} IV(a)=v=1VDDvlog2DDv
  • I V ( a ) IV(a) IV(a)称为属性 a a a的“固有值”(intrinsic value)。属性 a a a的可能取值数目越多(即 V V V越大),则 I V ( a ) IV(a) IV(a)的值通常会很大。
  • 增益率准则对可取数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用一个启发式的方法:先从候选划分属性中找出增益率高于平均水平的属性,再从中选择增益率最高的。

四、基于基尼系数的划分

  • CART决策树使用“基尼系数”(Gini index)来选择划分属性。
  • G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ′ = /   k p k p k ′ Gini(D) = \displaystyle\sum_{k=1}^{|y|}\displaystyle\sum_{{k'}{=}\llap{/\,}k}{p_k}{p_k'} Gini(D)=k=1yk=/kpkpk = 1 - ∑ k = 1 ∣ y ∣ p k 2 \displaystyle\sum_{k=1}^{|y|}{p_k^2} k=1ypk2
  • 直观来说 G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率。因此, G i n i ( D ) Gini(D) Gini(D)越小,则数据集D的纯度越高。
  • 属性 a a a的基尼指数定义为: G i n i I n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) GiniIndex(D,a) = \displaystyle\sum_{v=1}^{V}\dfrac{|D^v|}{|D|}{Gini(D^v)} GiniIndex(D,a)=v=1VDDvGini(Dv),在候选集合 A A A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性。

五、sklearn实践决策树

  • 接下来,python的sklearn包来实践上述几种决策树
from sklearn import tree
# 从sklearn中导入tree

from sklearn import datasets, model_selection
# 从sklearn中导入datasets用于加载数据集,这里我们使用iris数据集
# 从sklearn中导入model_selection用户划分测试集和训练集合

iris = datasets.load_iris()
# 总共150个样本,维度为4维
X = iris.data
Y = iris.target
# 划分训练集和测试集 8:2
x_train,x_test, y_train, y_text = model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)

# 创建一颗分类树,默认使用Gini
classification_tree = tree.DecisionTreeClassifier()
classification_tree.fit(x_train, y_train)
# 输出每个特征的重要性
print(classification_tree.feature_importances_)

# 产生预测
print(classification_tree.predict(x_test))

总结

  • 使用决策树也是可以做特征重要性分析的:按照划分决策树的过程中选择特征的先后顺序来判断特征的重要性。在sklearn中有一个feature_importances_属性可以输出特征的重要性。

参考资料

  • 周志华《机器学习》
  • http://www.siyuanblog.com/?p=821

你可能感兴趣的:(特征选择,机器学习,决策树,算法)