[机器学习系列]深入探索回归决策树:从参数选择到模型可视化

目录

一、回归决策树的参数

二、准备数据

 三、构建回归决策树

(一)拟合模型

(二)预测数据

(三)查看特征重要性

 (四)查看模型拟合效果

(五) 可视化回归决策树真实值和预测值

(六)可视化决策树并保存

 部分结果如下:


一、回归决策树的参数

DecisionTreeRegressor(*, criterion='mse', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort='deprecated', ccp_alpha=0.0)

具体参数解释可参考下方链接的文档,几乎和分类决策树相差不大 

sklearn.tree.DecisionTreeRegressor-scikit-learn中文社区

二、准备数据
 

from sklearn.datasets import load_boston
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

# 加载数据
boston = load_boston()
# 创建DataFrame
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target

# 数据特征和目标变量
X = df.drop('PRICE', axis=1)
y = df['PRICE']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 打印训练集和测试集的形状
print("训练集特征数据形状:", X_train.shape)
print("训练集目标变量形状:", y_train.shape)
print("测试集特征数据形状:", X_test.shape)
print("测试集目标变量形状:", y_test.shape)

 

 三、构建回归决策树

(一)拟合模型

from sklearn.tree import DecisionTreeRegressor
clf=DecisionTreeRegressor()
clf = clf.fit(X_train, y_train)

(二)预测数据

y_pred=clf.predict(X_test)

(三)查看特征重要性

clf.feature_importances_

 (四)查看模型拟合效果

from sklearn.metrics import r2_score,mean_squared_error, explained_variance_score, mean_absolute_error
print("决策树回归模型测试集R^2:",round(r2_score(y_test,y_pred)))
print("决策树回归模型测试集均方误差:",round(mean_squared_error(y_test,y_pred)))
print("决策树回归模型测试集解释方差分:",round(explained_variance_score(y_test,y_pred)))
print("决策树回归模型测试集绝对误差:",round(mean_absolute_error(y_test,y_pred)))

(五) 可视化回归决策树真实值和预测值

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

# 假设X_test和y_test已经定义好了
plt.figure(figsize=(10, 6))  # 创建一个新的图形,设置大小
plt.plot(range(len(y_test)), y_test, color='blue', label='实际值')  # 绘制散点图,实际值用蓝色表示
plt.plot(range(len(y_pred)), y_pred, color='red', label='预测值')  # 绘制预测值的线,用红色表示
plt.title('决策树回归预测与实际值对比')  # 图表标题
plt.xlabel('测试集样本')  # X轴标签
plt.ylabel('值')  # Y轴标签
plt.legend()  # 显示图例
plt.grid(True)  # 显示网格
plt.show()  # 显示图表

(六)可视化决策树并保存

import graphviz
from sklearn import tree
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
 
dot_data = tree.export_graphviz(clf,out_file = None,  
                                filled=True, rounded=True) 
dot_data=dot_data.replace('helvetica', 'SimHei')
graph = graphviz.Source(dot_data) 
graph.render("my_decision_tree", format='png')  # 保存为png格式
 
graph

 部分结果如下:

可通过控制树的深度、叶子节点等参数对决策树进行剪枝操作。可以通过网格搜索法进行参数调优。具体可参考往期博客:

决策树分类任务实战(python 代码详解)-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

英特尔StoryTTS:新数据集让文本到语音(TTS)表达更具丰富性和灵感

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 英特尔StoryTTS:新数据集让文本到语音(TTS)表达更具丰富性和灵感 引言:探索文本表达性在语音合成中的重要性 …

【深耕 Python】Quantum Computing 量子计算机(3)重要数学公式一览

写在前面 往期量子计算机博客: 【深耕 Python】Quantum Computing 量子计算机(1)图像绘制基础 【深耕 Python】Quantum Computing 量子计算机(2)绘制电子运动平面波 正文 偏微分: 交换关系&#xff…

NOIP,CSP-J,CSP-S——图

一、图的基本概念 图是顶点和边的集合 1、无向图: 每一条边都是无方向的 2、有向图: 每一条边都是有方向的 3、完全图: 任意两个顶点都有一条边相连接; 4、结论 若n个顶点的无向图有n(n-1)/2条边,称为无向完成图; 若n个顶点的有向图有n(n-1)条边,称为有向完成图…

华为eNSP Pro模拟器下载(普通账号可用)

好消息!华为终于开放了普通账号使用权限! 安装教程下载后见《指导手册-eNSP Pro V100R001C00.pdf》 华为eNSP Pro模拟器下载(普通账号可用) 下载地址 华为eNSP Pro模拟器下载(普通账号可用) - 下一朵云 …

cannot import name ‘ForkProcess‘ from ‘multiprocessing.context‘问题解决

问题描述 cannot import name ForkProcess from multiprocessing.context 问题原因 ForkContext用于Unix系统。SpawnContext可以在 Windows 环境中使用 解决方案 改成SpawnProcess就可以运行了 将原来的ForkProcess修改为SpawnProcess wrappers.py脚本,下面的代…

Android MediaCodec 简明教程(七):使用 MediaCodec 解码到 OES 纹理上

