【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测

news2024/12/23 4:14:02

随机森林算法 Random Forest Algorithm

  • 随机森林算法
  • 随机森林算法实现波士顿房价预测

随机森林算法

随机森林(Random Forest)算法 是一种 集成学习(Ensemble Learning)方法,它由多个决策树组成,是一种分类、回归和特征选择的机器学习算法。

在随机森林中,每个决策树都是独立地训练的,每棵树的建立都是基于随机选取的 特征子集 和随机选取的 训练样本集

  • 在分类问题中,随机森林采用投票的方式来决定最终分类结果;
  • 在回归问题中,随机森林采用平均值的方式来预测结果。

对于随机森林算法,必须知道的几个概念包括:

  1. 怎样选取的特征子集以及训练样本集;
  2. 我们很清楚决策树如何对分类值做出分类处理,然而决策树如何对连续值做出的分类处理?

对于第一个问题,很好回答和理解,所谓特征子集以及训练样本集,其实就是为了防止森林中所有的决策树的训练集一样,因为如果决策树的所有训练集一样,那就没有意义建造森林了。而抽取的方法有很多,最简单就像从口袋中抽球一样,随机抽出放回;将抽出的球构成训练样本集。

而对于第二个问题,就需要深思熟虑一下,首先需要理解的是:

  • 对于全都是数字的训练集数据特征值,决策树在选取划分特征时通常会采用方差(Variance)或均方差(Mean Squared Error)来衡量特征的重要性,以找到能够最大化减少样本方差划分特征。

  • 对于全都是分类的训练集数据特征,决策树在选取划分特征时通常会采用信息增益(Information Gain)来衡量特征的重要性,所谓最大信息增益,即最大化减少熵的选择。

其次,对于连续型特征,如体重、身高等等,采用二分法进行划分。具体来说,通过在特征值中选择一个分裂点,即可以将整个特征值数组分为两类的点,通常分裂点的选择有两种策略:

  1. 选择中位数:一种常见的选择分裂点的方法是选择特征值的中位数作为分裂点。具体来说,可以按照该特征值从小到大进行排序,然后选择中间位置上的值作为分裂点。
  2. 选择平均值:另一种选择分裂点的方法是选择特征值的平均值作为分裂点。具体来说,可以计算该特征值的平均值,并将其作为分裂点。

然后计算每个属性分裂后的哪个的方差减少值最大,即选择其作为分类选择。

下述内容将围绕随机森林算法实现一个著名的连续值分类问题:即波士顿房价预测。而实现分类问题,即通过随机森林算法预测“鸢尾花”在【机器学习】P24 随机森林算法(1) 实现 “鸢尾花” 预测 中呈现;


随机森林算法实现波士顿房价预测

波士顿房价数据与特征:
波士顿房价数据集是一个经典的回归问题数据集,包含了波士顿地区不同城镇的房屋价格及其相关的属性数据。该数据集共有506个样本,每个样本有13个属性,分别是:

  • CRIM:城镇人均犯罪率
  • ZN:占地面积超过2.5万平方英尺的住宅用地比例
  • INDUS:城镇中非零售营业面积的比例
  • CHAS:查尔斯河虚拟变量(如果是河流,则为1;否则为0)
  • NOX:一氧化氮浓度(每千万分之一)
  • RM:每个住宅的平均房间数
  • AGE:1940年以前建造的自有住房的比例
  • DIS:到波士顿五个就业中心的加权距离
  • RAD:径向公路的可达性指数
  • TAX:每10,000美元的全值财产税率
  • PTRATIO:城镇中的学生与教师比例
  • B:黑人的比例(1000(Bk - 0.63)^ 2),其中Bk是城镇中黑人的比例
  • LSTAT:人口中地位低下者的比例

下面是通过pandas展示前十条数据的代码示例:

import pandas as pd

# 加载波士顿房价数据集
from sklearn.datasets import load_boston
boston = load_boston()

df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target
df.insert(0, "Index", df.index+1)

print(df.head(10).to_string(index=False))

在这里插入图片描述

