决策树算法Python实现

  • Python决策树实现
    • 一、sklearn实现决策树分类
      • 1.1 导入sklean中的tree模块
      • 1.2 使用sklean的基本流程
      • 1.3 DecisionTreeClassifier()的参数解释
      • 1.4 剪枝操作
      • 1.5绘制决策树

Python决策树实现

一、sklearn实现决策树分类

1.1 导入sklean中的tree模块

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

1.2 使用sklean的基本流程

  1. 实例化模型对象
clf = tree.DecisionTreeClassifier()
  1. 通过模型接口训练模型
clf = clf.fit(X_train,y_train)
  1. 通过测试集对模型评分(0-1)
Test_score = clf,score(X_test,y_test)

1.3 DecisionTreeClassifier()的参数解释

clf = tree.DecisionTreeClassifier(criterion='entropy/gini',random_state = None,splitter='best/random')
  1. criterion

criterion这个参数正是用来决定不纯度的计算方法的。skleran提供了两种选择。
输入"entropy",使用信息熵。
输入“gini”,使用基尼系数。
对于高维数据或者噪音很多的数据,信息熵很容易过拟合,基尼系数在这种情况下效果往往会更好。

  1. random_state

random_state用来设置分支中的随机模式的参数,默认为None,在高维度时随机性会表示的更加明显。

  1. splitter

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

1.4 剪枝操作

  1. max_depth(预剪枝)

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

  1. min_samples_leaf

一个节点在分支后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分支就不会发生,或者,分支会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生。

  1. min_samples_split

一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分支,否则分支就不会发生。一般搭配max_depth使用,这个参数的数量设置的大小会引起过拟合,设置的太大会阻止模型学习数据。对于类别不多的分类问题,=1通常就是最佳选择。一般来说,建立从=5开始使用。如果叶节点中含有的样本量变化很大,建立输入浮点数作为样本量的百分比来使用。同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题中避免低方差,过拟合的叶子节点出现。

  1. max_features

限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,和max_depth相似

  1. min_impurity_decreases

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

  1. 确认最优的剪枝参数
    我们已经训练好的决策树模型clfclfclf,确定超参数的曲线来进行判断,超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标作为纵坐标的曲线,它是用来衡量不同超参数取值下模型的表现的线,我们的模型度量指标就是score。
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
# 训练样本
clf = clf.fit(X_trainer, Y_trainer)
result = clf.score(X_test,Y_test)
print("模型在测试集上进行评分:\n",result)
predict_y = clf.predict(X_test)
print("对测试集样本的预测结果:\n", predict_y)
predict_y1 = clf.predict_proba(X_test)
print("预测样本为某个标签的概率:\n", predict_y1)
# %%
test = []
for i in range(10):clf = DecisionTreeClassifier(max_depth=i+1,criterion="entropy",random_state=30,splitter="random")clf = clf.fit(X_trainer, Y_trainer)score = clf.score(X_test, Y_test)test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()

score曲线可视化结果:

1.5绘制决策树

  1. 环境配置

官网下载graphviz安装包进行本地安装;
链接: Graphviz官网
记住安装位置,比如C:\Program Files\Graphviz

配置环境变量:需要分别配置用户环境变量与系统环境变量
用户环境变量配置:找到PATH环境变量;新建输入C:\Program Files\Graphviz\bin(要与安装目录一致);点击确定。
系统环境变量:找到PATH环境变量;新建C:\Program Files\Graphviz\bin\dot.exe(要与安装目录一致);点击确定。

python环境配置:Win+R+cmd进入终端输入pip install graphviz即可安装

注意:环境配置结束后,可能需要重启编译软件生效

  1. 导入模块
from sklearn.datasets import load_iris
from sklearn import model_selection
import graphviz
from sklearn import tree
  1. 加载数据
# 加载鸢尾花数据集,X为数据集,y为标签
dataSet = load_iris()
X = dataSet.data
y = dataSet.target
# 特征名称
feature_names = dataSet.feature_names
# 类名
target_names = dataSet.target_names
  1. 创建决策树模型
# 划分数据集
X_trainer, X_test, Y_trainer, Y_test = model_selection.train_test_split(X, y, test_size=0.3)
# 创建决策树对象
clf = tree.DecisionTreeClassifier(criterion = 'entropy')# 训练样本
clf_tree = clf.fit(X_trainer, Y_trainer)
score = clf_tree.score(X_test,Y_test)
print("模型在测试集上进行评分:\n",score)
  1. 模型预测
predict_y = clf.predict(X_test)
print("对测试集样本的预测结果:\n", predict_y)
predict_y1 = clf.predict_proba(X_test)
print("预测样本为某个标签的概率:\n", predict_y1)
  1. 使用grapviz绘制决策树
