【机器学习】【决策树】分类树|回归树学习笔记总结

决策树算法概述

基本概念

决策树:从根节点开始一步步走到叶子节点,每一步都是决策过程 对于判断的先后顺序把控特别严格 一旦将判断顺序进行变化则最终的结果将可能发生改变

往往将分类效果较佳的判断条件放在前面,即先初略分在进行细节分

所有的数据最终都将会落到叶子节点,树模型既可以做分类也可以做回归

树的组成:

根节点:第一个选择点

非叶子节点与分支:中间过程

叶子节点:最终的决策结果

决策树的训练与测试:

训练阶段:从给定的训练集构造出一棵树(从根节点开始选择特征,即判断条件等;如何进行特征切分)

测试阶段:根据构造出来的树模型从上至下运行一遍即可

:是表示随机变量不确定性的度量,即物体内部的混乱程度

在实际运用过程中,熵值越低越好 在树模型构建时也是使得熵值降低的的好

信息增益

表示特征X使得类别Y的不确定性减少的程度。(分类后的专一性,希望分类后的结果是同类在一起)

即如何经过一个节点后左右子树的熵值之和比原来的要小,则信息增益为正

计算各个特征的信息增益,再选择最大的那个作为根节点 对于下一个节点其操作过程与选择根节点一致,每次都需要对剩下的特征进行遍历,选择出信息增益max的特征

信息增益存在的问题

当特征中存在非常稀疏,并且种类非常多的特征时,如id值 这时熵值经过该特征判断后值接近于0

信息增益率

公式为:信息增益/该节点的熵值

该方式很好的解决了信息增益所存在的问题

gini系数

如何处理连续值

选取连续值的哪个分界点:——对连续值的各个分界点进行尝试,判断每个分界点的信息增益率等,以选择最佳的分界点

剪枝策略

决策树过拟合风险很大,理论上可以将数据完全分开,即每个叶子节点只有一个数据

预剪枝

边建立决策树边进行剪枝操作

可以通过限制树的深度、叶子节点个数、叶子节点样本数、信息增益量等

预剪枝的参数都是需要通过实验不断的进行尝试来选择最佳参数的

后剪枝

建立完成决策树之后进行剪枝操作

在计算公式中ɑ的值需要自己设定,值越大说明希望自己的树模型越不过拟合,但是得到的结果可能不是很好;值越小说明希望结果好为主,对于过拟合程度不是很关注

C(T):gini系数或熵值

Tleaf:叶子节点个数

回归/分类问题解决

分类问题:

由于原始数据有自己的标签,对于最终的叶子节点,其类别所属类型使用众数方式,即何种类别数据多则该叶子节点属于该类型;

回归问题

回归由于没有具体的类别,因而无熵值。

判断标准:方差

在进行预测时该节点的节点值等于其平均数

树模型的可视化展示

下载安装包:Download | Graphviz

环境变量配置:GraphViz如何配置环境变量并保存图片-百度经验 (baidu.com)

import numpy as np
import os
# %matplotlib inline
import matplotlib
import matplotlib.pyplot as pltplt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warningswarnings.filterwarnings('ignore')'''导入鸢尾花数据集'''
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifieriris = load_iris()
X = iris.data[:, 2:]
y = iris.target'''创建决策树模型'''
tree_clf = DecisionTreeClassifier(max_depth=2)  ##max_depth限制决策树模型最大深度
tree_clf.fit(X,y)  ##模型训练'''画图展示决策树模型'''
from sklearn.tree import export_graphvizexport_graphviz(tree_clf,  ##当前树模型  之前训练好的树模型out_file="iris_tree.dot",  ##输出文件 .dot文件  后续会将其转为图片文件feature_names=iris.feature_names[2:],  ##绘图时展示的特征名字class_names=iris.target_names,rounded=True,filled=True
)

将在文件夹中生成一个.dot文件,

再利用之前下载好的软件将该文件转为png图片文件

dot -Tpng iris_tree.dot -o iris_tree.png

将会得到对应的png图片

'''使用代码的方式展示照片'''
from IPython.display import Image
Image(filename="iris_tree.png",width=400,height=400)
##前提是已经将dot文件转为相关的照片格式

 

决策树的决策边界展示

