基于随机森林的房价预测(boston住房数据集)

这篇具有很好参考价值的文章主要介绍了基于随机森林的房价预测(boston住房数据集)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、随机森林的简单介绍

二、数据集

        boston住房数据集下载链接:

三、数据预处理

1)加载住房数据集

2)绘制散点图

3)绘制关联矩阵

4)划分训练集和测试集

四、随机森林回归模型建立

1)建立随机森林回归模型

2)模型预测

五、结果及分析

1)模型性能评估

2)绘制残差图

六、全部代码


一、随机森林的简单介绍

        随机森林是多个回归决策树的集合。相对于回归决策树,随机森林有以下几个优点:

        (1)由于建立了多个决策树,因此随机森林可以降低单个决策树异常值带来的影响,预测结果更准确。

        (2)回归决策树采用了训练集的所有特征和样本,而随机森林采用训练集的部分特征构建多个决策树,相对于决策树回归降低了过拟合的可能性。

        相对于回归决策树,随机森林存在以下缺点:

        (1)随机森林的计算量相对于决策树更大。

        (2)由于采用训练集的部分特征构建多个决策树,随机森林可能存在部分数据没有被训练到的问题。

二、数据集

        boston住房数据集下载链接:

        链接:https://pan.baidu.com/s/1I4Ko-o0J-rX4hlacPP1VsA?pwd=oqdj 
        提取码:oqdj      

        如果要查看住房数据集的所有内容,可以去下面这个网站:

UCI Machine Learning Repository: Data SetsUCI Machine Learning Repository: Data SetsUCI Machine Learning Repository: Data Sets

        住房数据集包含了由哈里斯和鲁宾菲尔德于1978年收集的关于波士顿郊区住房的信息。数据集中包含506个房屋样本的价格信息以及14个相关特征。这些特征如下:

  1. CRIM:城镇人均犯罪率
  2. ZN:住宅用地超过25000平方英尺的比例
  3. INDUS:城镇非零售营业面积占比
  4. CHAS:查尔斯河亚变量(如果临河有大片土地则为1;否则为0)
  5. NOX:一氧化氮浓度(千万分之一)
  6. RM:平均每户的房间数
  7. AGE:1940年以前建成的自用住房比例
  8. DIS:到五个波士顿就业中心的加权距离
  9. RAD:辐射可达的公路的指数
  10. TAX:每10,000美元的全额财产的税率
  11. PTRATIO:城镇师生比例
  12. B:1000人种非裔美国人的比例
  13. LSTAT:地位较低人口的百分比
  14. MEDV:自住房中位价(以千美元为单位)

        在这里,将把MEDV(自住房中位价)作为目标变量,从剩余的特征中选取一个或多个特征作为解释变量,分析解释变量与目标变量之间的关系并建立回归模型。

三、数据预处理

1)加载住房数据集

# 数据预处理

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

df = pd.read_csv('.\housing.data', header=None, sep='\s+')
df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

2)绘制散点图

        在建立模型之前,需要对数据进行分析,分析数据中可能与房价存在相关关系的特征。使用比较普遍的主要是采用数据可视化的方法,绘制散点图矩阵和关联矩阵。数据集有13个特征,由于空间的限制,此处选择5个特征绘制散点图,读者可自行绘制包含13个特征的散点图,采用Seaborn图形可视化Python包绘制散点图。

import seaborn as sns
import matplotlib.pyplot as plt
cols = ['LSTAT', 'INDUS', 'NOX', 'RM', 'MEDV']
sns.pairplot(df[cols], height=2.5) # 绘制 df 数据框对象中的 'LSTAT', 'INDUS', 'NOX', 'RM', 'MEDV' 这几个变量的两两关系的散点图
plt.tight_layout()
plt.show()

基于随机森林的房价预测(boston住房数据集)

3)绘制关联矩阵

        根据散点图可以可视化LSTAT、INDUS、NOX、RM和MEDV五个特征之间的关系,例如MEDV与RM之间可能存在一种线性关系、MEDV与LSTAT之间可能存在一种非线性关系。

        为了更准确地分析特征间的相关性,接下来进一步绘制关联矩阵,关联矩阵的取值范围为-1到1,越接近1代表特征特征间正相关关系越强,越接近-1代表特征间负相关关系越强。采用Seaborn图形可视化Python包绘制关联矩阵。

