sklearn中的决策树分类器

sklearn中的决策树分类器函数,格式如下: sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
random_state=None,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
class_weight=None, presort=False)
其重要参数介绍如下:

重要参数

criterion

这个参数是用来决定不纯度的计算方法。sklearn提供了两种选择:

  • 输入 “entropy”,使用信息熵(Entropy)
  • 输入 “gini”,使用基尼系数(Gini Impurity)

比起基尼系数,信息熵对不纯度更加敏感,对不纯度的惩罚最强。但是在实际使用中,信息熵和基尼系数的效果基本相同。信息熵的计算比基尼系数缓慢一些,因为基尼系数的计算不涉及对数。另外,因为信息熵对不纯度更加敏感,所以信息熵作为指标时,决策树的生长会更加 ”精细”,因此对于高纬数据或者噪声很多的数据,信息熵很容易易过拟合,基尼系数在这种情况下效果往往比较好。当模型拟合程度不足的时候,即当模型在训练集和测试集上都表现不太好的时候,使用信息熵。当然,这些不是绝对的。
综上,对criterion的选择方法总结如下:

  • criterion如何影响模型:确定不纯度的计算方法,帮忙找出最佳结点和最佳分支,不纯度越低,决策树对训练集的拟合越好;
  • criterion选项:不填默认为基尼系数,填写gini使用基尼系数,填写entropy使用信息增益;
  • criterion如何选取参数:通常就使用基尼系数。
     数据维度很大,噪音很大时使用基尼系数;
     维度低,数据比较清晰的时候,信息熵和基尼系数没区别;
     当决策树的拟合程度不够的时候,使用信息熵;
    两个都试试,当一个不好用时就换另外一个。

建立一颗树

#Sklearn中实现决策树
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
'''魔法函数%matplotlib inline:
模仿命令行来访问IPython的内置magic函数,
其中:%matplotlib可以使用指定的界面库显示图表,
inline表示将图表嵌入到Notebook中'''
%matplotlib inline
#导入tree算法库
from sklearn import tree
#导入load_wine数据集
from sklearn.datasets import load_wine
#导入train_test_split数据集切分模块
from sklearn.model_selection import train_test_split
#探索数据
wine = load_wine()
#wine.data属性数据体量
wine.data.shape

运行结果

(178, 13)
#wine.target标签数据体量
wine.target.shape

运行结果

(178,)
#如果wine是一张表,应该长这样:
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1).head()

运行结果

#查看数据集特征
wine.feature_names

运行结果

['alcohol','malic_acid','ash','alcalinity_of_ash','magnesium','total_phenols','flavanoids','nonflavanoid_phenols','proanthocyanins','color_intensity','hue','od280/od315_of_diluted_wines','proline']
#查看数据集标签
wine.target_names

运行结果

array(['class_0', 'class_1', 'class_2'], dtype='<U7')
#划分训练集和测试集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3,random_state=420)
Xtrain.shape

运行结果

(124, 13)
Xtest.shape

运行结果

(54, 13)
#建立模型
'''由于sklearn本身的数据集维度低,数据比较清晰,
有拟合程度不够的可能性,所以首先用信息熵尝试'''
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(Xtrain,Ytrain)
score = clf.score(Xtest, Ytest) #返回预测的准确度
score

运行结果

0.9629629629629629

用 Graphviz 画出一棵树

同时,我们可以利用 Graphviz 模块导出决策树模型,第一次使用 Graphviz 之前需要对其进行安装,若是使用从conda进行的Python包管理,则可直接在命令行界面中利用下述指令进行安装:
conda install python-graphviz

