基于RandomForestRegressor的波士顿房价回归预测

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: RandomForestRegressor中文叫做随机森林回归模型,是一种常用的集成模型。2018年8月27日笔记sklearn官方英文用户使用指南:https://sklearn.org/user_guide.htmlsklearn翻译中文用户使用指南:http://sklearn.apachecn.org/cn/0.19.0/user_guide.html本文使用的数据集是波士顿房价数据集,可以使用sklearn,datasets库中的load_boston方法直接获取数据。

RandomForestRegressor中文叫做随机森林回归模型,是一种常用的集成模型。

2018年8月27日笔记
sklearn官方英文用户使用指南:https://sklearn.org/user_guide.html
sklearn翻译中文用户使用指南:http://sklearn.apachecn.org/cn/0.19.0/user_guide.html
本文使用的数据集是波士顿房价数据集,可以使用sklearn,datasets库中的load_boston方法直接获取数据。

0.打开jupyter notebook

不知道怎么打开jupyter notebook的朋友请查看我的入门指南文章:https://www.jianshu.com/p/bb0812a70246

1.准备数据

阅读此篇文章的基础是已经阅读了作者的上一篇文章《基于LinearRegression的波士顿房价预测》。
文章链接:https://www.jianshu.com/p/f828eae005a1
加载数据集中的预测目标值。

from sklearn.datasets import load_boston

y = load_boston().target

如果阅读过上一篇文章,读者应该知道特征提取后的数据处理主要是对数据进行分箱,从而产生新的字段。
将数据处理的过程封装成函数,代码如下:

def dataProcessing(df):
    field_cut = {
    'CRIM' : [0,10,20, 100],
    'ZN' : [-1, 5, 18, 20, 40, 80, 86, 100], 
    'INDUS' : [-1, 7, 15, 23, 40],
    'NOX' : [0, 0.51, 0.6, 0.7, 0.8, 1],
    'RM' : [0, 4, 5, 6, 7, 8, 9],
    'AGE' : [0, 60, 80, 100],
    'DIS' : [0, 2, 6, 14],
    'RAD' : [0, 5, 10, 25],
    'TAX' : [0, 200, 400, 500, 800],
    'PTRATIO' : [0, 14, 20, 23],
    'B' : [0, 100, 350, 450],
    'LSTAT' : [0, 5, 10, 20, 40]
    }
    df = df[load_boston().feature_names].copy()
    cut_df = pd.DataFrame()
    for field in field_cut.keys():
        cut_series = pd.cut(df[field], field_cut[field], right=True)
        onehot_df = pd.get_dummies(cut_series, prefix=field)
        cut_df = pd.concat([cut_df, onehot_df], axis=1)
    new_df = pd.concat([df, cut_df], axis=1)
    return new_df

调用函数dataProcessing形成新的特征矩阵,代码如下:

import pandas as pd

df = pd.DataFrame(load_boston().data, columns=load_boston().feature_names)
new_df = dataProcessing(df)
print(new_df.columns)
new_df.head()

上面一段代码的运行结果如下图所示:


img_c2f5dbd6075c0493c8efc1d5cca9e221.png
提取特征后的特征矩阵.png

将特征处理后的特征矩阵赋值给变量X,代码如下:

X = new_df.values

2.清除异常值

波士顿房价预测是kaggle网站上2016年的比赛。
网上有资料显示有部分预测目标异常值为50,所以我们删除具有此异常值的样本。
代码如下:

X = new_df.values
y = load_boston().target
print(X.shape)
X = X[y!=50]
y = y[y!=50]
print(X.shape)

上面一段代码的运行结果如下图所示:


img_bdf0b5690e0bb9db5ddd5a784d34649d.png
image.png

从上图中可以看出,特征矩阵X的行数由506变成了490。

3.决策树回归模型

使用决策树回归模型做回归预测,并使用交叉验证查看模型得分。
调用sklearn.tree库的DecisionTreeRegressor方法实例化模型对象。
调用sklearn.model_selection库的KFold方法实例化交叉验证对象。
调用sklearn.model_selection库的cross_val_score方法做交叉验证。
cross_val_score方法需要4个参数,第1个参数是模型对象,第2个参数是特征矩阵X,第3个参数是预测目标值y,第4个关键字参数cv可以为整数或者交叉验证对象,此处因为样本数只有506个,所以得指定交叉验证对象,而且实例化交叉验证对象的时候,必须设置关键字参数shuffle=True,如果不进行设置,会发生严重的错误,读者可以自己尝试一下。
从官方文档查看cross_val_score方法如何使用的链接:http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score
调用决策树回归模型的代码如下:

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score

