sklearn实现决策树

  • sklearn中的决策树
  • 一、DecisionTreeClassifier
    • 1、重要参数
      • 1.1 criterion
      • 1.2 random_state & splitter
      • 1.3剪枝参数
    • 2、建立一棵树

sklearn中的决策树

模块:sklearn.tree

tree.DecisionTreeClassifier 分类树
tree.DecisionTreeRegressor 回归树
tree.export_graphviz 将生成的决策树导出为DOT模式,画图专用
tree.ExtraTreeClassifier 高随机版本的分类树
tree.ExtraTreeRegressor 高随机版本的回归树

基本的建模流程:

  1. 实例化,建立评估模型对象
  2. 通过模型接口训练模型
  3. 通过模型接口提取需要的信息

以分类树为例:

from skleran import tree #导入需要的模块
clf = tree.DecisionTreeClassifier() #实例化
clf = clf.fit(X_train,y_train)#用训练集数据训练模型
result = clf,score(x_test,y_test)#导入测试集,从接口中调用需要的信息

当然在建模前,首先需要获取数据集,对数据进行可视化,数据处理等

一、DecisionTreeClassifier

1、重要参数

1.1 criterion

为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分支方法,对于分类树来说,衡量这个“最佳”的指标叫做“不纯度”。具体的决策树的理论知识:决策树。

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

  • 输入"entropy",使用信息熵。
  • 输入“gini”,使用基尼系数。

比起基尼系数,信息熵对不纯度更加敏感,对不纯度的惩罚最强。但在实际使用中,信息熵和基尼系数的效果基本相同。
同时,因为信息熵对不纯度更加敏感,所以信息熵作为指标时,决策树的生长会更加“精细”,因此对于高维数据或者噪音很多的数据,信息熵很容易过拟合,基尼系数在这种情况下效果往往会更好。

1.2 random_state & splitter

random_state用来设置分支中的随机模式的参数,默认为None,在高维度时随机性会表示的更加明显。
splitter也是用来控制决策树中的随机选项的,用两种输入值,输入“best”,决策树在分支时虽然随机,但是还是会优先选择更加重要的特征进行分支,输入"random",决策树会在分支时更加随机,树会因为含有更多的不必信息而更深更大,可能会导致过拟合问题。当你预测到你的模型可能会过拟合,用这两个参数可以帮助你降低树建成之后过拟合的可能性。当然,树一旦建成,我们依然是使用剪枝参数来防止过拟合。

clf = tree.DecisionTreeClassifier(criterion='entropy',random_state = 30,splitter='random')

1.3剪枝参数

在不加任何限制的情况下,一颗决策树会生长到衡量不纯度的指标最优,或者没有更多的特征为止。这样的决策树往往会过拟合。
为了让决策树有更好的泛化性,sklearn提供了不同的剪枝策略:

  • max_depth
    限制树的最大深度,超过设定深度的树枝全部剪掉

最广泛的剪枝参数,在高维度低样本量时非常有效。实际使用时,建议从=3开始尝试,看看拟合的效果再决定是否增加设定深度。

  • min_samples_leaf & min_samples_split
    min_samples_leaf 限定,一个节点在分支后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分支就不会发生,或者,分支会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生。
    一般搭配max_depth使用,在回归树中会有神奇的效果,可以让模型变得更加平滑,这个参数的数量设置的大小会引起过拟合,设置的太大会阻止模型学习数据。一般来说,建立从=5开始使用。如果叶节点中含有的样本量变化很大,建立输入浮点数作为样本量的百分比来使用。同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题中避免低方差,过拟合的叶子节点出现。对于类别不多的分类问题,=1通常就是最佳选择。

min_samples_split限定:一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分支,否则分支就不会发生。

  • max_features & min_impurity_decreases

一般配合max_depth使用,用作树的“精修“
max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,和max_depth异曲同工。

如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。

min_impurity_decrease 限制信息增益的大小,信息增益小于设定数值的分枝不会发生。

  • 确认最优的剪枝参数

那怎么具体来确定每个参数来填写什么值呢?这时候,我们就要使用确定超参数的曲线来进行判断了,继续使用我们已经训练好的决策树模型clf。
超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标作为纵坐标的曲线,它是用来衡量不同超参数取值下模型的表现的线,我们的模型度量指标就是score。

import matplotlib.pyplot as plt
test = []
for i in range(10):clf = tree.DecisionTreeClassifier(max_depth=i+1,criterion="entropy",random_state=30,splitter="random")clf = clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest)test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()

2、建立一棵树

