原来机器学习那么简单——决策树回归

news2024/10/9 21:00:06

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


一、算法介绍

回归树是决策树的一种,用于处理回归问题,即预测连续值的任务。与分类树相比,回归树的目标是预测一个数量的输出。回归树模型通过将特征空间划分为一系列的简单区域来工作。为了做出预测,它使用每个区域内目标变量的平均值。这种方法是决策树理论的一部分,通过递归地将数据集分割成越来越小的子集来构建树。

二、算法原理

构建回归树的过程包括以下几个步骤:

  1. 选择最佳分割特征与点
    回归树通过选择最佳分割特征和分割点来递归地划分数据集。分割的选择基于最小化某种度量标准,通常是均方误差(MSE)。

    均方误差可以定义为:

    M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 MSE = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2 MSE=N1i=1N(yiy^i)2

    其中, y i y_i yi 是样本点的真实值, y ^ i \hat{y}_i y^i 是区域内样本点的平均响应值。

  2. 递归分割
    选择最优分割后,数据集被分为两个子节点。接下来,同样的分割过程应用于每个子节点,递归进行,直到满足停止条件(如达到指定的树的最大深度,或者每个节点的最小样本数)。

  3. 剪枝
    为防止过拟合,需要对生成的树进行剪枝。剪枝通过移除树的部分分支来实现,这些分支对于模型的泛化能力提升没有帮助。常用的剪枝技术包括成本复杂度剪枝。

三、案例分析

此部分还是使用加利福尼亚房屋数据集,该数据集包含20640个样本,每个样本有8个特征,这些特征描述了加利福尼亚地区的房屋和人口统计特点,目标值是房屋的中位数价格。

首先,我们需要加载数据,划分训练集和测试集,然后训练一个回归树模型,并且可视化。最后,我们将评估回归树在测试集上的表现。在评估完模型后,我们可以通过绘制实际房价与预测房价的散点图来直观地展示模型的预测性能。

完整代码如下:

数据准备和回归树模型:

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn import tree
from sklearn.metrics import mean_squared_error

# 加载数据
data = fetch_california_housing()
X = data.data
y = data.target

features = data.feature_names
data_df = pd.DataFrame(X, columns=features)
data_df['Target'] = y  

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

# 创建回归树模型
regressor = DecisionTreeRegressor(max_depth=5, random_state=42)
regressor.fit(X_train, y_train)

模型可视化:

plt.figure(figsize=(20,10))
tree.plot_tree(regressor, filled=True, feature_names=data.feature_names, rounded=True)
plt.show()

模型评估:

# 在测试集上进行预测
y_pred = regressor.predict(X_test)

# 计算并打印MSE
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")

均方误差(MSE): 0.52。

预测结果可视化:

# 绘制实际值与预测值
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.6)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'k--')  # 绘制y=x参考线
plt.xlabel('Actual Price')
plt.ylabel('Predicted Price')
plt.title('Actual vs. Predicted Prices')
plt.show()

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

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

相关文章

[已完结] Authentication Lab —— 靶场笔记合集

Authentication Labhttps://authlab.digi.ninja/ 0x01:Authentication Lab 靶场简介 Authentication Lab 是由 DigiNinja 提供的,一个专注于身份验证和授权漏洞的实验平台。该网站旨在提供一个可以让用户探索和实践各种常见与不常见的身份验证与授权漏…

带你深入浅出设计模式:十、责任链模式:设计模式中的多米诺骨牌效应

此为设计模式第十谈! 用总-分-总的结构和生活化的例子给你讲解设计模式! 码农不易,各位学者学到东西请点赞收藏支持支持! 开始部分: 总:责任链的本质是使多个对象都有机会处理请求,将这些对象…

指针和引用区别

目录 指针 指针类型 野指针 二级指针 Const修饰指针 引用 引用的作用 常引用 引用和指针的对比 引用能够完全替换指针吗? 指针 指针是C语言中的概念,它是指计算机储存内容的地址。指针它的值指向存在电脑储存器中另一个地方的值。通过地址能找…

玩机搞机基本常识-----如何在 Android 中实现默认开启某个功能 修改方法列举

我们有时候需要对安卓系统进行修改。实现其中的某些功能。让用户使用得心应手。节约时间。那么如果要实现系统中的有些功能选项开启或者关闭。就需要对系统有一定的了解。那么在 Android 中实现默认开启某个功能可以通过以下几种方式: 一、在应用的设置中添加选项 …

Chromium 中js Fetch API接口c++代码实现(二)

