机器学习:决策树回归树实现

news2025/1/12 23:35:53

1、决策树

        是一种树形结构,用于通过一系列的是非问题来预测目标值。在决策树回归中,树的叶子节点代表预测的连续值。

2、数据准备

        收集数据集,并对其进行清洗和预处理。

        将数据集分为特征(X)和目标变量(y)。

# 读取CSV文件中的数据
data = pd.read_csv("spambase.csv")

# 选取特征列和目标列
x = data.iloc[:, :-1]  # 特征数据
y = data.iloc[:, -1]   # 目标数据

3、特征选择

        选择用于构建决策树的特征。这可以通过特征重要性分析来完成。

# 划分训练集和测试集,测试集占20%,随机状态设置为42以保证结果可复现
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

4、构建决策树

        从根节点开始,选择一个特征和该特征的某个值作为分割点。

        基于分割点将数据集分为子集。

        对每个子集重复上述过程,直到满足停止条件(例如,达到最大深度,或子集中的样本数量小于某个阈值)。

6、剪枝

        为了防止过拟合,可以对树进行剪枝。剪枝可以是预剪枝(在树生长之前设置最大深度)或后剪枝(在树生长后删除一些分支)。

# 初始化一个列表来存储不同树深度的交叉验证分数
scores = []

# 定义一个树深度候选列表
c = [5, 6, 7, 8, 9, 10, 11, 12, 13]

# 遍历树深度候选列表
for i in c:
    # 创建一个决策树回归模型,设置最大深度为当前候选深度
    reg = DecisionTreeRegressor(max_depth=i)
    
    # 对训练集进行8折交叉验证,并获取分数
    score = cross_val_score(reg, x_train, y_train, cv=8)
    
    # 计算交叉验证分数的平均值
    score_mean = sum(score) / len(score)
    
    # 将平均分数添加到分数列表中
    scores.append(score_mean)

# 使用分数列表中的最大值找到最佳树深度
best_c = c[np.argmax(scores)]

# 使用最佳树深度创建决策树回归模型
reg = DecisionTreeRegressor(max_depth=best_c)

7、训练模型

        使用训练数据集来训练决策树模型。

# 训练模型
reg.fit(x_train, y_train)

8、预测

        使用训练好的模型对新的数据进行预测。

# 使用测试集进行预测
predict_test = reg.predict(x_test)

# 打印模型在测试集上的R^2分数
print(reg.score(x_test, y_test))

9、结果

10、参数调整

        根据模型评估的结果,调整模型参数以优化性能。

        tree.DecisionTreeRegressor(criterion=’mse’splitter=’best’max_depth=Nonemin_samples_split=2min_samples_leaf=1min_weight_fraction_leaf=0.0max_features=Nonerandom_state=Nonemax_leaf_nodes=Nonemin_impurity_decrease=0.0min_impurity_split=Nonepresort=False)

1.criterion:节点分裂依据。默认:mse,可选择·mae(平均绝对误差)->使用绝对值。

2.splitter:默认best,表示以最优的方式切分节点。决定了树构建过程中的节点分裂策略。值为'best',意味着在每个节点上,算法会找出最好的分割点来尽量降低信息熵或者减少均方误差。如果设置为'random',则算法会随机选择一个特征进行分裂。

3.max_depth:树的最大深度。过深的树可能导致过拟合。

4. min_samples_split :默认值是2. 分裂一个内部节点需要的最小样本数。

5. min_samples_leaf : 默认值是1,叶子节点最少样本数。

6. max_leaf_nodes:设置最多的叶子节点个数,达到要求就停止分裂【控制过拟合】。

11、完整代码

import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
# 读取CSV文件中的数据
data = pd.read_csv("spambase.csv")

# 选取特征列和目标列
x = data.iloc[:, :-1]  # 特征数据
y = data.iloc[:, -1]  # 目标数据

# 划分训练集和测试集,测试集占20%,随机状态设置为42以保证结果可复现
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# 导入决策树回归模型和交叉验证函数
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import cross_val_score

