美文网首页
机器学习-决策树原理 Python

机器学习-决策树原理 Python

作者: 数据人阿多 | 来源:发表于2019-08-11 21:38 被阅读0次

由于最近项目的需要,学习了分类算法--决策树,从逐步了解决策树,然后到手动在Excel里面模拟计算相关算法,最后到对scikit-learn库的运用,算是从理论到实践走了一遍,也发现scikit-learn库并不是完全对理论的实现,只是将部分算法实现出来,现总结分享出来供大家参考。


决策树大概的样子

决策树.png

决策树三个算法介绍

如果说对决策树比较熟悉的话,发展到现在主要有三个决策树算法,ID3、C4.5、CART这三个算法,其中ID3是利用信息增益,C4.5利用信息增益率,CATR利用基尼系数,C4.5是对ID3缺点的一个改进,但改进后还是有缺点,现在目前运用较多的是基尼系数,也就是CART这个算法,scikit-learn库里面的决策树默认的就是运用基尼系数来进行分枝。


三个算法.png

ID3--信息增益

信息增益也就是信息熵的差值,也就是通过一个节点分枝使信息熵减少了多少,信息熵是由香农提出的,相信大家都听说过这个大人物,那什么是信息熵呢,看了很多参考书,感觉解释的最通俗易懂的是吴军的《数学之美》里面对这个概念的阐述。


信息熵.png

信息熵的主要公式:


image.png

信息增益是在条件熵下计算而来,类似于条件概率的意思


信息增益.png
ID3算法过程:
ID3.png

C4.5--信息增益率

说白了就是相对于信息增益多了一个比值,由于信息增益更倾向于分类比较多的属性,这个大家可能比较懵,详细解释一下,比如说一个变量(一个特征)A,是个分类变量,它下面包含A1,A2,A3三个不同的属性(水平),而另外一个变量B下面包含B1,B2,B3,......,B10共10个不同的属性,那么计算出来的信息增益,根据历史经验来说,变量B信息增益比较大,一般首先选取B来作为节点进行分枝。
而C4.5就是克服这个缺点应运而生,就是再用计算出来的这个信息增益除以这个变量本来的信息熵

信息增益率主要公式:


信息增益率.png

ID3与C4.5结合使用效果相对比较好

两者结合.png

scikit-learn库对信息增益的实现大概框架

scikit-learn库里面的决策树,没有具体说是信息增益,还是信息增益率,这个有兴趣可以仔细研究一下https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier

from sklearn import tree    # 导入决策树库

# 训练分类模型
model_tree = tree.DecisionTreeClassifier(criterion='entropy',random_state=0)  
# 建立决策树模型对象,需要指定criterion为entropy

model_tree.fit(X, y)   #对数据进行训练

feature_importance = model_tree.feature_importances_    # 指标重要性

模型效果可视化需要用到其他的库及软件,这里不再详述,可参考其他内容,主要点就是中文的显示问题,中文是可以显示的,相关文档也有介绍,大家也可以仔细研究

CART (Classification And Regression Tree) 分类回归树

CART.png
解释一下“纯”:在我的印象里这个字是形容女生的,怎么跑到这里来呢,呵呵,这里的纯是说,经过一个节点的分枝后,目标变量y里面都是一个类别的,就说是纯的,不纯,就是经过一个节点的分枝后,目标变量y里面还是比较乱,任然不能确定目标属于哪个类别

scikit-learn库对基尼系数的实现大概框架

from sklearn import tree    # 导入决策树库

# 训练分类模型
model_tree = tree.DecisionTreeClassifier(criterion='gini',random_state=0)  
# 建立决策树模型对象,需要指定criterion为gini,也可以不指定,默认的就是gini

model_tree.fit(X, y)   #对数据进行训练

feature_importance = model_tree.feature_importances_    # 指标重要性

模型可视化中文显示问题

需要把里面的字体替换为微软雅黑即可

names_list=['中文1','中文2','中文3',...]

tree.export_graphviz(model_tree,out_file=dot_data,feature_names=names_list, filled=True,rounded=True,special_characters=True)

graph4 = graphviz.Source(dot_data.getvalue().replace('helvetica','"Microsoft YaHei"'))
graph4.render('决策树-5组均分-2变量') #生成PDF文件

参考

1.https://www.cnblogs.com/muzixi/p/6566803.html
2.https://www.jianshu.com/p/35129fae39f6

相关文章

  • [机器学习]决策树

    决策树 @(技术博客)[机器学习, 决策树, python] 学习决策树首先要搞清楚决策树是什么(what),在弄...

  • 机器学习之决策树(Decision Tree)及其Python

    机器学习之决策树(Decision Tree)及其Python代码实现

  • 机器学习-决策树原理 Python

    由于最近项目的需要,学习了分类算法--决策树,从逐步了解决策树,然后到手动在Excel里面模拟计算相关算法,最后到...

  • Python实现决策树的构建

    Python机器学习-决策树的构建 决策树(ID3算法) 开发环境为anaconda中的spyder,所有库已经默...

  • 2018文章集合

    2018年公众号文章集合,过年在家系统学习下。 机器学习实战 该系列讲解了经典机器学习算法的原理(KNN,决策树,...

  • 3.1.1.2 决策树

    决策树 原理 《机器学习》周志华 4.1 基本流程 决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强...

  • 决策树

    可参考:1、【机器学习】决策树(上)——从原理到算法实现https://blog.csdn.net/HerosOf...

  • Python学习——决策树中纯度算法的实现

    决策树 决策树算法是机器学习中的一个基础算法,该算法有着诸多的优点。在python中实现决策树,现阶段都已经集成中...

  • 决策树

    转自微信公众号:机器学习算法与Python学习 决策树 决策树很重要的一点就是选择一个属性进行分支,因此要注意一下...

  • 【机器学习】多项式回归python实现

    【机器学习】多项式回归原理介绍 【机器学习】多项式回归python实现 【机器学习】多项式回归sklearn实现 ...

网友评论

      本文标题:机器学习-决策树原理 Python

      本文链接:https://www.haomeiwen.com/subject/sivsjctx.html