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

2023-11-02

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

描述

波士顿房价数据集统计了波士顿地区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.8326957
 22.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 plt

plt.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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用线性回归构建波士顿房价预测模型 的相关文章

随机推荐

  • url传参特殊字符(#、%、&)处理

    技术标签 url传参 特殊字符 amp 后台获取不到参数 js var str content val str str replace g 25 str str replace g 23 str str replace g 26 var u
  • 使用Spring Gateway为对象存储系统MinIo和kkFileView文档预览增加登录验证

    文章目录 1 kkfileview下载部署 1 1 安装包部署运行 1 1 1 物理机或虚拟机上运行 1 1 2 Docker容器环境环境运行 1 2 接入说明 2 使用Spring Gateway增加登录认证 2 1 网关实现代码 2 2
  • STM32F407的ADC+DMA 的简单使用

    这里以ADC3通道14为例 adc h ifndef adc H define adc H include stm32f4xx conf h ADC GPIO 宏定义 define RHEOSTAT ADC GPIO PORT GPIOF
  • 信号量机制实现进程的互斥、同步、前驱

    1965年 荷兰学者Dijkstra提出了一种卓有成效的实现进程互斥 同步的方法 信号量机制 信号量其实就是一个变量 可以是一个整数 也可以是一个更复杂的变量 可以用信号量来表示系统中某种资源的数量 比如 系统中只有一台打印机 就可以设置一
  • MVC模式下的untiy

    所有类的基类 例如 Object类是所有类的基类 其他任何类型都直接或间接派生自object 你自定义一个类型 那么它自动隐式继承object 迭代的定义 迭代是重复反馈过程的活动 其目的通常是为了逼近所需目标或结果 每一次对过程的重复称为
  • 深度理解取余/取模运算

    日常编程经常会接触到取余 取模运算 那么计算机中取余 取模运算究竟是怎么定义的 P1 四种 取整 方式 数学取整 1 1 向0取整 parseInt 注意接受参数是string 所以调用该方法时存在类型转换 parseInt 3 14159
  • mysql学习记录二、mysql启动停止与登录操作

    一 windows下mysql启动 方式1 在 服务 中手动启动与停止 通过界面操作不做详细说明 方式2 通过命令进行启动与停止 要求 必须通过管理员启动命令提示框 mysql的安装名称为Mysql80 启动mysql net start
  • C语言函数大全-- l 开头的函数

    l 开头的函数 1 labs llabs 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 ldexp ldexpf ldexpl 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 ldiv lldiv 3 1 函数说明 3
  • 参加了阿里云天池的视觉 AI开发者创新应用赛,我学到了什么?

    天池大赛 预选赛 半决赛 初次接触Php的我 遇到了哪些问题 预选赛 非常幸运 我参加了这个比赛 为什么说幸运呢 因为是小破站关注的一个up主推荐的 幸运的是我知道了这个比赛 更幸运的是我参加了这个比赛 虽然没有什么大牛队友 我们也磕磕碰碰
  • IAP下载

    1 概述 前面一篇文章介绍了我们常用的ISP和ICP编程 除了这两种编程方式最为常见的还有一种叫IAP 下面聊一聊IAP的一些细节 IAP In applicating Programing 翻译过来就是在应用编程 即我们常说的在程序运行过
  • 创建vpp主机接口失败的原因和解决方法

    情况1未创建veth接口 报错信息显示没有接口名 解决方法 sudo ip link add name vpp1out type veth peer name vpp1host sudo ip link set dev vpp1out up
  • [信息论与编码理论专题-4]:信道、信道模型与信道容量

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 118559972 目录 第1部
  • Unity-发布GooglePlay的一些注意事项

    关于签名 创建签名 keytool genkey v keystore liufeng keystore alias liufeng keystore keyalg RSA validity 20000 说明 1 keytool是工具名称
  • 前端导出(下载)

    import BASE URL from config 基本路径 根据项目封装情况决定 import axios from axios import store from store import router from router 导出
  • 机器学习:线性回归分析女性身高与体重之间的关系

    机器学习 线性回归分析女性身高与体重之间的关系 作者 i阿极 作者简介 Python领域新星作者 多项比赛获奖者 博主个人首页 如果觉得文章不错或能帮助到你学习 可以点赞 收藏 评论 关注哦 如果有小伙伴需要数据集和学习交流 文章下方有交流
  • Unity基本操作学习

    前言 今天大部分时间花在如何安装unity上面了 装官网版本装了又卸载 卸载又安装 最后在学长的帮助下才完成安装 呜呜呜 一 物体的创建 物体调整及快捷键 常用快捷键 快捷键Q Hand 手形 工具 可以平移整个Scene视图 快捷键W T
  • Python--读写CSV文档

    CSV是英文Comma Separate Values 逗号分隔值 的缩写 顾名思义 文档的内容是由 分隔的一列列的数据构成的 CSV文档是一种编辑方便 可视化效果极佳的数据存储方式 而Python中有着非常强大的库可以处理这种文档 所以
  • 计算机文件丢失系统无法启动,文件损坏或丢失windows无法启动_windows无法启动文件损坏解决方法...

    由于文件损坏或丢失造成windows无法启动 出现这种情况一般是非正常关机或者是病毒破坏或者是加载了你安装的其它软件的文件出问题 一般人就直接重新装系统去解决 但是有些电脑上有重要的数据和程序不能直接去重新安装系统 那么就需要不同的问题处理
  • 简单描述下微信小程序的目录结构

    微信小程序的目录结构通常包括以下主要部分 这是一个典型的微信小程序的目录结构 具体项目可能会有一些变化 但通常都包含类似的核心文件和文件夹 小程序开发者需要按照这个结构组织项目代码和资源 app js 小程序的主入口文件 用于定义小程序的全
  • 使用线性回归构建波士顿房价预测模型

    使用线性回归构建波士顿房价预测模型 描述 波士顿房价数据集统计了波士顿地区506套房屋的特征以及它们的成交价格 这些特征包括周边犯罪率 房间数量 房屋是否靠河 交通便利性 空气质量 房产税率 社区师生比例 即教育水平 周边低收入人口比例等