# 初始化一个列表来存储不同树深度的交叉验证分数
scores = []

# 定义一个树深度候选列表
c = [5, 6, 7, 8, 9, 10, 11, 12, 13]

# 遍历树深度候选列表
for i in c:
    # 创建一个决策树回归模型,设置最大深度为当前候选深度
    reg = DecisionTreeRegressor(max_depth=i)

    # 对训练集进行8折交叉验证,并获取分数
    score = cross_val_score(reg, x_train, y_train, cv=8)

    # 计算交叉验证分数的平均值
    score_mean = sum(score) / len(score)

    # 将平均分数添加到分数列表中
    scores.append(score_mean)

# 使用分数列表中的最大值找到最佳树深度
best_c = c[np.argmax(scores)]

# 使用最佳树深度创建决策树回归模型
reg = DecisionTreeRegressor(max_depth=best_c)

# 训练模型
reg.fit(x_train, y_train)

# 打印最佳树深度
print(best_c)

# 使用测试集进行预测
predict_test = reg.predict(x_test)

# 打印模型在测试集上的R^2分数
print(reg.score(x_test, y_test))

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

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

相关文章

git-20240822

目录 初始化仓库 Git init Git init project --bare 查看提交的记录 git log --prettyoneline 查看当前git远程库地址 git remote -v 查看详细提交记录 git log 撤出暂存区的文件 git reset HEAD file(.代表全部文件) 提交数据到远程仓库 git config --global push.…

4.6算法之贪心_702:Crossing River

题目 702:Crossing River 总时间限制: 1000ms 内存限制: 65536kB 描述 A group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shuttle arrangement must be arranged in order to row the boat…

【TB作品】普中V2,数字时钟万年历显示,音乐闹钟,流水灯,Proteus仿真

文章目录 功能硬件原理图LCD1602独立按键LED灯ds1302蜂鸣器 引脚汇总按键功能code 功能 带闹钟和花样流水灯的LCD数显实时时钟设计(运用DS1302时钟模块,LCD显示,带万年历,时间到响音乐显示花样流水灯) 万年历显示 按…

禹神:三小时快速上手TypeScript,TS速通教程(上篇、中篇、下篇,3合1笔记),根据视频整理

TypeScript快速上手 📚一、TypeScript简介 1.TypeScript由微软开发,是其于JavaScript的一个扩展语言. 2.TypeScript包含了JavaScript的所有内容,即:TypeScript是JavaScript的超集 3.TypeScript增加了:静态奖型检查、接…

Win10安装ChatTTS-2024-cuda10.1

0x00 前言 ChatTTS是专门为对话场景设计的文本转语音模型,例如大语言助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。目前在huggingface中的开源版本为4万小时训练且未SFT的版本。 0x01 准备环境 版本操作系统Win1…

大模型参数高效微调技术总结

基础知识 最近,OpenAI推出的ChatGPT展现出了卓越的性能,引发了大规模语言模型(Large Language Model, LLM)的研究热潮。大规模语言模型的“大”体现在两个方面:模型参数规模大,训练数据规模大。以GPT3为例,GPT3的参数…

springboot集成redis之接口缓存

什么是redis的接口缓存? Redis的接口缓存是一种利用Redis这种内存数据库来存储接口(API)响应数据的技术,以提高应用程序的响应速度和性能。具体来说,当用户请求一个接口时,系统会首先检查Redis缓存中是否已…

windows vs2022 MFC使用webview2嵌入网页

Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎,以在本机应用中显示 web 内容。 一、通过菜单“项目”-“管理NuGet程序包”,下载相关包 二、安装 Microsof…

windows ssh launch Jenkins

一、 windows server2012 ssh launch jenkins 经过一系列测试验证发现,windows server2012始终无法launch到jenkins master。配置ssh之后 [08/21/24 10:08:03] [SSH] Opening SSH connection to 172.xx.xx.xx:18822. [08/21/24 10:08:03] [SSH] WARNING: SSH Host …

