决策树留一法python代码_ScikitLearn决策树算法类库使用小结

1

scikit-learn决策树算法类库介绍

scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归。分类决策树的类对应的是DecisionTreeClassifier,而回归决策树的类对应的是DecisionTreeRegressor。两者的参数定义几乎完全相同,但是意义不全相同。下面就对DecisionTreeClassifier和DecisionTreeRegressor的重要参数做一个总结,重点比较两者参数使用的不同点和调参的注意点。

2

DecisionTreeClassifier和DecisionTreeClassifier 重要参数调参注意点

为了便于比较,这里我们用表格的形式对DecisionTreeClassifier和DecisionTreeRegressor重要参数要点做一个比较。

32f15a7a0b059f98e3bfc7de4c28a588.png

除了这些参数要注意以外,其他在调参时的注意点有:

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")
19c3a795f67d8e19c33352d1992a36af.png

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,这时,可以在代码里面加入这一行:

465eb01aa141dd681c612145b510be25.png

注意后面的路径是你自己的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的自带数据,有决策树拟合,得到模型:

e2fbe3866021fd779ab2a4b0df81eae6.png

现在可以将模型存入dot文件iris.dot。

2fcf9a0e26313f25e314e2db9ee82131.png

这时候我们有3种可视化方法,第一种是用graphviz的dot命令生成决策树的可视化文件,敲完这个命令后当前目录就可以看到决策树的可视化文件iris.pdf.打开可以看到决策树的模型图。

caaf96fb39b7ec56fa47fec040af2bdd.png

第二种方法是用pydotplus生成iris.pdf。这样就不用再命令行去专门生成pdf文件了。

53704d8134223c71a3397b29f9069032.png

第三种办法是个人比较推荐的做法,因为这样可以直接把图产生在ipython的notebook。代码如下:

fea4713cea6f8c2a7c1e777823c93ffc.png

在ipython的notebook生成的图如下: 

19c3a795f67d8e19c33352d1992a36af.png

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()
0b1742aefb260c3e653eff853dc00b3f.png
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()) 
19c3a795f67d8e19c33352d1992a36af.png

ae0d46800030849f19975142f9377f6a.gif

点击下方图片即可阅读

64efae59e827ac8f363c41c54ec54aad.png

那么如何了解线性回归的原理和算法呢?

ec22820f4055261ee007d366e36fe2b2.png

分类算法评估中的“它们”有什么用处?

37f7c26e008cf9a2914fc244346671b9.png

学好Scikit-Learn,

于是你默默地推了一下酷酷的墨镜【上篇】

37f7c26e008cf9a2914fc244346671b9.png

学会PyTorch,你就是这条街上最靓的仔~

ffbaa4464aad22b8c054322c79abf213.png

如果你也有想分享的干货,可以登录天池实验室(notebook),包括赛题的理解、数据分析及可视化、算法模型的分析以及一些核心的思路等内容

小天会根据你分享内容的数量以及程度,给予丰富的神秘天池大礼以及粮票奖励。分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号: yiwen1991)

b842ecb85dbedfad64d69f75fe4aa8bd.png

天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!

57bab000184a5caafe4a5c048297fac8.gif fe2d6ac7f816c91be094f00e4a6d1b3e.png

?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值