Python 决策树

1 声明

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。

2 决策树简介

相关概念见下:

决策树是一个无参数的有监督的分类和回归算法。该算法通过IF-THEN-ELSE决策规则(比如:如果绩效考核是A则发奖金1000K,是B则发500)的方式来从数据中学习模型。这种决策的结构就像一个倒置树(第一个决策规则在最顶端,其它的节点随之展开)。在决策树里,每个决策规则都发生在一个决策节点上,该规则创建指向新节点的分支。一个在末端的没有决策规则的分支称为叶子节点。树越深决策树规则越复杂,模型拟合的越好。决策树构建时采用树形结构。树有两个或者多个分支,这里常见的是二分支。它能处理分类变量和连续型变量,适合处理非线性的关系。

决策树之所以较为流行是因为其较好的解释性,它的模型可以通过树状图形的方式直观的展示出来。

决策树示例(详细见韩家炜著《数据挖数据挖掘:概念与技术》内决策树部分介绍):

决策树模型总是试图一个在节点上找到产生最大的纯度的决策规则。划分纯度的指标有多,Scikit Learn里默认的是Gini。

这里 是节点t的杂质度(不纯净度,即分裂标准), 是节点t里类别是C的占比。这种寻找决策规则(该规则会产生分裂以增加不纯度)的过程会递归式重复执行,直到所有叶节点都是纯的(即节点划到某个类别)。

决策树回归

决策树回归与决策树分类类似,只不过它不是通过降低Gini不纯度或者熵,而是通过降低的残差平方和来度量。

这里 是目标变量的真实值, 是目标变量的预测值。

回归,就是根据特征向量来决定对应的输出值。回归树就是将特征空间划分成若干单元,每一个划分单元有一个特定的输出。因为每个结点都是“是”和“否”的判断,所以划分的边界是平行于坐标轴的。

那么得到的划分区域见下:

3 决策树代码与注释示例

def irisdt():from sklearn import treefrom sklearn import model_selectionfrom sklearn.datasets import load_iris#from sklearn.grid_search import GridSearchCVfrom sklearn.model_selection import GridSearchCVfrom sklearn.metrics import classification_reportimport matplotlib.pyplot as pltiris = load_iris()x = iris.datay = iris.targetX_train, X_test, y_train, y_test = model_selection \.train_test_split(x, y, test_size=0.2,random_state=123456)parameters = {'criterion': ['gini', 'entropy'],'max_depth': range(1,30),#[1, 2, 3, 4, 5, 6, 7, 8,9,10],'max_leaf_nodes': [2,3,4, 5, 6, 7, 8, 9]  #最大叶节点数}dtree = tree.DecisionTreeClassifier()grid_search = GridSearchCV(dtree, parameters, scoring='accuracy', cv=5)grid_search.fit(x, y)print(grid_search.best_estimator_)  # 查看grid_search方法print(grid_search.best_score_) # 正确率print(grid_search.best_params_)  # 最佳 参数组合dtree = tree.DecisionTreeClassifier(criterion='gini', max_depth=3)dtree.fit(X_train, y_train)pred = dtree.predict(X_test)print(pred)print(y_test)print(classification_report(y_test, pred,target_names=['setosa', 'versicolor', 'virginica']))print(dtree.predict([[6.9,3.3,5.6,2.4]]))#预测属于哪个分类print(dtree.predict_proba([[6.9,3.3,5.6,2.4]]))  # 预测所属分类的概率值##print(iris.target)print(list(iris.target_names)) #输出目标值的元素名称#print(grid_search.estimator.score(y_test, pred))def irisdecisontree():from sklearn import datasetsiris = datasets.load_iris()X_train = iris.data[:,[0,1]][0:150]y_train = iris.target#print(iris.feature_names)#print(type(X_train))##print(X_train[:,[0,1]][0:150])clf = tree.DecisionTreeClassifier(max_depth=3,criterion='entropy')clf = clf.fit(X_train, y_train)with open("../output/iristree.dot",'w') as f:f = export_graphviz(clf,feature_names=['sepallength','sepalwidth'],out_file=f)import osos.system('dot -Tpdf "../output/iristree.dot" -o "../output/iristree.pdf"')
if __name__ == '__main__':irisdt()

4 总结