clf_dot = tree.export_graphviz(clf_tree,out_file= None,feature_names= feature_names,class_names= target_names,filled= True,rounded= True)
graph = graphviz.Source(clf_dot,filename="iris_decisionTree",format="png")
graph.view()
print("\n特征重要程度为:")
info = [*zip(feature_names, clf.feature_importances_)]
for cell in info:print(cell)
  1. Iris数据集决策树分类结果
模型在测试集上进行评分:0.8888888888888888特征重要程度为:
('sepal length (cm)', 0.0)
('sepal width (cm)', 0.012044591855253375)
('petal length (cm)', 0.0)
('petal width (cm)', 0.9879554081447467)
  1. 根据测试评分进行max_depth调整
clf = tree.DecisionTreeClassifier(criterion = 'entropy',max_depth=3)

调整结果为:

当前学习记录到此结束,后续根据学习继续扩展更新。

决策树算法python实现相关推荐

  1. 机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法——python实现(包括树的可视化)

    机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法--python实现(包括树的可视化) 算法原理 1.信息熵 2.信息增益 我们所以要做的就是不断地从当前剩余的属性当中选取最佳属性对样本集进 ...

  2. 独家总结 | 决策树算法Python实现(附代码详解及注释)

    ↑ 点击上方[计算机视觉联盟]关注我们 上一篇已经介绍过决策树基本原理机器学习经典算法决策树原理详解(简单易懂) 纸上得来终觉浅,仅仅懂了原理还不够,要用代码实践才是王道,今天小编就附上小编自己在学习 ...

  3. CART决策树算法Python实现 (人工智能导论作业)

    文章目录 决策树的介绍 CART决策树算法简介 基尼指数 CART决策树生成算法及Python代码实现 决策树的介绍 决策树是以树的结构将决策或者分类过程展现出来,其目的是根据若干输入变量的值构造出一 ...

  4. 机器学习强基计划2-2:一文详解ID3、C4.5、CART决策树算法+ Python实现

    目录 0 写在前面 1 什么是决策树? 2 决策树算法框架 3 常见决策树算法 3.1 ID3算法 3.2 C4.5算法 3.3 CART算法 4 Python实现三种决策树算法 4.1 数据集 4. ...

  5. 决策树算法python源代码_决的解释|决的意思|汉典“决”字的基本解释

    详细字义 ◎ 决 决 jué 〈动〉 (1) (形声.从水,夬( guài)声.本义:疏通水道,使水流出去) (2) 同本义 [dig;dredge] 自河决瓠子后,二十余岁,岁因以数不登.--< ...

  6. 决策树算法python实现_决策树之python实现ID3算法(例子)

    1 #-*- coding: utf-8 -*- 2 from math importlog3 importoperator4 importpickle5 ''' 6 输入:原始数据集.子数据集(最后 ...

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

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

  8. Python机器学习(三)--决策树算法

    Python机器学习(三)--决策树算法 原创  2014年07月14日 13:57:55

  9. python决策树算法_决策树算法及python实现

    决策树算法是机器学习中的经典算法 1.决策树(decision tree) 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别. 假设小明去看 ...

最新文章

  1. linux查看硬件信息的命令(图文)
  2. vc新线程、类外控制EDIT控件
  3. git远程版本硬删除
  4. 埋点是什么意思_掌握数据生命周期:初识数据埋点
  5. 深度学习之卷积神经网络(10)CIFAR10与VGG13实战
  6. OpenStack创建win7实例遇到的问题(尚未解决,求帮助)
  7. python建模仿真 matlab_清华大学出版社-图书详情-《仿真建模与MATLAB实用教程》
  8. oracle mysql增量迁移_从自建Oracle迁移至RDS MySQL
  9. 如何来评测服务器性能,Web实战之:服务器性能的测量评价
  10. hdu 1004(排序+统计)
  11. linux or unix vi编辑器常用命令
  12. 知识图谱或成AI发展重点,投研数据整理耗时可从一周缩至一分钟
  13. 前端 报培训班还是自学
  14. python3 opencv 图象灰度化处理
  15. 用python批量下载modis数据的速度怎么样_批量下载MODIS数据
  16. 《易经》与二进制的发明
  17. Keil 提示error C231: ‘INT0‘: redefinition的原因及其解决方法
  18. 缺陷检测-金属表面缺陷检测
  19. java导出excel并实现下载功能
  20. 纯电动跑车中的贵族,全新保时捷Taycan T来袭

热门文章

  1. 让你的EXCEL表格每页都自动生成表头
  2. 清华大学计算机专业在职博士吧,清华大学计算机在职研究生的学位有没有受国家认可?...
  3. python 在线培训费用-天津Python培训学校费用
  4. 51单片机(清翔)-------LED部分
  5. 钢结构基本原理试题及答案
  6. 邮件发送中Virtual domains 和 Local domains 的概念
  7. 身份证正反面识别,身份证扫描识别,二代身份证 OCR 识别,OCR 极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。
  8. Python 读取图片文件转换格式
  9. tableau三轴合并_玩转Tableau | 实现并排柱形图和线图的复合视图
  10. virsh查询虚拟机列表