数据挖掘作业,要实现决策树,现记录学习过程

win10系统,Python 3.7.0

构建一个决策树,在鸢尾花数据集上训练一个DecisionTreeClassifier:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data[:,2:]
y = iris.target
tree_clf = DecisionTreeClassifier(max_depth=2)
tree_clf.fit(X,y)

要将决策树可视化,首先,使用export_graphviz()方法输出一个图形定义文件,命名为iris_tree.dot

这里需要安装graphviz

安装方式:

① conda install python-graphviz

② pip install graphviz

在当前目录下新建images/decision_trees目录

不然会报错

Traceback (most recent call last):
File "decisiontree.py", line 21, in <module>
filled=True)
File "E:\Anaconda\lib\site-packages\sklearn\tree\export.py", line 762, in export_graphviz
out_file = open(out_file, "w", encoding="utf-8")
FileNotFoundError: [Errno 2] No such file or directory: '.\\images\\decision_trees\\iris_tree.dot'

from sklearn.tree import export_graphviz
import os
PROJECT_ROOT_DIR = "."
CHAPTER_ID = "decision_trees"
def image_path(fig_id):
return os.path.join(PROJECT_ROOT_DIR, "images", CHAPTER_ID, fig_id)

export_graphviz(tree_clf,
out_file=image_path("iris_tree.dot"),
feature_names=iris.feature_names[2:],
class_names=iris.target_names,
rounded=True,
filled=True)

运行过后生成了一个dot文件

使用命令dot -Tpng iris_tree.dot -o iris_tree.png 将dot文件转换为png文件方便显示

决策树如上图所示

petal length:花瓣长度   petal width:花瓣宽度

samples:统计出它应用于多少个训练样本实例

value:这个节点对于每一个类别的样例有多少个  这个叶结点显示包含0 个 Iris-Setosa,1 个 Iris-Versicolor 和 45 个 Iris-Virginica

Gini:用于测量它的纯度,如果一个节点包含的所有训练样例全都是同一类别的,我们就说这个节点是纯的( Gini=0 )

Gini公式:

 Pik是第i个节点上,类别为k的训练实例占比

深度为 2 的左侧节点基尼指数为: 1 - (0/54)² - (49/54)² - (5/54)² = 0.68

进行预测

当找到了一朵鸢尾花并且想对它进行分类时,从根节点开始,询问花朵的花瓣长度是否小于2.45厘米。如果是,将向下移动到根的左侧子节点,在这种情况下,它是一片叶子节点,它不会再继续问任何问题,决策树预测你的花是iris-setosa

假设你找到了另一朵花,但这次的花瓣长度是大于2.45厘米的。必须向下移动到根的右侧子节点,而这个节点不是叶节点,它会问另一个问题,花瓣宽度是否小于1.75厘米?如果是,则将这朵花分类成iris-versicolor ,不是,则分类成iris-versicolor

注意:scikit-learn使用的是CART算法,该算法仅生成二叉树;非叶节点永远只有两个子节点。

估计分类概率

新样本:花瓣长5厘米,花瓣宽1.5厘米,预测具体的类

print(tree_clf.predict_proba([[5,1.5]]))
print(tree_clf.predict([[5,1.5]]))

此处说明分类为iris-setosa的概率为0,分类为iris-versicolor的概率为0.90740741,分类为iris-virginica的概率为0.09259259

通过predict预测该花为iris-versicolor

完整代码

#在鸢尾花数据集上进行一个决策树分类器的训练
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
import os
PROJECT_ROOT_DIR = "."
CHAPTER_ID = "decision_trees"
def image_path(fig_id):
return os.path.join(PROJECT_ROOT_DIR, "images", CHAPTER_ID, fig_id) iris = load_iris()
X = iris.data[:,2:]
y = iris.target
tree_clf = DecisionTreeClassifier(max_depth=2)
tree_clf.fit(X,y)
export_graphviz(tree_clf,
out_file=image_path("iris_tree.dot"),
feature_names=iris.feature_names[2:],
class_names=iris.target_names,
rounded=True,
filled=True)
print(tree_clf.predict_proba([[5,1.5]]))
#[0]:iris-setosa, [1]:iris-versicolor, [2]:iris-virginica"
print(tree_clf.predict([[5,1.5]]))