#用 Graphviz 画出一棵树
# 设置特征的中文名称
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
#python matplotlib中文显示参数设置
plt.rcParams['font.sans-serif']=['Simhei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#在CMD中执行命令:conda install python-graphviz
import graphviz
'''export_graphviz生成一个DOT格式的决策树:out_file:输出的dot文件的名字,默认为None表示不输出文件,可以是自定义名字如"tree.dot"feature_names:每个属性的名字class_names:每个因变量类别的名字label:是否显示不纯度信息的标签,默认为"all"表都显示,可以是"root"或"none"filled:是否给每个结点的主分类绘制不同的颜色,默认为Falserounded:默认为Ture,表示对每个结点的边框加圆角,并使用Helvetica字体更多参数说明查看(https://scikit-learn.org/stable/modules/generated/sklearn.tree.export_graphviz.html#sklearn.tree.export_graphviz)
'''
dot_data = tree.export_graphviz(clf,out_file = None,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True)
graph = graphviz.Source(dot_data)
graph

运行结果

#保存⽣生成的图形
graph.render("wine") #生成PDF文件,文件中无法显示中文
#探索决策树
#特征重要性
clf.feature_importances_

运行结果

array([0.2833539 , 0.        , 0.        , 0.03394088, 0.        ,0.        , 0.44822699, 0.        , 0.        , 0.        ,0.15678488, 0.        , 0.07769335])

feature_importances_计算过程:
sklearn.tree.DicisionTreeClassifier类中的feature_importances_属性返回的是特征的重要性,feature_importances_越高代表特征越重要。

feature importance的计算公式

Friedman在GBM[1]的论文中提出的方法:

特征xj在整个模型中的重要程度为:

其中,M是模型中树的数量。特征xjxj在单独一个树上的特征重要度为:

其中,L−1是树中非叶子节点数量,vt表示在内部节点t进行分裂时选择的特征,I^t2\hat{I}_t^2I^t2​是内部节点t分裂后平方损失的减少量。
J. H. Friedman. 2001. Greedy Function Approximation: A
Gradient Boosting Machine. Annals of Statistics 29(5):1189-
1232.
详见原文链接:https://blog.csdn.net/ictcxq/article/details/78754905

#特征重要性列表
[*zip(feature_name,clf.feature_importances_)]

运行结果

[('酒精', 0.2833539000570303),('苹果酸', 0.0),('灰', 0.0),('灰的碱性', 0.03394088285661319),('镁', 0.0),('总酚', 0.0),('类黄酮', 0.4482269945412355),('非黄烷类酚类', 0.0),('花青素', 0.0),('颜色强度', 0.0),('色调', 0.15678487534816657),('od280/od315稀释葡萄酒', 0.0),('脯氨酸', 0.07769334719695445)]

sklearn机器学习:决策树tree.DecisionTreeClassifier()相关推荐

  1. 机器学习第1集——分类决策树tree.DecisionTreeClassifier()

    一.首先,机器学习建模的基本流程分为3步 ①实例化(也就是建立模型对象) ②传入训练集和测试集,训练模型 ③通过模型接口提取需要的信息 那么分类树的基本代码是: from sklearn import ...

  2. java+决策树结构_机器学习——决策树,DecisionTreeClassifier参数详解,决策树可视化查看树结构...

    释放双眼,带上耳机,听听看~! 0.决策树 决策树是一种树型结构,其中每个内部节结点表示在一个属性上的测试,每一个分支代表一个测试输出,每个叶结点代表一种类别. 决策树学习是以实例为基础的归纳学习 决 ...

  3. 【1 - 决策树 - 原理部分】菜菜sklearn机器学习

    课程地址:<菜菜的机器学习sklearn课堂>_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现 第二期:随机森林在sklearn中的实现 ...

  4. 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集

    各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...

  5. 【机器学习】07. 决策树模型DecisionTreeClassifier(代码注释,思路推导)

    目录 资源下载 实现思路与核心函数解读 DecisionTreeClassifier分类决策树 tree.plot_tree决策树可视化 1. 对决策树最大深度的研究与可视化 绘图结果 分析 2. 对 ...

  6. 机器学习-决策树(decision tree)算法

    学习彭亮<深度学习基础介绍:机器学习>课程 [toc] 决策树概念 决策树是一种用于监督学习的层次模型,由此,局部区域通过少数几步递归分裂决定. 决策树是一个类似流程图的树结构:其中每个结 ...

  7. 【1 - 决策树 - 案例部分:泰坦尼克号幸存者预测】菜菜sklearn机器学习

    课程地址:<菜菜的机器学习sklearn课堂>_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现 第二期:随机森林在sklearn中的实现 ...

  8. 机器学习决策树_机器学习-决策树 Decision Tree

    咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sk ...

  9. 机器学习决策树的Sklearn的实现(隐形眼镜镜片决策树实现)

      上一篇博客我对决策树做了介绍,当然那是自己编写的算法去实现决策树的构造和图的绘制,在sklearn库中sklearn.tree模块提供了决策树模型供我们使用,所以对它来个简单介绍. 回顾:   决 ...

最新文章

  1. 智能车竞赛提问回复-2021-3-25
  2. [BZOJ]1503: [NOI2004]郁闷的出纳员
  3. element el-popover 使用v-if 控制显示/隐藏,当条件变化时,里面有部分内容无法显示
  4. Drainage Ditches - poj 1273(网络流模板)
  5. android中的Filter接口简介
  6. 山东理工大学ACM平台题答案关于C语言 1231 绝对值排序
  7. 电视助手 Android,无屏助手TV版|无屏助手电视版 V4.0.3 安卓版 下载_当下软件园_软件下载...
  8. 商城前端模板_新零售时代如何玩转微信商城
  9. 25个常用Matplotlib图的Python代码,干货收藏!
  10. 冠军团队访谈录|第三届全国人工智能大赛
  11. 我与忠和资本的未结之缘
  12. System32、SysWOW64与SysNative文件夹
  13. java程序模拟手机
  14. 多人协作共享画板——多人画板的bug及分析
  15. CrackMe160 学习笔记 之 044
  16. Dubious Document
  17. 英语46级报名考试系统
  18. 如何写好一份测试用例
  19. 爬虫眼中的“周庄”长什么样?
  20. 人机混合智能在博弈领域的发展

热门文章

  1. 博客论坛系统数据库之表的设计
  2. 菱形继承中构造函数调用问题
  3. 谁带火了化妆品小样经济?
  4. 【历史上的今天】4 月 30 日:信息论之父出生;万维网对所有人免费开放;图灵奖算法先驱诞生
  5. 下载yum源的安装包
  6. C#深入学习--委托
  7. 计算机视觉(特征检测)- DoG 和 SIFT 进行特征提取描述
  8. 我与Java的故事以及0基础Java自学之路(2022最新版)
  9. huffman编码压缩c语言,用Huffman编码对文件进行压缩的C语言实现
  10. 网赚无货源模式,无货源真的可以赚钱么?