import numpy as np
import os
# %matplotlib inline
import matplotlib
import matplotlib.pyplot as pltplt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warningswarnings.filterwarnings('ignore')'''导入鸢尾花数据集'''
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifieriris = load_iris()
X = iris.data[:, 2:]
y = iris.target'''创建决策树模型'''
tree_clf = DecisionTreeClassifier(max_depth=2)  ##max_depth限制决策树模型最大深度
tree_clf.fit(X, y)  ##模型训练print(tree_clf.predict_proba([[5, 1.5]]))  ##预测概率值
'''绘制决策边界'''
from matplotlib.colors import ListedColormapdef plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True, legend=False, plot_training=True):##找特征x1s = np.linspace(axes[0], axes[1], 100)x2s = np.linspace(axes[2], axes[3], 100)# 构建棋盘x1, x2 = np.meshgrid(x1s, x2s)##在棋盘中构建待测试数据X_new = np.c_[x1.ravel(), x2.ravel()]##预测最终结果值y_pred = clf.predict(X_new).reshape(x1.shape)##确定绘制的颜色  与等高线样式custom_cmap = ListedColormap(['#fafab0', '#9898ff', '#a0faa0'])plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)if not iris:custom_cmap2 = ListedColormap(['#7d7d58', '#4c4c7f', '#507d50'])plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)if plot_training:plt.plot(X[:, 0][y == 0], X[:, 1][y == 0], "yo", label="Iris-Setosa")plt.plot(X[:, 0][y == 1], X[:, 1][y == 1], "bs", label="Iris-Versicolor")plt.plot(X[:, 0][y == 2], X[:, 1][y == 2], "g^", label="Iris-Virginica")plt.axis(axes)if iris:plt.xlabel("Petal length", fontsize=14)plt.ylabel("Petal width", fontsize=14)else:plt.xlabel(r"$x_1$", fontsize=18)plt.ylabel(r"Sx_2$", fontsize=18, rotation=0)if legend:plt.legend(loc="lower right", fontsize=14)plt.figure(figsize=(8, 4))
plot_decision_boundary(tree_clf, X, y)
###传入实际的位置值  即切割位置
plt.plot([2.45, 2.45], [0, 3], "k-", linewidth=2)
plt.plot([2.45, 7.5], [1.75, 1.75], "k--", linewidth=2)
plt.plot([4.95, 4.95], [0, 1.75], "k:", linewidth=2)
plt.plot([4.85, 4.85], [1.75, 3], "k:", linewidth=2)
plt.text(1.40, 1.0, "Depth=0", fontsize=15)
plt.text(3.2, 1.80, "Depth=1", fontsize=13)
plt.text(4.05, 0.5, "(Depth=2)", fontsize=11)
plt.title('Decision Tree decision boundaries')
plt.show()

 

树模型预剪枝参数作用

通常max_features不做限制,默认情况下全部使用,除非特征数非常多;max_depth(树最大的深度)

import numpy as np
import os
# %matplotlib inline
import matplotlib
import matplotlib.pyplot as pltplt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warningswarnings.filterwarnings('ignore')'''绘制决策边界'''
from matplotlib.colors import ListedColormapdef plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True, legend=False, plot_training=True):##找特征x1s = np.linspace(axes[0], axes[1], 100)x2s = np.linspace(axes[2], axes[3], 100)# 构建棋盘x1, x2 = np.meshgrid(x1s, x2s)##在棋盘中构建待测试数据X_new = np.c_[x1.ravel(), x2.ravel()]##预测最终结果值y_pred = clf.predict(X_new).reshape(x1.shape)##确定绘制的颜色  与等高线样式custom_cmap = ListedColormap(['#fafab0', '#9898ff', '#a0faa0'])plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)if not iris:custom_cmap2 = ListedColormap(['#7d7d58', '#4c4c7f', '#507d50'])plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)if plot_training:plt.plot(X[:, 0][y == 0], X[:, 1][y == 0], "yo", label="Iris-Setosa")plt.plot(X[:, 0][y == 1], X[:, 1][y == 1], "bs", label="Iris-Versicolor")plt.plot(X[:, 0][y == 2], X[:, 1][y == 2], "g^", label="Iris-Virginica")plt.axis(axes)if iris:plt.xlabel("Petal length", fontsize=14)plt.ylabel("Petal width", fontsize=14)else:plt.xlabel(r"$x_1$", fontsize=18)plt.ylabel(r"Sx_2$", fontsize=18, rotation=0)if legend:plt.legend(loc="lower right", fontsize=14)from sklearn.tree import DecisionTreeClassifierfrom sklearn.datasets import make_moonsX, y = make_moons(n_samples=100, noise=0.25, random_state=53)  ##构造数据
tree_clf1 = DecisionTreeClassifier(random_state=42)
tree_clf2 = DecisionTreeClassifier(min_samples_leaf=4, random_state=42)  # 设置min_samples_leaf参数
tree_clf1.fit(X, y)
tree_clf2.fit(X, y)
##绘图展示对比
plt.figure(figsize=(12, 4))
plt.subplot(121)
plot_decision_boundary(tree_clf1, X, y, axes=[-1.5, 2.5, -1, 1.5], iris=False)
plt.title("min_samples_leaf=4")
plt.subplot(122)
plot_decision_boundary(tree_clf2, X, y, axes=[-1.5, 2.5, -1, 1.5], iris=False)
plt.title("No restrictions")
plt.show()

 