CART训练算法原理介绍:

Scikit-Learn使用的是分类与回归树(Classification And Regression Tree,简称CART)算法来训练决策树(也叫作“生长”树)。想法非常简单:首先,使用单个特征k和阈值tk(例如,花瓣长度≤2.45厘米)将训练集分成两个子集。k和阈值tk怎么选择?答案是产生出最纯子集(受其大小加权)的k和tk就是经算法搜索确定的(t,tk)。

机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树的更多相关文章

  1. Java多线程编程实战指南(核心篇)读书笔记(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  2. Java多线程编程实战指南(核心篇)读书笔记(五)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  3. Java多线程编程实战指南(核心篇)读书笔记(四)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  4. Java多线程编程实战指南(核心篇)读书笔记(三)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  5. Java多线程编程实战指南(核心篇)读书笔记(一)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  6. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  7. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  8. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  9. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

随机推荐

  1. 深蓝词库转换2.5发布——支持微软五笔,支持Linux和macOS和更多命令行功能

    最近利用晚上的时间,对很久没有新版本发布的深蓝词库转换进行了版本升级.本次升级主要包含的功能包括: 一.支持Win10自带的微软五笔输入法用户自定义短语的导入导出. 1.在转换输入法词库列表中选择“W ...

  2. SpringBoot2.0 整合 Redis集群 ,实现消息队列场景

    本文源码:GitHub·点这里 || GitEE·点这里 一.Redis集群简介 1.RedisCluster概念 Redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的 ...

  3. 请求时发送OPTIONS请求

    最近在用uni-app开发项目时,发现一个之前没注意到的点,当我发送POST请求的时候,在NetWork可以看到在发送正式的POST请求时,会先发送一个OPTIONS请求,OPTIONS请求后才会发送 ...

  4. RocketMQ(一):推拉消费模型客户端实践

    消息中间件是为解耦生产者和消费者的目的,三大服务点:解耦.异步.削峰. 现在的的互联网系统中,mq已经必备基础设施了,我们已明显感觉它的必要性与强大.然而,它的本质是啥?存储转发系统罢了! MQ有很多 ...

  5. (五十九)c#Winform自定义控件-池子(工业)-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  6. Flask 教程 第七章:错误处理

    本文翻译自The Flask Mega-Tutorial Part VII: Error Handling 这是Flask Mega-Tutorial系列的第七部分,我将告诉你如何在Flask应用中进 ...

  7. ant 打包脚本

    现在很多人都用ant脚本来进行打包,下面就介绍一下这个打包工具常见的用法.以及脚本如何编写 <!-- 定义任务,清空任务:清空原有的classes目录,重新创建 --> <targe ...

  8. CSS学习笔记-背景属性

    一.背景尺寸属性:    1.含义:        背景尺寸属性是CSS3中新增的一个属性,专门用于设置背景图片大小 2.格式:        1.1具体像素:             backgro ...

  9. 部署web01,web02,nfs,db01,backup,搭建wordpress,WeCenter,实现共享,热备,实时备份

    小结 部署web01,web02,nfs,db01,backup,搭建wordpress,WeCenter,实现共享,热备,实时备份 1)在web01和web02上安装nginx和php 2)创建ww ...

  10. ramfs 和 tmpfs 以及 ramdisk相关调研

    最近需要使用到 ramfs 和 tmpfs 做内存文件系统,下面对这两个文件系统相关的信息,做一下总结: 参考链接: https://www.thegeekstuff.com/2008/11/over ...