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

摘要:
如果是,则该花被归类为花色鸢尾。如果不是,它被归类为虹膜花色。注:Scikit ear使用CART算法,该算法只生成二叉树;非叶节点始终只有两个子节点。估计分类概率的新样本:花瓣长5厘米,宽1.5厘米。据预测,这里的特定类别指纹表明被分类为刚毛虹膜的概率为0,并且被分类为维吉尼亚虹膜的概率为0.09259259。预测花朵是虹膜花色完整代码#在来自sklearn.datasetsimportload_irisfromsklearn.treeimportDecisionTreeClassifierfomsklean.treeimportexport_graphvizimportosPROJECT_ROOT_DIR=“.”CHAPTER_ ID=“decision_trees”defimage_path:returnos.path.joiniris=load_iris()X=iris.data[:,2:]y=iris.targettree_clf=DecisionTreeClassifiertree_clf.fit(X,y)export_Graphvizprint#[0]:iris setosa,[1]:iris versioncolor,[2]:iris virginia“printCART训练算法原理简介:Scikit Learn使用分类和回归树算法训练决策树。

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

win10系统,Python 3.7.0

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

from sklearn.datasets importload_iris
from sklearn.tree importDecisionTreeClassifier
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:Anacondalibsite-packagessklearn reeexport.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 importexport_graphviz
importos
PROJECT_ROOT_DIR = "."CHAPTER_ID = "decision_trees"
defimage_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文件

机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树第1张

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

机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树第2张

决策树如上图所示

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

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

value:这个节点对于每一个类别的样例有多少个机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树第3张这个叶结点显示包含0 个 Iris-Setosa,1 个 Iris-Versicolor 和 45 个 Iris-Virginica

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

Gini公式:

机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树第4张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]]))

机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树第5张

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

通过predict预测该花为iris-versicolor

完整代码

#在鸢尾花数据集上进行一个决策树分类器的训练
from sklearn.datasets importload_iris
from sklearn.tree importDecisionTreeClassifier
from sklearn.tree importexport_graphviz
importos
PROJECT_ROOT_DIR = "."CHAPTER_ID = "decision_trees"
defimage_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 AndRegression Tree,简称CART)算法来训练决策树(也叫作“生长”树)。想法非常简单:首先,使用单个特征k和阈值tk(例如,花瓣长度≤2.45厘米)将训练集分成两个子集。k和阈值tk怎么选择?答案是产生出最纯子集(受其大小加权)的k和tk就是经算法搜索确定的(t,tk)。

机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树第6张

免责声明:文章转载自《机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Qt的皮肤设计(Style Sheet)js截取指定长度字符下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Deep Learning基础--线性解码器、卷积、池化

本文主要是学习下Linear Decoder已经在大图片中经常采用的技术convolution和pooling,分别参考网页http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial中对应的章节部分。   Linear Decoders:   以三层的稀疏编码神经网络而言,在sparse a...

基于图像的三维物体重建:在深度学习时代的最新技术和趋势之人脸重建和场景分析

作者:Longway 来源:公众号@3D视觉工坊 链接: 基于图像的三维物体重建:在深度学习时代的最新技术和趋势之人脸重建和场景分析 1.三维人脸重建 基于精细密集图像的人脸三维重建是计算机视觉和计算机图形学中一个长期存在的问题,其目标是恢复人脸的形状、姿态、表情、皮肤反射率和更精细的表面细节。最近,这个问题被描述为一个回归问题,并用卷积神经网络来解决...

AlexNet详解3

Reference. Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks [J]. Advances in Neural Information Processing Systems, 2012, 25(...

tensorflow 保存训练模型ckpt 查看ckpt文件中的变量名和对应值

  TensorFlow 模型保存与恢复一个快速完整的教程,以保存和恢复Tensorflow模型。在本教程中,我将会解释: TensorFlow模型是什么样的? 如何保存TensorFlow模型? 如何恢复预测/转移学习的TensorFlow模型? 如何使用导入的预先训练的模型进行微调和修改? 这个教程假设你已经对神经网络有了一定的了解。如果不了解的话...

吴恩达机器学习笔记 —— 12 机器学习系统设计

本章主要围绕机器学习的推荐实践过程以及评测指标,一方面告诉我们如何优化我们的模型;另一方面告诉我们对于分类的算法,使用精确率和召回率或者F1值来衡量效果更佳。最后还强调了下,在大部分的机器学习中,训练样本对模型的准确率都有一定的影响。 更多内容参考 机器学习&深度学习 机器学习最佳实践 针对垃圾邮件分类这个项目,一般的做法是,首先由一堆的邮件和是否...

【学习笔记】tensorflow图片读取

目录 图像基本概念 图像基本操作图像基本操作API 图像读取API 狗图片读取 CIFAR-10二进制数据读取 TFRecords TFRecords存储 TFRecords读取方法 图像基本概念 在图像数字化表示当中,分为黑白和彩色两种。在数字化表示图片的时候,有三个因素。分别是图片的长、图片的宽、图片的颜色通道数。那么黑白图片的颜色...