randomForest_model = RandomForestRegressor()
kf = KFold(n_splits=5, shuffle=True)
score_ndarray = cross_val_score(randomForest_model, X, y, cv=kf)
print(score_ndarray)
print(score_ndarray.mean())

上面一段代码的运行结果如下:

[0.72204027 0.74381333 0.78099897 0.74281036 0.71886066]
0.741704717235011

4.随机森林回归模型

使用随机森林回归模型做回归预测,并使用交叉验证查看模型得分。
调用sklearn.ensemble库的RandonForestRegressor方法实例化模型对象。
调用sklearn.model_selection库的KFold方法实例化交叉验证对象。
调用sklearn.model_selection库的cross_val_score方法做交叉验证。
随机森林回归模型的代码如下:

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score

randomForest_model = RandomForestRegressor()
kf = KFold(n_splits=5, shuffle=True)
score_ndarray = cross_val_score(randomForest_model, X, y, cv=kf)
print(score_ndarray)
print(score_ndarray.mean())

上面一段代码的运行结果如下:

[0.86489282 0.8010495 0.85862078 0.85851694 0.86895527]
0.8504070609409359

5.结论

随机森林是多个决策树融合的集成模型,按照常理肯定会比单个决策树效果好。
使用随机森林回归模型可以取得较好的回归效果,比使用单个决策树回归模型提升了11%左右的准确率。

目录
相关文章
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
机器学习/深度学习 数据采集 算法
【实验】基于随机森林的气温预测(上)
【实验】基于随机森林的气温预测
1768 0
|
JSON 缓存 应用服务中间件
开源API网关APISIX源码分析(一)
开源API网关APISIX源码分析
700 0
|
机器学习/深度学习 数据采集 算法
机器学习实战:基于sklearn的工业蒸汽量预测
机器学习实战:基于sklearn的工业蒸汽量预测
698 0
|
存储 算法 Cloud Native
Ganos地理网格引擎支撑无人机路径规划能力实践
随着新能源技术的迅猛发展,低空经济已经逐步成为新的战略性新兴产业,但不同于传统的地表活动,低空活动具有立体性、区域性、融合性等特点,这些特点对于如何安全引导低空活动的顺利开展带来了一系列需要解决的技术问题。Ganos地理网格引擎提供了基于网格的路径规划能力,可以使用DEM、DSM、倾斜摄影等数据构建复杂环境下的无人机路径规划应用。
|
11月前
office卸载工具o15-ctrremove.diagcab下载,如何将office2016卸载干净?
o15-ctrremove.diagcab是微软官方推出的Office卸载工具,可彻底清除Office残留文件和注册表项,解决安装或启动异常问题。无需安装,双击运行即可。使用时按提示操作,卸载完成后重启电脑,确保办公软件干净重装。绿色便携,适合需要深度清理Office的用户。
2314 0
|
存储 数据挖掘 数据处理
Pandas 数据筛选:条件过滤
Pandas 是 Python 最常用的数据分析库之一,提供了强大的数据结构和工具。本文从基础到高级,介绍如何使用 Pandas 进行条件过滤,包括单一条件、多个条件过滤、常见问题及解决方案,以及动态和复杂条件过滤的高级用法。希望本文能帮助你更好地利用 Pandas 处理数据。
1509 78
|
机器学习/深度学习 Ubuntu 数据挖掘
在Ubuntu系统安装Anaconda及Python
【7月更文挑战第10天】在Ubuntu上安装Anaconda及Python概述: 1. 访问官网下载适合的Anaconda版本。 2. 终端中运行`bash Anaconda3-xxxx.x-Linux-x86_64.sh`完成安装,需同意协议。 3. 通过`conda --version`验证安装。 4. 可选创建Python环境,如`conda create -n myenv python=3.8`。 5. 激活环境使用`conda activate myenv`。 6. 用`python --version`检查Python版本。
1227 5
|
算法 数据挖掘 索引
Pandas数据排序:单列与多列排序详解
本文介绍了Pandas库中单列和多列排序的方法及常见问题的解决方案。单列排序使用`sort_values()`方法,支持升序和降序排列,并解决了忽略大小写、处理缺失值和索引混乱等问题。多列排序同样使用`sort_values()`,可指定不同列的不同排序方向,解决列名错误和性能优化等问题。掌握这些技巧能提高数据分析效率。
1110 9
|
SQL 数据挖掘 数据处理
不再纠结,一文详解pandas中的map、apply、applymap、groupby、agg...
不再纠结,一文详解pandas中的map、apply、applymap、groupby、agg...
671 1