Chromium 中JavaScript Fetch API接口c代码实现(一)-CSDN博客 接着上一篇继续介绍调用,上函数堆栈。 1、打开http://192.168.8.1/chfs/shared/test/test02.html 此标签进程ID12484, 2、打开vs附加上此进程ID12484 3、点击页面测…

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS(鸿蒙系统),uni-app 提供了特定的支持,允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…

分治算法(7)_归并排序_计算右侧小于当前元素的个数

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 分治算法(7)_归并排序_计算右侧小于当前元素的个数 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论&…

公司防泄密软件哪个好?6款公司内部文件防泄密软件,2024超好用推荐!

企业的核心机密就如同生命之源,然而,数据泄露的风险也随之而来,让不少企业头疼不已。 面对这一挑战,选择一款高效、可靠的防泄密软件显得尤为重要。 那么,公司防泄密软件哪个好? 接下来,就让我…

攻防世界---->[简单] 初识RSA

做题笔记。 下载 是一个.py的文件。 用 Notepad打开瞅瞅。 分析: L (p-1)*(q-1) dgmpy2.invert(e,L) 求逆元快速算出来:invert(e,φ(N)) 求出d值。 n p*q pq p*(q-1) qp q*(p-1) L 【q*(p-1) * p*(q-1)】 // p*q >>> (p-1)*(…

C++关于树的基础知识

首先区分概念 “度为m的树”指的是至少有一个结点的度是m,一定是非空树 “m叉树”指的是允许所有的结点都小于m,且可以是空树 常见考点: 度为m的树的第i层最多有个结点 (对于m叉树也相同) 第一层m的0次方 第二层m的…

如何帮助企业进行有效的专利管理?

专利管理是企业创新发展的重要支撑,有效的专利管理不仅能保护企业的创新成果,还能提升企业的核心竞争力。那么,究竟该如何帮助企业进行有效的专利管理呢?接下来,本文将为您详细解答。 一、专利管理对企业的重要性 1. 保…

[ROS2]解决PyQt5和sip的各种报错问题 stderr: qt_gui_cpp

前言 编译ros环境的时候遇到了qt_gui_cpp各种编译问题,但是鉴于网上解决方法基本没有,故记录下来帮助后来者。整篇文章总结下来就是一句话:PyQt5和sip安装过程或安装版本有问题,需要重新安装。 问题与解决方法 如果PyQt5你是正…

华为OD机试 - 处理器问题(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

一文了解:LLM Dropout

咱们来聊聊,啥样的预测模型才算是好模型?简单来说,就是那种在处理它从没见过的数据时,也能表现得特别棒的模型。老派的泛化理论告诉我们,要想让模型在训练集和测试集上都表现差不多,就得让模型简单点。这个…

以一个B站必剪应用Bug过一下CVSS 4.0评分

Bug的内容就是Mac上的必剪无法完成B站视频上传新手任务。 这个从B站客服那里确认了。 没多大事儿,这是个设备相关的bug,我们也可以认为这样的小bug对用户是无害的,此时评分为0,无影响,但从学习角度出发我们将部分评分提高到L,也就是假设这是个CVE的话,聊一下安全问题。…

为什么推荐你一定要弄懂千门八将108局,学会做局思维的人有多么的厉害?

在纷繁复杂的社会与商业环境中,能够洞悉事物本质、预见趋势并巧妙布局的人,往往能在竞争中脱颖而出,成为时代的弄潮儿。而“千门八将108局”这一古老而深邃的智慧体系,不仅蕴含了中国传统文化中对于策略、心理学、人际交往的深刻理…

Java 集合实现类

Java 集合实现类 ​ Java 提供了一套实现了 Collection 接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的部分实现 序号类描述1AbstractCollection 实现了大部分的集合接口。2AbstractList 继承…

java中日期时间类的api

目录 1. Instant 类 构造方法 1)Instant.now():获取当前时间戳。 常用方法 1)plus(Duration duration) 2)minus(Duration duration) 3)toEpochMilli() 4)ofEpochMilli(long epochMilli) 5)案例:…

网站建设公司哪家好?好的网站建设公司应该有哪些特别之处?

面对众多的网站建设公司,企业该如何选择呢?如何才能避坑呢?本文将探讨好的网站建设公司应该具备的特别之处 案例,这是最直观的表现,一个好的网站建设公司必然拥有为数众多的的案例展示,且这些案例质量高&a…

基于resnet网络【系列】多类别图像识别、迁移学习:猫狗分类实战

目录 1、前言 2、resnet 猫狗分类实战 2.1 训练 2.2 推理 3、更换数据集训练 1、前言 ResNet(残差网络)是一种深度卷积神经网络架构,广泛用于图像分类任务。它是由微软研究院的研究人员于2015年推出的,以其通过使用残差连接…