# 绘制关联矩阵
import numpy as np
# 将相关系数矩阵以热力图的形式可视化
cm = np.corrcoef(df[cols].values.T)
#  cbar=True 表示显示颜色条,square=True 表示将热力图的宽高设置为相等,annot_kws={'size':15} 表示热力图上的数值字体大小为15
hm = sns.heatmap(cm, cbar=True, square=True, fmt='.2f', annot=True, annot_kws={'size':15}, yticklabels=cols, xticklabels=cols)
plt.show()

基于随机森林的房价预测(boston住房数据集)

         根据关联矩阵的信息,可知LSTAT与MEDV之间存在最强的负相关关系,RM与MEDV存在最强的正相关关系。因此,可以选择相关性较强的特征,探索其与MEDV(房价)间的关系。

4)划分训练集和测试集

        这里选择RM与MEDV两个特征建立随机森林回归模型。

# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X = df['RM'].values.reshape(-1, 1)
y = df['MEDV'].values
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.4, random_state=1)

四、随机森林回归模型建立

        数据预处理完成后就可以开始建立随机森林回归模型了。

1)建立随机森林回归模型

# 建立随机森林回归模型
forest = RandomForestRegressor(n_estimators=1000, criterion='squared_error', random_state=1, n_jobs=-1)
forest.fit(X_train,y_train)

2)模型预测

# 模型预测
y_test_pred = forest.predict(X_test)

五、结果及分析

        在建立模型之后,需要对模型进行客观的性能评估。需要注意的是,性能评估是评估模型在未见过的数据上的性能即在测试集上的性能,训练集上评估的性能不能代表模型的性能。

        评估模型性能采用计算均方误差和报告决定系数。

1)模型性能评估

# 模型性能评估
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score

mse_test = mean_squared_error(y_test, y_test_pred)
r2_test = r2_score(y_test, y_test_pred)
print("mse_test={:.2f} r2_test={:.2f}".format(mse_test, r2_test))

运行效果:

mse_test=50.92 r2_test=0.44

2)绘制残差图

        由于特征变量有两个,无法在平面中绘制出模型图像,因此选择绘制残差图来进一步观察模型的性能是一个比较好的选择。

# 绘制残差图
import matplotlib.pyplot as plt
plt.scatter(y_test_pred, y_test_pred-y_test, c='steelblue', edgecolor='white', marker='s', s=35, alpha=0.9,label='test data')
plt.xlabel = ('Predicted values')
plt.ylabel = ('Residuals')
plt.legend(loc='upper left')
plt.hlines(y=0, xmin=-10, xmax=50, lw=2, color='black')
plt.xlim([10,48])
plt.tight_layout()
plt.show()

基于随机森林的房价预测(boston住房数据集)

         残差图显示残差大体分布在中心线附近,离群值较少。文章来源地址https://www.toymoban.com/news/detail-475766.html

六、全部代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score

# Load data
df = pd.read_csv('.\housing.data', header=None, sep='\s+')
df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

# Visualize data
cols = ['LSTAT', 'INDUS', 'NOX', 'RM', 'MEDV']
sns.pairplot(df[cols], height=2.5)
plt.tight_layout()
plt.show()

# Visualize correlation matrix
cm = np.corrcoef(df[cols].values.T)
hm = sns.heatmap(cm, cbar=True, square=True, fmt='.2f', annot=True, annot_kws={'size':15}, yticklabels=cols, xticklabels=cols)
plt.show()

# Prepare data for model
X = df['RM'].values.reshape(-1, 1)
y = df['MEDV'].values
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.4, random_state=1)

# Train model
forest = RandomForestRegressor(n_estimators=1000, criterion='squared_error', random_state=1, n_jobs=-1)
forest.fit(X_train,y_train)

# 模型预测
y_test_pred = forest.predict(X_test)

# 模型性能评估
mse_test = mean_squared_error(y_test, y_test_pred)
r2_test = r2_score(y_test, y_test_pred)
print("mse_test={:.2f} r2_test={:.2f}".format(mse_test, r2_test))