回归树模型

树模型对数据的形状较为敏感,当对数据进行旋转等变换后其得到的结果也是不同的

回归树与其他的不同的于 其使用的不是gini系数而是均方误差mse

import numpy as np
import os
# %matplotlib inline
import matplotlib
import matplotlib.pyplot as pltplt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warningswarnings.filterwarnings('ignore')
'''构造数据'''
np.random.seed(42)
m = 200
X = np.random.rand(m, 1)
y = 4 * (X - 0.5) ** 2
y = y + np.random.randn(m, 1) / 10'''导入包 但是不同于分类决策树的包'''from sklearn.tree import DecisionTreeRegressortree_reg = DecisionTreeRegressor(max_depth=2)
tree_reg.fit(X, y)
from sklearn.tree import export_graphvizexport_graphviz(tree_reg,  ##当前树模型  之前训练好的树模型out_file="regression_tree.dot",  ##输出文件 .dot文件  后续会将其转为图片文件feature_names=["X1"],  ##绘图时展示的特征名字rounded=True,filled=True
)

sklearn工具包中都是使用CRT算法,即得到的都是二叉树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国联通云技术,有哪些产品

中国联通国际公司,作为中国联通集团对外拓展国际市场的重要窗口与平台,已在国际电信领域取得了显著成就,其产品线涵盖了从基础联接到云端服务的多个层面,旨在为全球用户提供一体化、端到端的高品质信息服务解决方案。 大联接产品…

Mybatis-Plus——06,CRUD查

CRUD查 一、普通查询1.1、通过id查询单个用户1.2、通过id查询多个用户1.3、条件查询 通过map封装 二、分页查询2.1、配置分页插件2.2、运行方法 三、通过wrapper条件构造器查询3.1、查询name不为空,email不为空,age大于18的用户3.2、查询nameJone的用户3…

2024普通商家如何通过短视频矩阵快速破圈?

一个账号发1条作品,每条作品1000曝光覆盖1000人 十个账号发10条作品,每条作品1000播放量覆盖100000人 一百个账号发100条作品,每条作品1000播放量覆盖10000000人...... 如果我们有300个、500个账号甚至更多呢?自然每天能够覆盖到…

哪款洗地机值得买?希亦、追觅、米博、美的谁才是行业标杆?

在家庭清洁中,最让我们苦恼的便是厨房垃圾了,油渍跟食物残渣,用扫把扫了后,要反反复复的湿拖五六次,期间不停的手洗拖把,这套流程下来,往往容易腰酸背痛,手指皱巴巴的,这…

SAP MM学习笔记43 - 特殊调达流程 - 支付计划

以前学习了特殊调达流程 受托品和外注,中断了一阵儿去复习了PP了,咱继续回来研究MM。 SAP MM学习笔记42 - 特殊调达流程 - 受托品(寄售)-CSDN博客 SAP MM学习笔记41 - 特殊调达流程 - 外注加工-CSDN博客 本章讲SAP 特殊调达流程…

Get了!原来朋友圈定时发布如此简单!