DBeaver连接GBase 8s数据库的步骤

最近在学习国产数据库GBase 8s。酷酷一顿操作后,发现自带的 dbaccess 不好用,然后尝试用DBeaver这种图形界面来尝试使用。 本次使用工具: 1、dbeaver-ce-24.1.4 2、GBase 8s Server 8.8 一、搭建环境,官方建议使用的是CentOS 7.3&…

vue 实现批量引入组件

批量引入组件 1.目录示例2.被引入组件示例3.全局注册方法3.1.require.context() 是什么3.2.require.context() 用法 4.使用全局注册方法5.使用 1.目录示例 2.被引入组件示例 注意&#xff1a;必须要有name <template><div>Hkmxdy</div> </template> &l…

【学习笔记】Day 21

一、进度概述 1、机器学习常识19-22&#xff0c;以及相关代码复现 二、详情 19、矩阵分解 矩阵分解是一个纯数学问题&#xff0c;但当给矩阵赋予现实意义后&#xff0c;矩阵分解就成为了使用数学应对机器学习问题的一类典型而巧妙的方法。 在线性回归分析中&#xff…

PaddleNLP 3.0 支持大语言模型开发

huggingface不支持模型并行。张量并行&#xff0c;不满足大规模预训练的需求。 1、组网部分 2、数据流 3、训练器 4、异步高效的模型存储

CV每日论文--2024.7.25

1、Diffusion Models for Monocular Depth Estimation: Overcoming Challenging Conditions 中文标题&#xff1a;单目深度估计的扩散模型&#xff1a;克服具有挑战性的条件 简介&#xff1a;本文提出了一种新颖的方法,旨在解决单张图像深度估计任务中具有挑战性的、超出分布范…

java设计模式--结构型模式

结构性模式&#xff1a;适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09; 充当两个不兼容接口之间的桥梁&#xff0c;属于结构型设计模式。目的是将一个类的接口转换为另一个接口&am…

Numba加速计算(CPU + GPU + prange)

文章目录 加速方法&#xff1a;Numba、CuPy、PyTorch、PyCUDA、Dask、Rapids一、Numba简介二、Numba类型&#xff1a;CPU GPU三、项目实战 —— 数组的每个元素加23.1、使用 python - range 循环计算 —— &#xff08;时耗&#xff1a;137.37 秒&#xff09;3.2、使用 python…

天空卫士五载出海路:让国际数据安全舞台,有我们的身影

在全球化和“一带一路”倡议的推动下&#xff0c;中国企业正加速出海&#xff0c;探索新的增长机会。中国联通联合天空卫士等合作伙伴&#xff0c;推出“安全产业链联合出海计划”&#xff0c;旨在汇聚资源&#xff0c;打造国家级网络安全产业平台&#xff0c;推动出海业务的发…

C# 必备技能—项目打包

目录 前言 准备工作 第一步 第二步 第三步 扩展 总结 最后 前言 在C#开发中&#xff0c;项目打包是一个重要的环节&#xff0c;将你的应用程序及其依赖项组织成一个或多个可以在目标系统上安装和运行的包。 这对于发布应用程序至关重要&#xff0c;因为它确保了最终用…

快9月才开强化❓张宇36讲+1000题速刷指南

很多同学问&#xff0c;基础跟的是张宇老师&#xff0c;但是感觉25版张宇36讲太厚&#xff0c;可不可以不看&#xff0c;换其他老师 当然可以&#xff0c;但是如果你基础跟的是张宇老师&#xff0c;那强化阶段换成其他老师&#xff0c;可能会重复听一些内容&#xff0c;造成时…

手机APP应用移动端身份证识别技术,实现扫描录入身份信息

随着移动互联网的的发展&#xff0c;越来越多的公司都推出了自己的手机APP&#xff0c;这些APP多数都涉及到个人身份证信息的输入认证&#xff08;即实名认证&#xff09;&#xff0c;如果手动去输入身份证号码和姓名&#xff0c;速度非常慢&#xff0c;且用户体验非常差。为了…