Python 决策树相关推荐

  1. 从零开始学python人工智能课程_从零开始学人工智能(12)--Python · 决策树(零)· 简介...

    原标题:从零开始学人工智能(12)--Python · 决策树(零)· 简介 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直 ...

  2. Python决策树鸢尾花类别分类

    Python决策树鸢尾花类别分类 引入使用到的模块 #决策树 鸢尾花类别 import sklearn.datasets as dSets import pandas as pd; import ma ...

  3. python决策树 多分类_Python中的决策树分类:您需要了解的一切

    python决策树 多分类 什么是决策树? (What is Decision Tree?) A decision tree is a decision support tool that uses ...

  4. python决策树代码实现

    python决策树代码实现 实现一个简单的决策树,可以同时处理属性值是连续和离散的情况. 使用sklearn里面的鸢尾花等数据集验证,正确率还不错(90%+) Github地址:https://git ...

  5. python决策树剪枝_决策树剪枝算法的python实现方法详解

    python 决策树怎样修剪枝 剪枝是决策树停止分支的方法之一,剪枝有分预先剪枝和后剪枝两种.预先剪枝是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生"爱已不在,却还 ...

  6. 数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户...

    原文链接:http://tecdat.cn/?p=23518 项目背景:银行的主要盈利业务靠的是贷款,这些客户中的大多数是存款大小不等的责任客户(存款人).银行拥有不断增长的客户(点击文末" ...

  7. 利用python决策树分析iris数据及树状图绘制

    利用python决策树分析iris数据及树状图绘制 数据说明 数据划分 模型训练及评估 模型训练代码 模型大致评估 树状图绘制 Graphviz安装配置及入门 代码汇总 基地部门公众号 数据说明 数据 ...

  8. python决策树怎么选择_【机器学习+python(8)】分类决策树的介绍与实现

    之前我们介绍过用逻辑回归根据鸢尾花萼片.花瓣的长度和宽度进行鸢尾花类别的判定:也通过朴素贝叶斯模型分享了如何根据男生专业和身高两大属性,判断其是否有女朋友.而本期我们将介绍另外一种有监督的机器学习分类 ...

  9. python决策树可视化_「决策树」| Part3—Python实现之可视化

    文章首发于微信公众号:AlgorithmDeveloper,专注机器学习与Python,编程与算法,还有生活. 1.前言 「决策树」| Part2-Python实现之构建决策树中我们已经可以基于给定数 ...

  10. python 决策树 math库 c45算法

    2019独角兽企业重金招聘Python工程师标准>>> 每周一搏,提升自我. 这段时间对python的应用,对python的理解越来越深.摸索中修改网上实例代码,有了自己的理解. c ...

最新文章

  1. 移动端图片上传旋转、压缩的解决方案
  2. 干货二:微信SDK-分享初探-更新中
  3. why my SAP UI5 filter by titleID does not work
  4. brew 镜像_Docker牛刀小试:安装及常用的镜像命令和容器命令
  5. Java EE 8,当前状态是什么:自2015年底以来已完成工作的案例研究
  6. omv检查硬盘坏道_坏道检测与修复
  7. app canvas渲染后图片黑色_H5 基于 canvas 实现电子签名并生成PDF文档
  8. java 中 的 =,java 中的 |=、=、^=
  9. Html前端基础(select下拉选标签、table表格标签)
  10. 把一个数插入c语言,[求助] 把一个数插入一个已经从小到大排列好的数列中
  11. 关于计算机应用技术的创业策划书,创新创业项目计划书(双创博士)
  12. ckplayer超酷网页播放器
  13. 导出的CSV数据中含有身份证并在Excel正确显示方法
  14. 写作技巧~100段作文排比句(61-80段),考试一定用得上,赶紧收藏!
  15. 手工制作使用WinXShell的PE(不是直接生成) #1
  16. nginx lua读redis
  17. 一文分析 快应用技术架构及业务前景
  18. [Android开发] Xposed 插件开发之三: 编写广告去除插件
  19. Google 不想与甲骨文争了,要放弃 Java APIs
  20. Calling Extraterrestrial Intelligence Again

热门文章

  1. 常说的七侠五义到底是什么?
  2. 163邮箱登录界面在哪里?如何登陆163邮箱呢?邮箱163格式怎么写
  3. 什么是广域网WAN?学WAN,看这篇文章就够了
  4. 《全基因组测序WGS数据分析——1.DNA测序技术》
  5. Wellcome Sanger研究所选择Arima Genomics作为HiC技术合作伙伴; 公司宣布针对高覆盖HiC的抢先体验活动
  6. 苹果开发人员账号注冊流程
  7. Prolog语言介绍(一)
  8. 怎么看计算机的a卡右键找不到,右键没有显卡,右键没有amd显卡选项
  9. 电脑网络——QQ、微信可以登录,浏览器打不开的解决方法
  10. Es的mapping映射