1、导入需要的算法库和模块

from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split

2、探索数据

  1. 导入数据并查看数据类型
wine = load_wine()
wine.data
array([[1.423e+01, 1.710e+00, 2.430e+00, ..., 1.040e+00, 3.920e+00,1.065e+03],[1.320e+01, 1.780e+00, 2.140e+00, ..., 1.050e+00, 3.400e+00,1.050e+03],[1.316e+01, 2.360e+00, 2.670e+00, ..., 1.030e+00, 3.170e+00,1.185e+03],...,[1.327e+01, 4.280e+00, 2.260e+00, ..., 5.900e-01, 1.560e+00,8.350e+02],[1.317e+01, 2.590e+00, 2.370e+00, ..., 6.000e-01, 1.620e+00,8.400e+02],[1.413e+01, 4.100e+00, 2.740e+00, ..., 6.100e-01, 1.600e+00,5.600e+02]])
wine.target
# 可以看出三分类的 为0,1,2
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2])

为了更加直观的查看数据集,导入pandas库

pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
 0   1   2   3   4   5   6   7   8   9   10  11  12  0
0   14.23   1.71    2.43    15.6    127.0   2.80    3.06    0.28    2.29    5.64    1.04    3.92    1065.0  0
1   13.20   1.78    2.14    11.2    100.0   2.65    2.76    0.26    1.28    4.38    1.05    3.40    1050.0  0
2   13.16   2.36    2.67    18.6    101.0   2.80    3.24    0.30    2.81    5.68    1.03    3.17    1185.0  0
3   14.37   1.95    2.50    16.8    113.0   3.85    3.49    0.24    2.18    7.80    0.86    3.45    1480.0  0
4   13.24   2.59    2.87    21.0    118.0   2.80    2.69    0.39    1.82    4.32    1.04    2.93    735.0   0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
173 13.71   5.65    2.45    20.5    95.0    1.68    0.61    0.52    1.06    7.70    0.64    1.74    740.0   2
174 13.40   3.91    2.48    23.0    102.0   1.80    0.75    0.43    1.41    7.30    0.70    1.56    750.0   2
175 13.27   4.28    2.26    20.0    120.0   1.59    0.69    0.43    1.35    10.20   0.59    1.56    835.0   2
176 13.17   2.59    2.37    20.0    120.0   1.65    0.68    0.53    1.46    9.30    0.60    1.62    840.0   2
177 14.13   4.10    2.74    24.5    96.0    2.05    0.76    0.56    1.35    9.20    0.61    1.60    560.0   2

查看特征的名字

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')
  1. 分离数据,选取训练集和测试集

训练集比例0.7,测试集比例0.3

X_train,X_test,y_train,y_test = train_test_split(wine.data,wine.target,test_size=0.3)

3、建模

选取信息熵作为计算不纯度的方法

clf = tree.DecisionTreeClassifier(criterion = 'entropy')

训练模型

clf = clf.fit(X_train,y_train)

查看精准度

score = clf.score(X_test,y_test)
# 0.9259259259259259

4、画树

首先需要安装graphviz库,并要去官网下载应用,否则不会显示树。
并且在环境变量中添加应用的路径。

“我的电脑>属性>环境变量>path>新建>添加路径”

安装库,采用清华镜像

!pip install graphviz -i https://pypi.tuna.tsinghua.edu.cn/simple

上述操作都完成后,开始使用这个库进行画树

tree.export_graphviz中要提供一个决策树,特征值的名称,分类结果的名称等。

import graphviz
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','稀释葡萄酒','脯氨酸']
dot_data = tree.export_graphviz(clf,feature_names=feature_name,class_names=['琴酒','雪莉','贝尔摩德'],filled=True,rounded=True)# 圆角
graph = graphviz.Source(dot_data)


查看不同特征的重要性

[*zip(feature_name,clf.feature_importances_)]
[('酒精', 0.0),('苹果酸', 0.0),('灰', 0.036209954705410934),('灰的碱性', 0.0),('镁', 0.0),('总酚', 0.0),('类黄酮', 0.37359968306232505),('非黄烷类酚类', 0.0),('花青素', 0.0),('颜色强度', 0.45986979793750715),('色调', 0.034247526308054214),('稀释葡萄酒', 0.0),('脯氨酸', 0.09607303798670264)]

5、对测试集进行测试

score_test = clf.score(X_test,y_test)
score_test# 表现良好

以上就完成了用sklearn实现决策树的生成,大家可以考虑使用更多的参数来去训练模型,观察不同参数对的影响。
以上资料主要来源于菜菜的机器学习Sklearn课堂。