# 绘制残差图
plt.scatter(y_test_pred, y_test_pred-y_test, c='steelblue', edgecolor='white', marker='s', s=35, alpha=0.9,label='test data')
plt.xlabel = ('Predicted values')
plt.ylabel = ('Residuals')
plt.legend(loc='upper left')
plt.hlines(y=0, xmin=-10, xmax=50, lw=2, color='black')
plt.xlim([10,48])
plt.tight_layout()
plt.show()
 
 
                    

到了这里,关于基于随机森林的房价预测(boston住房数据集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习 波士顿房价预测 Boston Housing

    目录 一:前言 二:模型预测(KNN算法) 三:回归模型预测比对 波士顿房价 是机器学习中很常用的一个 解决回归问题 的数据集 数据统计于1978年,包括506个房价样本,每个样本包括波士顿不同郊区房屋的13种特征信息, 比如:住宅房间数、城镇教师和学生比例等 标签值是每栋

    2024年02月03日
    浏览(42)
  • 大数据分析案例-基于随机森林算法构建二手房价格预测模型

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集

    2024年02月09日
    浏览(112)
  • 多元线性回归的python代码实现(基于sklearn的波士顿房价boston数据集为例)

    基于sklearn自带数据集波士顿房价数据集进行多元线性回归算法代码实现,其数据集包括13个特征向量,共计506个样本集。 本文代码实现步骤如下: 1. 获取数据集 2. 数据集切分,老规矩,80%训练,20%测试 3. 数据预处理(本用例尝试过归一化处理,但发现效果不好,不是每一个

    2024年02月06日
    浏览(47)
  • 机器学习基础08-回归算法矩阵分析(基于波士顿房价(Boston House Price)数据集)

    回归算法通常涉及到使用矩阵来表示数据和模型参数。线性回归是最常见的回归算法之一,它可以用矩阵形式来表示。 考虑一个简单的线性回归模型: y = m x + b y = mx + b y = m x + b ,其中 y y y 是因变量, x x x 是自变量, m m m 是斜率, b b b 是截距。将这个模型表示成矩阵形式

    2024年02月14日
    浏览(42)
  • 时间序列预测 | Matlab基于鲸鱼算法优化随机森林(WOA-RF)与随机森林(RF)的时间序列预测对比

    效果一览 文章概述 时间序列预测 | Matlab基于鲸鱼算法优化随机森林(WOA-RF)与随机森林(RF)的时间序列预测对比 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

    2024年02月08日
    浏览(40)
  • 基于随机森林的特征选择-降维-回归预测——附代码

    目录 摘要: 1.随机森林: 2.随机森林的特征选取: 3.基于Matlab自带的随机森林函数进行特征选取具体步骤 (1)加载数据 (2)首先建立随机森林并使用全部特征进行车辆经济性预测 (3)使用随机森林进行特征选择 (4)评价各个特征之间的相关性 (5)使用筛选后的特征进

    2023年04月26日
    浏览(54)
  • 时序预测 | Matlab实现基于RF随机森林的电力负荷预测模型

    效果一览 基本介绍 时序预测 | Matlab实现基于RF随机森林的电力负荷预测模型 电力负荷预测是指通过对历史电力负荷数据分析#

    2024年02月13日
    浏览(38)
  • 基于逻辑回归及随机森林算法的冠心病预测与分析

    本文是一个课程报告,由我和另外一位同学合作完成。自我感觉做的还行决定放上来。  数据集来源:Cardiovascular Study Dataset | Kaggle 目录 1.项目背景... 3 1.1项目说明... 3 1.2需求分析... 3 2.数据挖掘准备... 3 2.1数据字段含义介绍... 3 2.2基础统计分析... 4 3.数据挖掘过程... 5 3.1数据

    2024年01月18日
    浏览(53)
  • 区间预测 | MATLAB实现基于QRF随机森林分位数回归时间序列区间预测模型

    效果一览 基本介绍 1.Matlab实现基于QRF随机森林分位数回归时间序列区间预测模型; 2.基于随机森林回归(QRF)分位数时间序列区间预测,Matlab代码,单变量输入模型,data为数据集(功率数据集),QRFTS为主程序,其余为函数文件,无需运行; 3.评价指标包括:R2、MAE、MAPE、

    2024年02月15日
    浏览(41)
  • 时序预测 | MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价)

    预测结果 基本介绍 MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价) 1.MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价); 2.运行环境Matlab2018及以上,data为数据集,单变量时间序列预测; 3.递归预测未来数据,可以控制预测未来大小的数

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包