随机森林算法 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)

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

  1. Python机器学习笔记——随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

  2. 机器学习:随机森林算法及其实现

    文章目录 随机森林算法描述: 如何对features进行bootstrap? 算法代码实现: 随机森林算法描述: 如何对features进行bootstrap? 我们需要一个feature_bound ...

  3. Educoder 机器学习之随机森林算法 第2关:随机森林算法流程

    第2关:随机森林算法流程 任务描述 本关任务:补充 python 代码,完成 RandomForestClassifier 类中的 fit 和 predict 函数.请不要修改 Begin-End 段 ...

  4. Educoder 机器学习之随机森林算法 第1关:Bagging

    第1关:Bagging 任务描述 相关知识 什么是Bagging Bagging方法如何训练与预测 训练 预测 编程要求 测试说明 任务描述 本关任务:补充 python 代码,完成 BaggingC ...

  5. 利用随机森林算法对红酒数据集进行分类预测+对下载的人口数据集进行分类预测

    随机森林算法可以很好的解决决策树算法的过拟合问题 def j2():'''随机森林可以很好的解决决策树的过拟合问题'''from sklearn.ensemble import RandomFores ...

  6. Educoder 机器学习之随机森林算法 第3关:手写数字识别

    第3关:手写数字识别 任务描述 相关知识 数据简介 RandomForestClassifier 编程要求 测试说明 任务描述 本关任务:使用 sklearn 中的 RandomForestClass ...

  7. 回归算法 经典案例 波士顿房价预测

    回归是统计学中最有力的工具之一.机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型.连续性而定义的.回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在 ...

  8. IBM SPSS Modeler随机森林算法介绍

    在之前的文章<Bagging 或Boosting让你的模型更加优化>中,我们介绍了可以通过Bagging或Boosting技术,使得模型更加稳定和准确率更高,那么今天要介绍的随机森林算法, ...

  9. 机器学习-集成之随机森林算法原理及实战

    Bagging和随机森林 前言 集成学习是目前机器学习的一大热门方向.简单来说,集成学习就是组合许多弱模型以得到一个预测结果比较好的强模型.对于常见的分类问题就是指采用多个分类器对数据集进行预测,把这 ...

最新文章

  1. Python:if判断与while、for循环语句
  2. wxWidgets:文件类和函数
  3. SQL性能优化-查询条件与字段分开执行,union代替in与or,存储过程代替union
  4. 使用 FieldMask 提高 C# gRpc 服务性能
  5. tcp的3次握手4次挥手
  6. 第八十六期:“程序员锁死服务器导致公司倒闭”案正式开庭审理
  7. .NET CORE MYSQL 微信小程序 HTTPS 随笔
  8. 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)
  9. [python] 字典:按key排序或按value排序
  10. [经典php视频]构建正则表达式解析网页中的图像标记img
  11. python爬取大众点评数据_爬虫爬取大众点评评论数
  12. 直升机救援机制的发展
  13. Python 冒泡排序 代码实现
  14. 天天聚财网———2014年最具潜力的P2P借贷平台
  15. vue项目没有router文件夹_router文件夹
  16. shapely 经纬度相关计算
  17. 生鲜配送系统源码功能介绍
  18. java 组织机构代码_JAVA实现社会统一信用代码校验的方法|chu
  19. Web3D展示框架whs.js:基于Three.js的Web3d应用程序的超快3D框架
  20. python爬虫之51job工作搜索

热门文章

  1. C语言读写51单片机01H寄存器,mc-51单片机4种寻址方式
  2. linux区分系统盘和数据盘命令
  3. simulink-2-建模与仿真流程(简单)
  4. java quot;转义为双引号
  5. SHELL编程之CASE语句+函数+正则
  6. Java学习--方法总结
  7. 使用 spring tool suit 搭建 spring boot 项目
  8. android app trifit_Android人脸识别app——基于Face++,MVP+Retofit+RxJava+Dagger高度解耦
  9. EXCEL插件-图表[5]-使用Excel制作全国省市专题地图【图解】
  10. 总说未雨绸缪,一觉醒来窗外已是漫天飞雪