随机森林预测波士顿房价的操作步骤:

  • 首先导入了需要的库和数据集;
  • 然后将数据集拆分为训练集和测试集;
  • 接下来,创建一个包含10个决策树的随机森林分类器 n_estimators=10,并使用训练集拟合模型;
  • 需要注意的是,因为波士顿房价数据是一个线性回归数据,并非分类数据,所以要使用 RandomForestRegressor
  • 然后使用测试集预测结果,并计算模型的均方误差。
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载 boston 数据集
boston = load_boston()
X, y = boston.data, boston.target

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

# 创建随机森林回归器
rf = RandomForestRegressor(n_estimators=10, random_state=42)

# 使用训练集拟合模型
rf.fit(X_train, y_train)

# # # 获取每个决策树的预测结果
tree_predictions = []
for tree in rf.estimators_:
    tree_predictions.append(tree.predict(X_test))

# 预测测试集
y_pred = rf.predict(X_test)

# # # 打印每个决策树的前十个测试案例的预测结果
for i, tree_prediction in enumerate(tree_predictions):
    print(f"Tree {i} predictions:", tree_prediction[:10])

# # # 打印随机森林的前十个测试案例的预测结果
print("预测结果为:", y_pred[:10])
print("实际结果为:", y_test[:10])

# 计算模型的均方误差
mse = mean_squared_error(y_test, y_pred)
print("MSE:", mse)

在这里插入图片描述

当然,最后可通过输入十三个属性来获取预测的房价:

# 预测房价
new_data = [[0.03, 18, 2.31, 0, 0.54, 6.57, 89.8, 2.5052, 1, 296, 15.3, 394.72, 8.23]]  # 新样本的特征值
predicted_price = rf.predict(new_data)
print("Predicted price:", predicted_price)

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

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

相关文章

【RV1126】移植kaldi实时语音识别

文章目录 算法一、环境1.1 硬件环境--RV1126开发板1.2 交叉编译器1.3 需要Cmake版本大于3.1以上 二、交叉编译sherpa2.1 下载sherpa2.2 编译sherpa2.3 运行测试 三、下载模型四、语音测试4.1 单个语音文件解码测试4.2 开发板上使用alsa架构从MIC说话测试 算法 参考&#xff1a…

Mysql命令大全

一、mysql:连接Mysql数据库 mysql命令用户连接数据库。 mysql命令格式: mysql -h主机地址 -u用户名-p用户密码 连接到本机上的MYSQL 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回…

开放式耳机有什么好处,分享几款知名度高的开放式耳机

开放式耳机是一种通过头骨传递声波的耳机,相比于传统的耳机,开放式耳机不用塞进耳道,而是在耳后的骨头里将声音传递到耳膜。而且因为不塞进耳朵,所以不用担心在使用过程中因为佩戴时间过长而导致的耳朵不适。所以相比于传统耳机来…

Linux-RaiDrive把ubuntu文件远程映射到Windows上

一、准备工作 系统:Ubuntu18.4 使用VMware安装Ubuntu虚拟机和VMware Tools_t_guest的博客-CSDN博客 Windows软件:RaiDrive 链接:https://pan.baidu.com/s/1t9lrC9lM_EXixmKYrQjfDg?pwd05ig 提取码:05ig 二、实操 1.设置语言 …

Ajax XHR readyState

文章目录 AJAX onreadystatechange 事件onreadystatechange 事件使用回调函数 AJAX onreadystatechange 事件 onreadystatechange 事件 当请求被发送到服务器时,我们需要执行一些基于响应的任务。 每当 readyState 改变时,就会触发 onreadystatechange…

记录6年时间3套easyui前端框架主题皮肤美化的设计历程

沉寂了许久,是该发点东西了,要不然2023年都要过去一半了 ! 第一次接触Easyui前端框架,还是在2016年的时候,有个美化easyui界面的需求,自己是设计师,前端知识也只会最基本的html和css样式&#x…

智慧班牌源码,使用springboot框架Java+vue2开发,二次开发方便快捷

智慧校园云平台电子班牌系统源码 智慧校园平台电子班牌系统源码在大数据平台下,对应用系统进行统一,以数据互联软硬结合的特点应用在校园,实现对校园、班级、教师、学生的管理。 智慧校园云平台电子班牌系统源码,使用springboot…