你是不是也有这样的烦恼?微信号太多,有时候会顾不上发朋友圈? 别担心!微信管理系统来帮你解决这个问题,实现朋友圈定时发布!让我们一起来看看如何利用微信管理系统的强大功能来提升我们的社交媒体效率吧。…

Interceptor拦截器+JWT令牌实现登陆验证

一、背景 与过滤器的作用类似,不过拦截器是spring中的组件,只能拦截进入spring的请求;过滤器则可以拦截所有从前端页面发送来的请求。 *拦截器和过滤器选一就可以实现登陆验证,过滤器的实现在以下这篇博客中,有需要可…

在Exchange中启用/禁用搜索索引

默认情况下,所有的新邮箱数据都是启用Exchange搜索,仅当多个邮箱迁移到该Exchange Server时,才禁用搜索索引。 获取数据库的Exchange搜索索引 使用Get-MailboxDatabase 来获取数据库的搜索索引 Get-MailboxDatabase | Select-Object Name,…

【自动驾驶系列丛书学习】2.《自动驾驶汽车环境感知》学习笔记

《自动驾驶技术概论》学习笔记 致谢:作者:甄先通、黄坚、王亮、夏添 -------------------------------------------------------------------------------------------------------- 笔记目录 -----------------------------------------------------…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

触发HTTP preflight预检及跨域的处理方法

最近在做需求的过程中,遇到了很多跨域和HTTP预检的问题。下面对我所遇到过的HTTP preflight和跨域的相关问题进行总结: 哪些情况会触发HTTP preflight preflight属于cors规范的一部分,在有跨域的时候,在一定情况下会触发preflig…

linux 文件权限

仅仅记录一下,怎么添加文件权限 r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute) 读、写、运行三项权限可以用数字表示,就是r4,w2,x1,777就是rwxrwxrwx 你可能不懂什么意思 举个例吧! 如上图有一个文件,它…

利用auto-py-to-exe库的简单图形界面实现.py到.exe的转换

文章目录 1. auto-py-to-exe 简介2. 安装与使用3. 配置项介绍4. 打包完成 1. auto-py-to-exe 简介 运行 .py 文件需要配套相应的 Python 解释器和相关的依赖项,而很多时候我们会面临光有待演示的 .py 程序,而没有支持演示的环境的尴尬。一种解决办法就是…

仪酷LabVIEW OD实战(4)——Object Detection+OpenVINO工具包快速实现yolo目标检测

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『仪酷LabVIEW目标检测工具包实战』 📑上期文章:『仪酷LabVIEW OD实战(3)——Object Detectiononnx工具包快速…

Java+SpringBoot+Vue+MySQL:农业管理新篇章

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

Z Potentials | 星爵,他的征途不止向量数据库

纵观过去几十年的科技发展史,每一代新的技术架构的出现往往都伴随着新的数据范式的出现,也催生了多家百亿到千亿美金数据平台的诞生。如果说 2023 年科技领域的关键词是 LLM,那么数据库领域的关键词一定非向量数据库莫属。向量数据库是一种专…

【项目实践04】【RocketMQ消息收发拦截器】

文章目录 一、前言二、项目背景三、实现方案1. 关键接口2. 消息发送方3. 消息消费方4. 配置引入类5. 使用示例 四、思路扩展1. 消费流程简介 一、前言 本系列用来记录一些在实际项目中的小东西,并记录在过程中想到一些小东西,因为是随笔记录&#xff0c…

Apache POI Excel的读写

1、 POI介绍 Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程 序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文 件。 jxl:专门操作Excel maven坐标: POI结构:…

【信息系统项目管理师】--【信息技术发展】--【新一代信息技术及应用】--【虚拟现实】

文章目录 第二章 信息技术发展2.2 新一代信息技术及应用2.2.6 虚拟现实1.技术基础2.关键技术3.应用和发展 第二章 信息技术发展 信息技术是在信息科学的基本原理和方法下,获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看&#xff…

封关了,不仅封掉了港漂们方便的回家之路

封关不仅堵住了港漂回国的便捷途径,也堵住了港漂修理内地大大小小的电器的路。 香港当然有维修工。 听邻居说修一个漏水的水龙头要港币1000元,检查微波炉要港币600元。 更换主板需要4000元,比新机还贵。 收回坏掉的洗衣机修理费是14000元&am…