使用线性回归构建波士顿房价预测模型

描述

波士顿房价数据集统计了波士顿地区506套房屋的特征以及它们的成交价格,这些特征包括周边犯罪率、房间数量、房屋是否靠河、交通便利性、空气质量、房产税率、社区师生比例(即教育水平)、周边低收入人口比例等 。我们的任务是根据上述数据集建立模型,能够预测房屋价格及其走势。

本任务涉及的主要实践内容:

1、 线性回归预测模型的构建

2、 模型的预测与评估

3、 使用matplotlib绘制房价预测曲线

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    matplotlib    3.3.4
    numpy           1.19.5
    pandas          1.1.5
    scikit-learn    0.24.2
    mglearn         0.1.9
    

分析

任务的输出(房价)是个连续值,因此这是一个回归问题,算法的目的是寻找房屋的特征数据和房价之间的规律(即回归函数)。

本任务涉及以下几个环节:

a)加载、查看波士顿房价数据集

b)将数据拆分为训练集与测试集

d)构建线性回归模型,拟合训练数据、

e)预测房价

f)评估模型

g)利用Matplotlib生成房价预测走势曲线

实施

1、加载、查看波士顿房价数据集

from sklearn.datasets import load_boston # 引入load_boston函数
from sklearn.model_selection import train_test_split # 引入数据集拆分函数
from sklearn.linear_model import LinearRegression # 引入LinearRegression类# 加载boston数据集
boston = load_boston()
print(boston.keys()) # 查看boston数据集的组成
print(boston.data.shape) # 查看输入数据的形状-(506套房屋数据,每条数据包含13个特征值)
print(boston.target.shape) # 查看标签数组的形状-(506套房屋的成交价格)
print(boston.feature_names) # 查看特征名称(房屋的13个特征名称)

输出结果:

dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])
(506, 13)
(506,)
['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO''B' 'LSTAT']

通过keys()函数可以查看数据集中有哪些Keys(即数据项),依次查看其数据项。

通过观察,我们可以看到,波士顿数据集的特征数据(data数组)包含506套房屋的数据,有“犯罪率”、“房间数量”、“房屋年龄”、“师生比”等13个特征值,这506套房屋对应的成交价格(即数据的标签)存放在target数组中。我们的任务是基于这506套房屋的交易数据建立一个回归模型,能够对波士顿地区的房价数据进行预测。(即寻找房屋的特征与房价之间的线性规律)

2、数据集拆分

# 将data和target随机拆分为训练集和测试集(test_size=0.25代表25%的数据作为测试集,75%为训练集)
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.25,  random_state=0)
print(X_train.shape, X_test.shape) # 查看拆分结果
print(y_train.shape, y_test.shape)

输出结果:

(379, 13) (127, 13)
(379,) (127,) # 379+127=506

通过scikit-learn中的train_test_split函数将数据集随机拆分成训练集与测试集。注意掌握train_test_split函数的参数含义及返回值定义。另外,在机器学习中,一般用大写X_表示输入数据(即特征数据),小写的y_表示输出数据(即标签)。

3、创建线性回归模型,拟合训练数据

# 创建模型
model = LinearRegression()# 拟合训练数据(即将特征数据和标签数据交给模型去训练)
model.fit(X_train, y_train)# 注意:上面两步也可以合并写成这样
# model = LinearRegression().fit(X_train, y_train)

注意:Scikit-learn中所有模型的使用都是同样的过程。因此,学习机器学习最重要的是在熟悉模型的思想原理、参数及优缺点的前提下,根据任务选择不同的模型来实现。

4、使用模型预测房屋价格

import numpy as np# 预测测试集的输出(即测试集中房屋的房价)
y_pred = model.predict(X_test)
print(y_pred[:10])# 预测前10套房屋的价格# 将预测结果与实际价格做对比
print('\n预测价格:', np.round(y_pred[:10])) # np.round()-四舍五入取整
print('实际价格:', np.round(y_test[:10]))

输出结果:

[10.92635315 34.36995076 30.80593435 43.33525222 19.107834   18.832695722.14409312 20.47370887 36.85094144 17.84471519]预测价格: [11. 34. 31. 43. 19. 19. 22. 20. 37. 18.]
实际价格: [16. 44. 24. 50. 20. 20. 17. 22. 42. 13.]

在Scikit-learn中,模型的预测使用predict方法,但仅看预测结果我们无法得知模型的准确率,所以还需要进行模型的准确性评估。另外,我们还会使用Matplotlib绘图,将房价预测曲线与实际房价曲线做对比,结果一目了然。(Matplotlib是机器学习中不可或缺的可视化利器)

5、评估模型

# 使用score方法评估模型的成绩
train_score = model.score(X_train, y_train) # 获得模型在训练集上的成绩
test_score = model.score(X_test, y_test) # 获得模型在测试集上的成绩
print('Train set score:', train_score)
print('Test set score:', test_score)

输出结果:

Train set score: 0.7697699488741149
Test set score: 0.6354638433202116

Scikit-learn中,模型的评估使用score方法,参数1为输入特征数据,参数2为标签(即实际房价)。本任务没有对数据进行预处理,经过预处理后模型的准确性还会有所提高。数据预处理(缩放)会有一个专门的章节讲述,届时我们会做个对比。

6、使用Matplotlib生成房价预测走势曲线

import matplotlib.pyplot as pltplt.figure(figsize=(10, 4))  # 设置画板尺寸
plt.rcParams['font.sans-serif'] = 'FangSong' # 设置中文字体
plt.title('波士顿房价预测曲线与实际曲线对比图', fontsize=15)
x = range(len(y_test)) # x轴数据plt.plot(x, y_test, color='r', label='实际价格') # 实际价格曲线
plt.plot(x, y_pred, color='g', ls='--', label='预测价格') # 预测价格曲线
plt.legend(fontsize=12, loc=1) # 显示图例
plt.show()

