02_05 python机器学习_第二章监督学习_决策树

本文详细介绍了Python机器学习中的决策树,包括决策树的原理、实现过程、预剪枝决策树模型及其优缺点。内容涵盖数据样本、决策边界、训练模型得分以及决策树在多分类问题中的应用。
摘要由CSDN通过智能技术生成

第二章监督学习_决策树

01 什么是决策树

就是没完没了的问,直到问出答案

书上例子:

import mglearn
import matplotlib.pyplot as plt

mglearn.plots.plot_animal_tree()
plt.show()

在这里插入图片描述这里不得不吐槽一下.就不能多写几句话,为了能运行出图像调查了半小时.

中间的坎坷就不展示了,直接上正确配置手顺.

  1. 代码原封不动copy
  2. 去官网下载Graphviz, Graphviz相关百度说明. 软件不到5M. 开源软件, 趋势扫描无毒.
    别问我为啥要下软件? 我也想知道… 一运行就报错找不到包,pip安装后有找不到dot,一顿查发现python就是个调用,成像需要graphviz软件来绘图.
  3. 安装时候注意了: 用户path里必须配置 graphviz的bin, 系统path里必须加入 graphviz下bin文件夹中的dot. 别问为什么,不想浪费时间照着配置就行.
  4. python pip install graphviz 安装python调用然间的三方包.
  5. 至此,你可以成功运行代码了…

上图中黑色箭头指向的"问题"或"答案"称作叶节点

02 决策数的实现原理

决策树的原理用图片描述比用语言来的更直接.
书上的例子不错,可惜只给了图,没说怎么画出来的,如果是一直跟着我学习,相信你也能猜到mglearn里可能有现成的绘图范例.
对于刚接触的领域,要抱着学习的态度去揣摩书里的每一句话水平才可能有提高.

# 决策树原理范例
import mglearn
import matplotlib.pyplot as plt

mglearn.plots.plot_tree_progressive()
plt.show()

首先说一下数据样本.
100个数据样本, 共分2类,每类50个, 每个数据样本有2个数据特征,即(100,2)的结构.

在这里插入图片描述决策树开始前的准备

这里先不说决策边界怎么算出来的,因为看到目前我也不知道,先留着问题往下学.
我的理解:

  • 模型首先会在数据样本中找到一个位置,使其中的一类数据尽可能的多.
  • 因为是作用在数据样本也就是1维即X轴上,因此线与X轴平行.

我的理解
疑问:为啥不先用特征分类? 我的理解:
分类一定是从大分类开始,大分类可以将某一类的对象尽可能多的汇聚到一起,然后再细化就容易了.先从最小单位细化分类会让问题处理起来很麻烦.
数据样本中种类就是大分类, 数据特征就是小分类. 疑问:数据样本绘图中,X轴也是数据特征,大分类为啥横着画? 我的理解:
这个可能需要抛开第一张图, 因该用numpy.array()来看待, 把数据要想象成矩阵图, 横轴代表样本,纵轴代表特征.

在这里插入图片描述

下图是深度1划分

  • 深度1的决策边界为啥与Y轴平行?

我的理解
关于数据种类(大分类)的分类我们已经做完了.接下来的划分只能按照(小分类)特征来划分.特征位于Y轴,因此与Y轴平行.

在这里插入图片描述

下图是最大深度划分:

疑问: 分类问题已经在第一次做完了,怎么又出现了横轴方向的决策边界?

我的理解
第一次分类只是为了尽可能多的汇聚各种类数据,当数据划分逐渐细化后,会发现仅仅靠特征已经无法再继续划分,这时如果不是纯点(完全都是一类的数据)的时候,模型会尝试再从分类上区分数据,然后再用特征区分,就这样递归下去,直到把数据都划分完.

在这里插入图片描述上面删除部分是我在学习过程中产生的问题,理解些偏差,需要重新整理.

汇总一下其实就是一个问题, 决策边界的产生规则.

  • 决策边界的每一次产生因该都是调用相同的逻辑,只不过大于1的深度需要递归调用.
  • 决策边界的每一次划分都是以数据特征来划分,目的就是尽可能多的决策出这一次的纯点(完全是某一类数据,没有夹杂其它类别)
  • 只有产生不纯点的时候,才可能产生下一次的决策
  • 不用纠结决策边界为啥一会X轴一会Y轴, 完全由算法和特征数据来决定样本的边界如何画

03 训练树模型的得分如何

# 绘图
import matplotlib.pyplot as plt
# 数据样本
from sklearn.datasets import load_breast_cancer
# 数据分离
from sklearn.model_selection import train_test_split
# 决策树模型 预剪枝
from sklearn.tree import DecisionTreeClassifier

# 获得数据
cancer = load_breast_cancer()
# 拆分数据
X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, random_state=42)

# 使用默认决策树
tree_default = DecisionTreeClassifier()
# 使用深度为4的决策树
tree_deep4 = DecisionTreeClassifier(max_depth=4, random_state=0)

# 喂数据
tree_default.fit(X_train, y_train)
tree_deep4.fit(X_train, y_train)

# 记录各模型得分
tree_default_train_score = tree_default.score(X_train, y_train)
tree_default_test_score = tree_default.score(X_test, y_test)
tree_deep4_train_score = tree_deep4.score(X_train, y_train)
tree_deep4_test_score = tree_deep4.score
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>