决策树留一法python代码_ScikitLearn决策树算法类库使用小结
1
scikit-learn决策树算法类库介绍
scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归。分类决策树的类对应的是DecisionTreeClassifier,而回归决策树的类对应的是DecisionTreeRegressor。两者的参数定义几乎完全相同,但是意义不全相同。下面就对DecisionTreeClassifier和DecisionTreeRegressor的重要参数做一个总结,重点比较两者参数使用的不同点和调参的注意点。
2
DecisionTreeClassifier和DecisionTreeClassifier 重要参数调参注意点
为了便于比较,这里我们用表格的形式对DecisionTreeClassifier和DecisionTreeRegressor重要参数要点做一个比较。
除了这些参数要注意以外,其他在调参时的注意点有:
1)当样本少数量但是样本特征非常多的时候,决策树很容易过拟合,一般来说,样本数比特征数多一些会比较容易建立健壮的模型
2)如果样本数量少但是样本特征非常多,在拟合决策树模型前,推荐先做维度规约,比如主成分分析(PCA),特征选择(Losso)或者独立成分分析(ICA)。这样特征的维度会大大减小。再来拟合决策树模型效果会好。
3)推荐多用决策树的可视化(下节会讲),同时先限制决策树的深度(比如最多3层),这样可以先观察下生成的决策树里数据的初步拟合情况,然后再决定是否要增加深度。
4)在训练模型先,注意观察样本的类别情况(主要指分类树),如果类别分布非常不均匀,就要考虑用class_weight来限制模型过于偏向样本多的类别。
5)决策树的数组使用的是numpy的float32类型,如果训练数据不是这样的格式,算法会先做copy再运行。
6)如果输入的样本矩阵是稀疏的,推荐在拟合前调用csc_matrix稀疏化,在预测前调用csr_matrix稀疏化。
3
scikit-learn决策树结果的可视化
决策树可视化化可以方便我们直观的观察模型,以及发现模型中的问题。这里介绍下scikit-learn中决策树的可视化方法。
#完整代码import matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport pandas as pdfrom sklearn.datasets import load_irisfrom sklearn import treeiris = load_iris()clf = tree.DecisionTreeClassifier()clf = clf.fit(iris.data, iris.target)with open("iris.dot", 'w') as f: f = tree.export_graphviz(clf, out_file=f) from IPython.display import Image import pydotplusdot_datadot_dat = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data)Image(graph.create_png())dot_data = tree.export_graphviz(clf, out_file=None)graph = pydotplus.graph_from_dot_data(dot_data) graph.write_pdf("iris.pdf")
1、决策树可视化环境搭建
scikit-learn中决策树的可视化一般需要安装graphviz。主要包括graphviz的安装和python的graphviz插件的安装。
第一步是安装graphviz。下载地址在:http://www.graphviz.org/。如果你是linux,可以用apt-get或者yum的方法安装。如果是windows,就在官网下载msi文件安装。无论是linux还是windows,装完后都要设置环境变量,将graphviz的bin目录加到PATH,比如我是windows,将C:/Program Files (x86)/Graphviz2.38/bin/加入了PATH
第二步是安装python插件graphviz: pip install graphviz
第三步是安装python插件pydotplus。这个没有什么好说的: pip install pydotplus
这样环境就搭好了,有时候python会很笨,仍然找不到graphviz,这时,可以在代码里面加入这一行:
注意后面的路径是你自己的graphviz的bin目录。
2、决策树可视化的三种方法
这里我们有一个例子讲解决策树可视化。
首先载入类库:
from sklearn.datasets import load_irisfrom sklearn import treeimport sysimport os os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
接着载入sciki-learn的自带数据,有决策树拟合,得到模型:
现在可以将模型存入dot文件iris.dot。
这时候我们有3种可视化方法,第一种是用graphviz的dot命令生成决策树的可视化文件,敲完这个命令后当前目录就可以看到决策树的可视化文件iris.pdf.打开可以看到决策树的模型图。
第二种方法是用pydotplus生成iris.pdf。这样就不用再命令行去专门生成pdf文件了。
第三种办法是个人比较推荐的做法,因为这样可以直接把图产生在ipython的notebook。代码如下:
在ipython的notebook生成的图如下:
4
DecisionTreeClassifier实例
这里给一个限制决策树层数为4的DecisionTreeClassifier例子。
from itertools import productimport numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsfrom sklearn.tree import DecisionTreeClassifier# 仍然使用自带的iris数据iris = datasets.load_iris()X = iris.data[:, [0, 2]]y = iris.target# 训练模型,限制树的最大深度4clf = DecisionTreeClassifier(max_depth=4)#拟合模型clf.fit(X, y)# 画图x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.4)plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)plt.show()
from IPython.display import Image from sklearn import treeimport pydotplus dot_data = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png())
点击下方图片即可阅读
那么如何了解线性回归的原理和算法呢?
分类算法评估中的“它们”有什么用处?
学好Scikit-Learn,
于是你默默地推了一下酷酷的墨镜【上篇】
学会PyTorch,你就是这条街上最靓的仔~
如果你也有想分享的干货,可以登录天池实验室(notebook),包括赛题的理解、数据分析及可视化、算法模型的分析以及一些核心的思路等内容。
小天会根据你分享内容的数量以及程度,给予丰富的神秘天池大礼以及粮票奖励。分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号: yiwen1991)
天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!
?
决策树留一法python代码_ScikitLearn决策树算法类库使用小结相关推荐
- 决策树留一法python代码_机器学习模型2 决策树-基于Python sklearn的实现
1.模型原理 (一)原理 1.原理:引入信息熵(不确定程度)的概念,通过计算各属性下的信息增益程度(信息增益越大,则意味着使用该属性来进行划分所获得的"纯度提升"越大),增益程度最 ...
- 决策树留一法python代码_从实例中归纳决策树_人工智能一
从实例中归纳决策树_人工智能一 18.3.3 从实例中归纳决策树 布尔决策树的一个实例是由一个输入属性向量X以及一个唯一的布尔输出值y组成的.一个实例集合(X1,y1),-,(X12,y12)如图18 ...
- scikit-learn决策树算法类库使用小结及可视化方法
2019独角兽企业重金招聘Python工程师标准>>> 1. scikit-learn决策树算法类库介绍 scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法 ...
- scikit-learn决策树算法类库使用小结
之前对决策树的算法原理做了总结,包括决策树算法原理(上)和决策树算法原理(下).今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的 ...
- 在西瓜数据集上用Python实现ID3决策树算法完整代码
在西瓜数据集上用Python实现ID3决策树算法完整代码 文章目录 1.决策树算法代码ID3.py 2.可视化决策树代码visual_decision_tree.py 3.贴几张运行结果图 1.生成的 ...
- Python中应用决策树算法预测客户等级
机器学习越来越多地在企业应用,本文跟大家分享一个采用python,应用决策树算法对跨国食品超市顾客等级进行预测的具体案例.如果想先行了解决策树算法原理,可以阅读文章决策树-ID3算法和C4.5算法. ...
- How To Implement The Decision Tree Algorithm From Scratch In Python (从零开始在Python中实现决策树算法)
How To Implement The Decision Tree Algorithm From Scratch In Python 原文作者:Jason Brownlee 原文地址:https:/ ...
- 机器学习决策树DecisionTree以及python代码实现
机器学习决策树DecisionTree以及python代码实现 1.基本算法原理 2.选择最优特征进行划分 2.1信息增益 2.2信息增益率 2.3基尼系数 4.连续值以及缺失值的处理 4.1连续值的 ...
- 决策树剪枝python实现_决策树剪枝问题python代码
决策树在生长过程中有可能长得过于茂盛,对训练集学习的很好,但对新的数据集的预测效果不好,即过拟合,此时生成的模型泛化能力较差.因此,我们需要对决策树进行剪枝,使得生成的模型具有较强的泛化能力. 为了检 ...
最新文章
- 华为任正非谈退休:思维跟不上的时候退,目前是才思泉涌的状态
- 动态切换站点样式(换皮肤)
- 工业机器人什么情况下会出现奇点_【怎么解释机器人奇点造成的结果?】-工业-有米下载-6miu.com...
- 20181213_任务(3D奖品设计+30天单词练习)
- 自定义滚动条CSS样式
- [探索 .NET 6]02 比较 WebApplicationBuilder 和 Host
- esmini接入外部ego车控制
- mysql主从同步搭建和故障排除
- bootstrap+masonry.js写瀑布流
- 计算机组装策划案,产品策划书格式
- android auto note 8,三星Galaxy Note 8.0支持flash吗
- 编程之美 3.1 字符串移位包含问 复杂度(O(N*K)
- mysql补0操作有什么意义?
- 啥他妈的是 Nginx?
- 官宣 .NET RC 2
- 英文名称:DSPE-PEG10-Mal的试剂分子式是C68H127N2O21P
- 心电图心电轴怎么计算_心电轴的测量方法
- 计算机网络——第三章 数据链路层——课后习题答案
- 数学考研基础---线代笔记(行列式)
- iOS闪退问题,避免闪退看我就足够了, try catch等方法
热门文章
- Visual Studio Code 1.49 发布
- 在ASP.NET Identity 2.0中使用声明(Claims)实现用户组
- 微软在 Build 2020 上“展示”新版 Edge for Linux
- 开源的方舟编译器将进入深圳大学课堂
- LINQ to CSV,一种类型安全,动态的高性能方法
- vue用html做报表,Vue配置生成无限分割的表格,可快速实现任意复杂报表
- 为什么没有看到webcontent_王者荣耀之战坦路玩家心理:队友为什么不支援!我想要和射手换线...
- 关于thymeleaf静态资源找不到的问题
- linux内核进程抢占,Re: Linux中进程能否被抢占
- 在拦截器里放入参数 controller_程序员云旅游:10分钟带你走完SpringMVC里一次HTTP请求处理之路...