论文笔记:Map-Matching for low-sampling-rate GPS trajectories(ST-matching)

ACM-GIS 2019 1 Intro 将GPS数据和地图路网数据匹配提出全局地图匹配算法ST-matching(类似于HMM的思路) 考虑了道路网络的空间几何和拓扑结构 如果不考虑拓扑关系,直接进行matching的话,由于GPS信号的不准,可能轨迹会…

【Java 数据结构】二叉搜索树的实现

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

怎么将webm格式转换成mp4,3招轻松学

怎么将webm格式转换成mp4?相对于已经广为人知的MP4,还有许多人对于WebM这种视频格式不太熟悉。WebM是一种免费开源的媒体文件格式。虽然Web.目前应用范围越来越广泛,但大家还是更习惯使用MP4,因为mp4是目前最为流行的视频文件格式…

【MySQL】MES中,发货计划取数逻辑

系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读&#xff0…

TryHackMe-CMSpit(boot2root)

CMSpit 你已确定 Web 服务器上安装的 CMS 存在多个漏洞,允许攻击者枚举用户并更改帐户密码。 您的任务是利用这些漏洞并破坏 Web 服务器。 端口扫扫描 循例nmap Web枚举 进80 很明显,cms就是Cockpit, 版本通过查看源代码的js版本可以得知是0.11.1 se…

FPGA/Verilog HDL/AC620零基础入门学习——第一个项目按键控制LED

介绍 最近要考试了,所以我赶紧补习FPGA,我们用的是小梅哥的AC620开发板,软件是Quartus。推荐看这个视频教程:零基础轻松学习FPGA,小梅哥FPGA设计思想与验证方法视频教程 设计步骤 设计定义 用按键控制LED灯的亮灭就…

YOLOv7如何提高目标检测的速度和精度,基于优化算法提高目标检测速度

目录 一、学习率调度二、权重衰减和正则化三、梯度累积和分布式训练1、梯度累积2、分布式训练 四、自适应梯度裁剪 大家好,我是哪吒。 上一篇介绍了YOLOv7如何提高目标检测的速度和精度,基于模型结构提高目标检测速度,本篇介绍一下基于优化算…

xcode历史版本下载

一、背景 较早之前做过一个项目,当时使用swift 3.x开发。 项目结束后就没再有新需求与更新。 但最近呢需要对项目的某些功能进行调整,项目又重新被拾了起来。 我们知道现在的swift 版本已经到了 5.x, 相应的语法上较 3.x版本也有了不小的变化…

从2-3-4树到红黑树原理分析以及C++实现红黑树建树

总结规律: 1、2-3-4树:新增元素2节点合并(节点中只有1个元素)3节点(节点中有2个元素) 红黑树:新增一个红色节点黑色父亲节点上黑下红(2节点---------------不要调整&#…

上班族如何安排时间提高工作效率?

对于上班族来说,合理安排时间可以兼顾生活和工作,不仅能够减少加班次数,还可以提高工作效率,减少工作中的负面情绪。但是有不少小伙伴表示,自己不知道如何安排时间从而提高工作效率,这应该怎么办呢&#xf…

张勇:阿里云是一家云计算产品公司,要坚定走向“产品被集成”

4月26日,在2023阿里云合作伙伴大会上,阿里巴巴董事会主席兼CEO、阿里云智能CEO张勇表示,阿里云的核心定位是一家云计算产品公司,生态是阿里云的根基。让被集成说到做到的核心,是要坚定走向“产品被集成”。 张勇表示&a…

小米13 Ultra:携光前行,追求每一束光的精确还原

“光,是影像的原点”,一切色彩、影调都在于光。我们目之所及的大千世界,皆被光与影一笔一划细细勾勒,为“视”界晕染上或鲜明、或复古、或反差、或梦幻的色调。我们用“光”去描绘、定义“影像”,让一切平凡的事物&…

Notion AI 胜于 ChatGPT ?

去年(2022年)12 月初,在社区中 OpenAI 的 ChatGPT 刚出来就火了一把,当时一度因为访问量太大导致崩溃宕机;最近(2023 年1 月底) ChatGPT 又火了,资本市场新增 ChatGPT 概念&#xff…