显示结果:

7、使用岭回归(Ridge)建模

LinearRegression(标准线性回归)、Ridge、Lasso都在sklearn.linear_model模块中。Ridge和Lasso回归是在标准线性回归函数中加入正则化项,以降低过拟合现象。

from sklearn.datasets import load_boston # 引入load_boston函数
from sklearn.model_selection import train_test_split # 引入数据集拆分函数
from sklearn.linear_model import Ridge # 引入Ridge模型# 加载boston数据集
boston = load_boston()# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.25, random_state=66)
# 构建模型
model = Ridge(alpha=10).fit(X_train, y_train)# 评估模型
train_score = model.score(X_train, y_train)
test_score = model.score(X_test, y_test)print('train score:{:.2f}'.format(train_score), '\ntest  score:{:.2f}'.format(test_score))

输出结果:

train score:0.70
test  score:0.81

使用线性回归构建波士顿房价预测模型相关推荐

  1. paddlepaddle框架——波士顿房价预测模型(附原始数据)

    波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的"Hello World".和大家对房价的普遍认知相同,波士顿地区的房价受诸多因素影响.该数据集统计了13种可能影响房价的 ...

  2. 使用线性回归实现波士顿房价预测

    使用线性回归实现波士顿房价预测 本文不进行线性回归基础知识讲解,只提供三种方法对波士顿房价进行预测,这三种方法分别是: 1.使用正规方程的优化方法对波士顿房价进行预测 2.使用梯度下降的优化方法对波士 ...

  3. 机器学习(三):基于线性回归对波士顿房价预测

    文章目录 专栏导读 1.线性回归原理 2.实战案例 2.1数据说明 2.2导入必要的库并加载数据集 2.3划分训练集和测试集 2.4创建线性回归模型 2.5模型预测评价 专栏导读 ✍ 作者简介:i阿极 ...

  4. 多远线性回归代码-波士顿房价问题

    对于波士顿房间这种多元线性回归问题,完成了一版代码. 在网上搜索了很多波士顿房价数据,发现免费下载的多是data格式,txt格式,方便大家敲码,我转成了excel格式并且上传到csdn.代码随便拿,整 ...

  5. 【sklearn】线性回归 - 预测波士顿房价

    目的 本文使用Python的sklearn类库,基于对机器学习线性回归算法的理论学习,利用sklearn中集成的波士顿房价数据,以此来对线性回归的理论知识进行一次实践总结. 本文不以预测的准确率为目的 ...

  6. 波士顿房价预测python决策树_机器学习·波士顿房价预测模型

    模型评估与验证 当我们的机器学习模型建立好之后,如何训练数据以获得最优的模型参数,又用什么指标来评价模型的优劣呢?本文以波士顿房价为例,说明如何训练数据以及对模型做评估,辨别模型的优劣. 第一步:导入 ...

  7. python学习笔记 4 - 线性回归、波士顿房价数据分析

    1 什么是机器学习? 给定一组(x(i), y(i)),给定一个模型,将x(i)输入模型后得到y(i)^ 计算y(i)和y(i)^的差距,差距越小,模型越优. 通过不断地优化模型,使得差距越来越小,这 ...

  8. 波士顿房价预测模型源代码

    import matplotlib.pyplot as plt import numpy as np import pandas as pdnp.set_printoptions(threshold= ...

  9. 基于线性回归的波士顿房价预测

    折线图代码 #-*-coding:utf-8-*- import pandas as pd import numpy as np import matplotlib.pyplot as plt #加载 ...

最新文章

  1. 网购切莫小看1毛钱 暗藏信用卡诈骗玄机
  2. Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language
  3. java -cp 和 java -jar 的区别
  4. 照书学WPF之 Dependency Property 1
  5. 文巾解题 981. 基于时间的键值存储
  6. java ConcurrentHashMap 实现原理
  7. docker安装mysql及相关配置、运行细节和常见报错解决方案
  8. eai app_EAI的Spring集成教程
  9. mysql 搭建日志服务器_一、架构01-搭建日志服务器Rsyslog
  10. [vue-cli]vue-cli怎么解决跨域的问题?
  11. 线程加入 java 1615477815
  12. javaScript输出指定的时间格式
  13. 【特色团队采访】慌呀哩团队,用简洁算法达成高效协作
  14. pc 页面在移动端怎么获取放大倍数、_逆冬:移动端排名应该怎么做?两种匹配移动端实战排名干货分享!...
  15. nanomsg实验——pubsub
  16. MacOS安装git
  17. 51Nod 1463
  18. CE修改器入门:精确数值扫描
  19. GIS地图基础知识--入门教程
  20. 解决C++中调用Python脚本的LNK2001错误

热门文章

  1. iOS 设置tabbar 未选中文案颜色不起作用
  2. java三国将星录_最强蜗牛三国将星录武将解锁顺序推荐
  3. 渗透测试之Webshell
  4. 杭电校第十七届程序设计竞赛暨2017省赛集训队选拔赛
  5. Google Earth Engine(GEE) ——多种机器学习方法(随机森林、cart、svm等)进行土地分类(安第斯高原为例)用光谱指数、植被、土壤、雪和烧毁区以及地形指数构建模型
  6. WIN10缺少MSVCR相关的动态库
  7. Auto.js 9版本全分辨率找图
  8. 学习UE4动画蓝图:配置脚部IK
  9. 这些酷酷的文字特效图片,制作真的很简单!
  10. 项目型公司合理的组织结构