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

news2025/2/25 2:23:21

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

描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前馈PID控制(热交换器/反应釜温度控制)

如何利用PID进行温度控制请参看下面博客文章: 博途PID 1200/1500PLC PID_Compact比例作用权重b微分作用权重c解读(PI-D控制器 I-PD控制器)_RXXW_Dor的博客-CSDN博客很多人会问PLC自带的PID指令和我们自己设计的PID有什么区别,这个问题要看你和什么PID控制器作对比,PID负反…

python真的如此好吗?

作为一名合格的(准)程序员,必做的一件事是关注编程语言的热度,编程榜代表了编程语言的市场占比变化,它的变化更预示着未来的科技风向和机会! Python霸占榜首 只因它真的很强 Python,年龄可能比…

2023年的深度学习入门指南(5) - HuggingFace Transformers库

2023年的深度学习入门指南(5) - HuggingFace Transformers库 这一节我们来学习下预训练模型的封装库,Hugging Face的Transformers库的使用。Hugging Face的库非常活跃,比如支持LLaDA大规型的类,是在本文开始写作的前一天发布的。 库新到这种…

JavaWeb——锁策略, cas和synchronized优化过程

目录 一、锁策略 1、悲观锁和乐观锁 2、轻量级锁和重量级锁 3、自旋锁和挂起等待锁 4、互斥锁和读写锁 5、可重入锁和不可重入锁 6、公平锁和非公平锁 二、cas和synchronized 优化过程 1、CAS(compare and swap) (1)、原…

企业网站架构部署与优化

系列文章目录 文章目录系列文章目录一、LAMP概述与简介1.LAMP2.各组件的主要作用如下:二、1.编译安装Apache http服务2.编译安装 Mysql 服务3.编译安装 PHP 解析环境总结一、LAMP概述与简介 1.LAMP LAMP架构是目前成熟的企业网站应用模式之一,指的是协…

如何高效建立知识库?

建立知识库是为了更好地管理和传承知识,提高团队的效率和成果。在建立知识库的过程中,需要注意一些关键点,以确保知识库的高效性和可持续性。本文将介绍如何高效建立知识库以及需要注意的事项。 一、建立知识库的步骤 1.明确知识库的目的和…

SpringBoot 默认数据库连接池 HikariCP

目录 引言 1、问题描述 2、SpringBoot默认的数据库连接池 3、HikariCP是什么 4、测试依赖 5、配置文件 5.1、数据库连接参数 5.2、连接池数据基本参数 5.3、连接检查参数 5.4、事务相关参数 5.5、JMX参数 6、HikariCP源码浅析 6.1、HikariConfig--连接池配置的加载…

Observability:使用 OpenTelemetry 和 Elastic 监控 OpenAI API 和 GPT 模型

作者:David Hope ChatGPT 现在很火,它打破了互联网。 作为 ChatGPT 的狂热用户和 ChatGPT 应用程序的开发者,我对这项技术的可能性感到无比兴奋。 我看到的情况是,基于 ChatGPT 的解决方案将呈指数级增长,人们将需要监…

Shiro概述

文章目录1.权限的管理1.1 什么是权限管理1.2 什么是身份认证1.3 什么是授权2.Shiro概述2.1 什么是Shiro2.2 Shiro 与 SpringSecurity 的对比2.3 基本功能3.shiro的核心架构4.shiro中的认证4.1 认证4.2 shiro中认证的关键对象4.3 身份认证流程4.4.登录认证实例4.5 自定义Realm5.…

Python标记数组的连通域

文章目录连通域标记structure参数操作连通域定位连通域连通域标记 通过label函数,可以对数组中的连通区域进行标注,效果如下 from scipy.ndimage import label import numpy as np a np.array([[0,0,1,1,0,0],[0,0,0,1,0,0],[1,1,0,0,1,0],[0,0,0,1,0…

虚拟机里安装ubuntu-23.04-beta-desktop-amd64,开启SSH(换源、备份),配置中文以及中文输入法

一、下载 官网 清华镜像站(推荐) 二、配置虚拟机 【自定义】 点击“下一步”,此处【默认】,再点击“下一步”。 点击“稍后安装操作系统”,再点击“下一步”。 点击“Linux(L)”,版本选择【Ubuntu 64 位】,再点击…

轻量级网页RSS阅读器selfoss

什么是 selfoss ? selfoss 是一个多用途的 RSS 阅读器和提要聚合 Web 应用程序。它使您可以在一个地方轻松关注来自不同网站、社交网络和其他平台的更新。它是用 PHP 编写的,基本上可以让您在任何地方运行它。 安装 在群晖上以 Docker 方式安装。 在注…

【前沿技术】问答pk【ChatGPT Vs Notion AI Vs BAT AI 】

目录 写在前面 问题: 1 ChatGPT 1.1 截图 ​1.2 文字版 2 Notion AI 2.1 截图 2.2 文字版 3 BAT AI 3.1 截图 3.2 文字版 总结 序言 所有幸运和巧合的事,要么是上天注定,要么是一个人偷偷的在努力。 突发奇想,问三个…

机器学习---聚类算法

目录【写在前面】1、确认安装有scikit-learn库2、使用 make _ classification ()建立数据集3、使用模型进行分类头文件汇总亲和力传播聚合聚类BIRCH 聚类DBSCAN【本人的毕业设计系统中有用到】K-均值高斯混合模型【写在最后】【写在前面】 sklearn和scikit-learn: …

软件测试需要学什么

软件测试近些年也是比较热门的行业,薪资高、入门门槛低,让很多开发人员想纷纷加入软件开发这个行业,想要成为这一岗位的一员,想要进入软件测试行业,他们需要学习什么呢? 软件测试需要学习的还挺多的&#…

Flowable开源版和Flowable商业版有什么区别?

Flowable除了提供开源版本flowable-engine,它还提供了一系列基于Flowable引擎的快速、现代和完全可定制的企业产品(商业收费):Flowable Work、Flowable Orchestrate和Flowable Engage。Flowable的开源版本和商业版本有什么区别&am…

【产线事故】分享生产线事故发生的一次OOM

文章目录前言OutOfMemoryError出现的原因常见堆内存溢出的几种情况现象分析Mybatis源码分析情景复现总结前言 继上次线上CPU出现了报警,这次服务又开始整活了,风平浪静了没几天,看生产日志服务的运行的时候,频繁的出现OutOfMemor…

接口自动化测试如何做?测试老鸟总结,接口测试数据构造大全......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 接口参数的数据获取…

Linux复习 / 线程相关----线程概念与控制 QA梳理

文章目录前言Q&A线程概念Q:线程和进程的区别?(为什么要有线程,从进程的角度说明这个问题)Q:Linux是如何设计线程的?Q:学习了线程后,你能说说进程和线程最大的区别是什…

博客系统(后端编程)

这里还是这四个页面: 博客列表页 博客详情页 登录页 博客编辑页 一、准备工作: 1.引入依赖 引入mysql,servlet,jackson的依赖,并且把之前的前端页面拷贝进去. 2.创建目录 并且把相关代码复制进去. 此时目录就完成了!!! 3.复制前端代码 直接ctrlv我们之前的前端代码到web…