系列文章目录 Android MediaCodec 简明教程(一):使用 MediaCodecList 查询 Codec 信息,并创建 MediaCodec 编解码器Android MediaCodec 简明教程(二):使用 MediaCodecInfo.CodecCapabilities 查…

【Linux】-Linux用户和权限[3]

一、认知root用户 1、root用户(超级管理员) 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户为:root(超级管理员) root用户拥有最大的系统操作权限…

python 和 MATLAB 都能绘制的母亲节花束!!

hey 母亲节快到了,教大家用python和MATLAB两种语言绘制花束~这段代码是我七夕节发的,我对代码进行了简化,同时自己整了个python版本 MATLAB 版本代码 function roseBouquet_M() % author : slandarer% 生成花朵数据 [xr,tr]meshgrid((0:24).…

我们的小程序每天早上都白屏,真相是。。。

大家好,我是程序员鱼皮。最近我们在内测一款面试刷题小程序,没错,就是之前倒下的 “面试鸭”! 在我们的内测交流群中,每天早上都会有同学反馈:打开小程序空白,没任何内容且登录不上。 然后过了…

感知机简介

感知机简介 导语感知机简单逻辑电路实现权重和配置与/或/与非与门实现与非门实现或门实现 线/非线性单/多层感知机异或 总结参考文献 导语 学习感知机有助于更好的理解深度学习的神经元、权重等概念,感知机的结构和概念很简单,只要学过基本线性代数、数…

Web 安全基础理论

Web 安全基础理论 培训、环境、资料、考证 公众号:Geek极安云科 网络安全群:624032112 网络系统管理群:223627079 网络建设与运维群:870959784 移动应用开发群:548238632 短视频制作群: 744125867极安云…

Star-CCM+通过将所有部件创建一个区域的方式分配至区域后子区域的分离,子区域材料属性的赋值,以及物理连续体的创建方法介绍

前言 上次介绍了将零部件分配至区域的方法与各个方法之间的区别,本文将继续上次的讲解,将其中的“将所有部件分配至一个区域”的应用进行补充。 如下图所示,按照将所有部件创建一个区域的方式分配至区域后,在区域下就会有一个区域…

Marin说PCB之如何快速打印输出整板的丝印位号图?

当小编我辛辛苦苦加班加点的把手上的板子做到投板评审状态的时候,坐在我旁边的日本同事龟田小郎君说让我把板子上的丝印也要调一下,我当时就急了,这么大的板子,将近1W多PIN 了都,光调丝印都要老半天啊,而且…

【ytb数据采集器】按关键词批量爬取视频数据,界面软件更适合文科生!

一、背景介绍 1.1 爬取目标 用Python独立开发的爬虫工具,作用是:通过搜索关键词采集油管的搜索结果,包含14个关键字段:关键词,页码,视频标题,视频id,视频链接,发布时间,视频时长,频道名称,频道id,频道链接,播放数,点赞数,评论数…

MATLAB 点云随机赋色 (68)

MATLAB 点云随机赋色 (68) 一、算法介绍二、算法介绍1.代码2.结果三、数据链接一、算法介绍 读取的点云本身带有颜色信息,有时我们需要为每个点随机赋予一种颜色,下面是具体效果和实现代码,以及使用的数据: 二、算法介绍 1.代码 代码如下(示例): % 读取点云文件 f…

linux中进程相关概念(一)

什么是程序,什么是进程,有什么区别? 程序是静态的概念,当我们使用gcc xxx.c -o pro进行编译时,产生的pro文件,就是一个程序。 进程是程序的一次运行活动,通俗点就是说程序跑起来了就是进程。 …

TypeScript学习日志-第二十一天(声明文件d.ts)

声明文件d.ts 在使用 Typescript 并使用第三方库 的时候 我们会发现会有很多的提示或补全,这都是声明文件起的作用,但是有写冷门的第三方库是没有声明文件的,这时候引用就会报错,我们就使用 express 库作为例子来展示一下&#x…

马蹄集oj赛(双周赛第二十六次)

目录 斐波那契数列的组合 三国杀 数列分段 小码哥的跳棋游戏新编 能量供应 小码哥爱数字 最小串 小船过河 摘果子 泼墨淋漓 很重的枪 小码哥的布阵指挥 斐波那契数列的组合 #include<bits/stdc.h> using namespace std;// 斐波那契数列 1 1 2 3 5 8 13 21 34…

pytorch加载模型出现错误

大概的错误长下面这样&#xff1a; 问题出现的原因&#xff1a; ​很明显&#xff0c;我就是犯了第一种错误。 网上的修改方法&#xff1a; 我觉得按道理哈&#xff0c;确实&#xff0c;蓝色部分应该是可以把问题解决了的​。​但是我没有解决&#xff0c;因为我犯了另外一个错…

[Linux]如何在Ubuntu 22.04系統安裝Node-red?

Node-red是一個建立在Node.js上的視覺化程式設計工具&#xff0c;其常見的應用情境為建置或轉換各項硬體之間的通信協定的物聯網或工聯網場域&#xff0c;其可藉由設置來安裝第三方應用模組來建置多樣的通信協定節點&#xff0c;包含modbus in/out, mqtt in/out, websocket in/…