sklearn实现决策树相关推荐

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

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

  2. python中sklearn实现决策树及模型评估_sklearn实现决策树

    sklearn是一个功能非常强大的工具,可以用几行代码实现丰富的机器学习算法. 本文介绍使用sklearn实现决策树 决策树是经典的机器学习算法,很多复杂的机器学习算法都是由决策时演变而来.它是一种使 ...

  3. ID3决策树 Python实现 + sklearn库决策树模型的应用

    本文介绍机器学习中决策树算法的python实现过程 共介绍两类方法: (1)亲手实习Python ID3决策树经典算法 (2)利用sklearn库实现决策树算法 关于决策树的原理,指路:机器学习 第四 ...

  4. 【Python-ML】SKlearn库决策树(DecisionRegression) 使用

    # -*- coding: utf-8 -*- ''' Created on 2018年1月15日 @author: Jason.F @summary: Scikit-Learn库决策树算法 '''f ...

  5. python sklearn 绘制决策树模型的节点图

    绘制决策树的图片可以使用sklearn.tree.plot_tree这个方法 详情可以参考官方文档:https://scikit-learn.org/stable/modules/generated/ ...

  6. sklearn 决策树例子_使用 sklearn 构建决策树并使用 Graphviz 绘制树结构

    决策树最大的优点是我们可以查看最终的树结构,上一篇日志中,我们通过 matplotlib 展示了我们自己的树结构 但是 matplotlib 绘制树结构较为复杂,我们这里来了解一个更为易用的绘图工具  ...

  7. Python 机器学习 利用sklearn构建决策树的实现 2

    决策树 import numpy as npimport os%matplotlib inlineimport matplotlibimport matplotlib.pyplot as pltplt ...

  8. 机器学习之使用sklearn构造决策树模型

    一.任务基础 导入所需要的库 import matplotlib.pyplot as plt import pandas as pd%matplotlib inline 加载sklearn内置数据集 ...

  9. python中sklearn实现决策树及模型评估_Python sklearn决策树算法实践

    scikit-learn简称sklearn,支持包括分类.回归.降维和聚类四大机器学习算法.还包含了特征提取.数据处理和模型评估三大模块.sklearn是Scipy科学计算库的扩展,建立在NumPy和 ...

  10. sklearn实现决策树,随机森林,逻辑回归,KNN,贝叶斯,SVM,以葡萄干数据集为例

    数据集介绍 本次使用的数据集为葡萄干数据集,来源于UCI中: https://archive.ics.uci.edu/ml/datasets/Raisin+Dataset 介绍为: Images of ...

最新文章

  1. 人字拖藏SIM卡、戴微型蓝牙耳机!为考教师岗,多人作弊被抓
  2. 2021机器智能研究方向
  3. 开启Thread线程只执行一次
  4. 【开发管理类软件必备知识视频教程之二】登录窗体后台注意事项
  5. wxWidgets:wxCheckBox类用法
  6. 机器学习(十八)——关联规则挖掘
  7. [vue] 如果让你教一个2-3年经验前端经验的同事使用vue,你该怎么教?
  8. php 控制器 模板,php学习笔记(一)php模板与控制器
  9. 1.10.返回四舍五入后的值.round()
  10. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
  11. TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()
  12. 深度学习笔记(十一)--读李宏毅《1天搞懂深度学习》
  13. DAY1——sql 建表/插入数据
  14. MATLAB实现三边定位
  15. 【论文阅读】【二维目标检测】Revisiting Feature Alignment for One-stage Object Detection
  16. TypeScript 导出 Excel 表格(带斑马纹样式)
  17. 自然语言处理NLPIR-ICTCLAS 授权文件过期问题
  18. laravel8 邮件发送 以qq邮箱来举例
  19. 网页布局——盒子模型
  20. synchronized的偏向锁、轻量级锁和重量级锁

热门文章

  1. 【校内互侧】ZYF loves binary (dp)
  2. 关键词文章生成器-智能关键词文章生成器
  3. 批量将不同文件夹目录中的文件统一提取到同一个文件夹中
  4. 让Excel 只显示有限行和列
  5. 基于Python的指数基金量化投资 - 通过指数估值榜进行指数投资
  6. 31、当当图书榜单爬虫
  7. 自定义可折叠和展开的View
  8. python 文件夹_使用python进行文件夹对比
  9. 童饰品,发夹、发卡ASTM F2923标准CPSIA测试报告办理
  10. box-shadow 详解