一、决策树的基本框架

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

二、基于信息增益的划分

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

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

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

四、基于基尼系数的划分

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

五、sklearn实践决策树

  • 接下来,python的sklearn包来实践上述几种决策树
from sklearn import tree
# 从sklearn中导入treefrom 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

特征重要性判断(一)----决策树相关推荐

  1. 机器学习 | 特征重要性判断

    聊聊feature_importances_ 1 背景 2 原理 2.1 文字版 2.2 公式版 2.3 面试遇到的问题 3 Python实现 3.1 解决mac下用jupyter绘图不显示中文的问题 ...

  2. 如何用Python计算特征重要性?

    特征重要性评分是一种为输入特征评分的手段,其依据是输入特征在预测目标变量过程中的有用程度. 特征重要性有许多类型和来源,尽管有许多比较常见,比如说统计相关性得分,线性模型的部分系数,基于决策树的特征重 ...

  3. gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客

    注意,下文的原始的gbdt是以sklearn中的gbdt的实现为例子来阐述的,因为gbdt的改进版本有很多,为了叙述方便,使用这个最为人所知的实现来描述. 你有自己用过别的模型然后调参之类的吗?能说一 ...

  4. python get score gain_机器学习的特征重要性究竟是怎么算的

    最近将主流模型的sklearn的代码撸了一遍,特别是计算特征重要性这块仔仔细细了解了一番:常用算法中xgboost.gbdt.randomforest.tree等都可以输出特征的重要性评分,下面着重记 ...

  5. [机器学习] 树模型(xgboost,lightgbm)特征重要性原理总结

    在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征 ...

  6. Spark 和 Python.sklearn:使用随机森林计算 feature_importance 特征重要性

    前言 在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,本文以随机森林为例介绍其原理与实现.[ 链接:机器学习的特征重要性究竟是 ...

  7. 随机森林计算特征重要性_随机森林中计算特征重要性的3种方法

    随机森林计算特征重要性 The feature importance describes which features are relevant. It can help with a better ...

  8. 随机森林,随机森林中进行特征重要性

    随机森林(RF)简介 只要了解决策树的算法,那么随机森林是相当容易理解的.随机森林的算法可以用如下几个步骤概括: 用有抽样放回的方法(bootstrap)从样本集中选取n个样本作为一个训练集 用抽样得 ...

  9. XGBoost输出特征重要性以及筛选特征

    XGBoost输出特征重要性以及筛选特征 1,梯度提升算法是如何计算特征重要性的? 使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分.一般来说,重要性分数,衡量了特征在 ...

最新文章

  1. Python基础14-迭代器与生成器
  2. 【转载】IntelliJ远程调试教程
  3. 090_块元素行内元素行内块元素空元素
  4. android 控件资源命名规范,Android 资源命名规范整理
  5. foreach、qAsConst用法总结
  6. SQL Server类型与C#类型对应关系
  7. d3 svg path添加文本_数据可视化——D3展现数据最炫丽的一面
  8. 串口服务器芯片方案商,串口服务器芯片
  9. mysql 非英文_非英文网站如何使用MySQL的字符集
  10. MBR、主引导扇区,主分区、扩展分区、逻辑分区,活动分区、引导分区、系统分区、启动分区的区别详解
  11. 安装卸载Windows服务
  12. Idea Java代码生成器使用及模板自定义
  13. 【C++】算法集锦(5):BFS算法
  14. OSPF报文与LSA
  15. C语言实现飞机售票系统
  16. vue判断有没有滚动条
  17. Apache之FCGI模式部署LAMP
  18. Head First HTML与CSS、XHTML (中文版).(Elisabeth Freeman) PDF扫描版​
  19. python有时候import不了当前的包
  20. 进不去系统rpc服务器不可用,WinXP系统RPC服务器不可用怎么办?

热门文章

  1. 锐捷睿易:扩大DHCP掩码导致AP不上线问题
  2. [小记] 微信小程序 - 人脸识别前端(一)初体验
  3. HDMI/type-c一线通EDP驱动板|应用高清便携显示器支持2K/1080P
  4. yyyy-mm-dd与yyyy-MM-dd的区别
  5. excel离散度图表怎么算_excel离散数据表格-Excel 离散程度分析图表如何做
  6. 利用长角牛软件ARP欺骗另外的主机
  7. 在线音乐播放项目——BY音乐
  8. Halium 9 尝鲜 -- 在小米平板4上的移植 (四)
  9. 购买30万住房也能落户武汉
  10. 刚刚过去的六一,OPPO Find新机让一些“大孩子”忍不住落泪!