线性回归模型之波士顿房价预测
线性回归模型之波士顿房价预测
- 作者介绍
- 一、波士顿房价数据集介绍
- 二、实验步骤
- 1.数据分析
- 2.可视化处理特殊异常特征信息值(共14幅散点图)
- 3.导入线性回归模型进行训练
- 三、实验结果分析
- 附完整代码(2部分)
- 第一部分:数据分析及可视化
- 第二部分:利用线性回归模型预测波士顿房价
作者介绍
周新龙,男,西安工程大学电子信息学院,2019级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:402850713@qq.com
一、波士顿房价数据集介绍
波士顿房价数据集统计的是20世纪70年代中期波士顿郊区房价的中位数,统计了城镇人均犯罪率、不动产税等共计13个指标,506条房价数据,通过统计出的房价,试图能找到那些指标与房价的关系。
数据集中的每一行数据都是对波士顿周边或城镇房价的情况描述,下面对数据集变量进行说明,方便大家理解数据集变量代表的意义。
CRIM: 城镇人均犯罪率
ZN: 住宅用地所占比例
INDUS: 城镇中非住宅用地所占比例
CHAS: 虚拟变量,用于回归分析
NOX: 环保指数
RM: 每栋住宅的房间数
AGE: 1940 年以前建成的自住单位的比例
DIS: 距离 5 个波士顿的就业中心的加权距离
RAD: 距离高速公路的便利指数
TAX: 每一万美元的不动产税率
PTRATIO: 城镇中的教师学生比例
B: 城镇中的黑人比例
LSTAT: 地区中有多少房东属于低收入人群
MEDV: 自住房屋房价中位数(也就是均价)
二、实验步骤
1.数据分析
首先导入数据集,对数据进行分析:
import pandas as pd
import numpy as np
from sklearn.datasets import load_boston # 导入数据集
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
boston = load_boston()
print(boston.feature_names) # 查看boston数据集特征变量
print(boston.data.shape) # 分析数据集样本总数,特征变量总数
v_bos = pd.DataFrame(boston.data) # 查看波士顿数据集前5条数据,查看这13个变量数据情况
print(v_bos.head(5))
根据程序输出结果,查看数据集数据样本总数,与特征变量个数;以及通过数据集前5条数据,查看13个特征变量数据情况。
2.可视化处理特殊异常特征信息值(共14幅散点图)
然后对自变量进行特征分析,并画出散点图,分析特征变量与房价之间的相关性,把不相关的数据进行剔除。
x = boston['data'] # 导入特征变量
y = boston['target'] # 导入目标变量房价
name = boston['feature_names']for i in range(13):plt.figure(figsize=(10, 7))plt.grid()plt.scatter(x[:, i], y, s=5) # 横纵坐标和点的大小plt.title(name[i])print(name[i], np.corrcoef(x[:i]), y)plt.show()
经过分析“房价特征信息图”,将房价大于或者等于50的数据视为异常数据,在划分训练集和测试集之前我们需要先把这些数据从数据集中进行剔除。
plt.figure(figsize=(20, 15))y_major_locator = MultipleLocator(5) # 把y轴的刻度间隔设置为10,并存在变量里ax = plt.gca() # ax为两条坐标轴的实例ax.yaxis.set_major_locator(y_major_locator) # 把y轴的主刻度设置为5的倍数plt.ylim(0, 51)plt.grid()for i in range(len(y)):plt.scatter(i, y[i], s=20)plt.show()
同样通过分析“各个特征信息散点图”,我们可以看到有些特征信息与房价的相关性比较大,有些特征信息与房价的相关性很小,因此需要将不相关特征信息进行剔除,只保留与房价相关性最大的特征信息。
3.导入线性回归模型进行训练
接着通过上述散点图分析,对异常数据进行处理,完成数据的预处理。
最后通过导入线性回归模型搭建波士顿房价预测模型
import numpy as np
from skimage.metrics import mean_squared_error
from sklearn import linear_model
from sklearn.linear_model import LinearRegression # 导入线性模型
from sklearn.datasets import load_boston # 导入数据集
from sklearn.metrics import r2_score # 使用r2_score对模型评估
from sklearn.model_selection import train_test_split # 导入数据集划分模块
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt2
# 线性回归模型
lf = LinearRegression()
lf.fit(x_train, y_train) # 训练数据,学习模型参数
y_predict = lf.predict(x_test) # 预测# 与验证值作比较
error = mean_squared_error(y_test, y_predict).round(5) # 平方差
score = r2_score(y_test, y_predict).round(5) # 相关系数
三、实验结果分析
fig = plt.figure(figsize=(13, 7))
plt.rcParams['font.family'] = "sans-serif"
plt.rcParams['font.sans-serif'] = "SimHei"
plt.rcParams['axes.unicode_minus'] = False # 绘图
plt.plot(range(y_test.shape[0]), y_test, color='red', linewidth=1, linestyle='-')
plt.plot(range(y_test.shape[0]), y_predict, color='blue', linewidth=1, linestyle='dashdot')
plt.legend(['真实值', '预测值'])
plt.title("学号", fontsize=20)
error = "标准差d=" + str(error)+"\n"+"相关指数R^2="+str(score)
plt.xlabel(error, size=18, color="black")
plt.grid()
plt.show()
r2_score()函数可以表示特征模型对特征样本预测的好坏,即确定系数。
根据预测值和真实值的对比图,如果其中线性回归模型的决定系数为0.60,说明线性关系可以解释房价的60%。
plt2.rcParams['font.family'] = "sans-serif"
plt2.rcParams['font.sans-serif'] = "SimHei"
plt2.title('学号', fontsize=24)
xx = np.arange(0, 40)
yy = xx
plt2.xlabel('* truth *', fontsize=14)
plt2.ylabel('* predict *', fontsize=14)
plt2.plot(xx, yy)
plt2.scatter(y_test, y_predict, color='red')
plt2.grid()
plt2.show()
其中,每个点的横坐标表示同一类房屋真实价格,纵坐标表示线性回归模型根据特征预测的结果,当二者值完全相等的时候就会落在红色实线上。所以模型预测得越准确,则点离红色实线越近。
附完整代码(2部分)
第一部分:数据分析及可视化
import pandas as pd
import numpy as np
from sklearn.datasets import load_boston # 导入数据集
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator"""
第一步:首先认识波士顿数据集,分析查看数据集样本总数,特征变量总数。
第二步:然后画出波士顿数据集所有特征变量的散点图,并分析特征变量与房价的影响关系。
"""
boston = load_boston()
print(boston.feature_names) # 查看boston数据集特征变量
print(boston.data.shape) # 分析数据集样本总数,特征变量总数
v_bos = pd.DataFrame(boston.data) # 查看波士顿数据集前5条数据,查看这13个变量数据情况
print(v_bos.head(5))
x = boston['data'] # 导入特征变量
y = boston['target'] # 导入目标变量房价
student = input('房价特征信息图--0;各个特征信息图--1: ') # 输入0代表查看影响房价特征信息图,输入1代表查看各个特征信息图
if str.isdigit(student):b = int(student)if (b <= 1):print('开始画图咯...', end='\t')if (b == 0):plt.figure(figsize=(20, 15))y_major_locator = MultipleLocator(5) # 把y轴的刻度间隔设置为10,并存在变量里ax = plt.gca() # ax为两条坐标轴的实例ax.yaxis.set_major_locator(y_major_locator) # 把y轴的主刻度设置为5的倍数plt.ylim(0, 51)plt.grid()for i in range(len(y)):plt.scatter(i, y[i], s=20)plt.show()else:name = boston['feature_names']for i in range(13):plt.figure(figsize=(10, 7))plt.grid()plt.scatter(x[:, i], y, s=5) # 横纵坐标和点的大小plt.title(name[i])print(name[i], np.corrcoef(x[:i]), y)plt.show()else:print('同学请选择0或者1')else:print('同学请选择0或者1')
第二部分:利用线性回归模型预测波士顿房价
import numpy as np
from skimage.metrics import mean_squared_error
from sklearn import linear_model
from sklearn.linear_model import LinearRegression # 导入线性模型
from sklearn.datasets import load_boston # 导入数据集
from sklearn.metrics import r2_score # 使用r2_score对模型评估
from sklearn.model_selection import train_test_split # 导入数据集划分模块
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt2boston = load_boston()
x = boston['data'] # 影响房价的特征信息数据
y = boston['target'] # 房价
name = boston['feature_names']# 数据处理
unsF = [] # 次要特征下标
for i in range(len(name)):if name[i] == 'RM' or name[i] == 'PTRATIO' or name[i] == 'LSTAT' or name[i] == 'AGE' or name[i] == 'NOX' or name[i] == 'DIS' or name[i] == 'INDUS':continueunsF.append(i)
x = np.delete(x, unsF, axis=1) # 删除次要特征unsT = [] # 房价异常值下标
for i in range(len(y)):if y[i] > 50: # 对房价影响较小的特征信息进行剔除unsT.append(i)
x = np.delete(x, unsT, axis=0) # 删除样本异常值数据
y = np.delete(y, unsT, axis=0) # 删除异常房价# 将数据进行拆分,一份用于训练,一份用于测试和验证
# 测试集大小为30%,防止过拟合
# 这里的random_state就是为了保证程序每次运行都分割一样的训练集和测试集。
# 否则,同样的算法模型在不同的训练集和测试集上的效果不一样。
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)# 线性回归模型
lf = LinearRegression()
lf.fit(x_train, y_train) # 训练数据,学习模型参数
y_predict = lf.predict(x_test) # 预测# 与验证值作比较
error = mean_squared_error(y_test, y_predict).round(5) # 平方差
score = r2_score(y_test, y_predict).round(5) # 相关系数# 绘制真实值和预测值的对比图
fig = plt.figure(figsize=(13, 7))
plt.rcParams['font.family'] = "sans-serif"
plt.rcParams['font.sans-serif'] = "SimHei"
plt.rcParams['axes.unicode_minus'] = False # 绘图
plt.plot(range(y_test.shape[0]), y_test, color='red', linewidth=1, linestyle='-')
plt.plot(range(y_test.shape[0]), y_predict, color='blue', linewidth=1, linestyle='dashdot')
plt.legend(['真实值', '预测值'])
plt.title("学号", fontsize=20)
error = "标准差d=" + str(error)+"\n"+"相关指数R^2="+str(score)
plt.xlabel(error, size=18, color="black")
plt.grid()
plt.show()plt2.rcParams['font.family'] = "sans-serif"
plt2.rcParams['font.sans-serif'] = "SimHei"
plt2.title('学号', fontsize=24)
xx = np.arange(0, 40)
yy = xx
plt2.xlabel('* truth *', fontsize=14)
plt2.ylabel('* predict *', fontsize=14)
plt2.plot(xx, yy)
plt2.scatter(y_test, y_predict, color='red')
plt2.grid()
plt2.show()
线性回归模型之波士顿房价预测相关推荐
- 机器学习入门实践——线性回归模型(波士顿房价预测)
机器学习入门实践--线性回归模型(波士顿房价预测) 一.背景介绍 给定一个大小为 n n n的数据集 { y i , x i 1 , . . . , x i d } i = 1 n {\{y_{i}, ...
- 机器学习线性回归实践,波士顿房价预测,手写梯度下降
波士顿房价预测,手写梯度下降,python实现 数据集介绍 每条数据包含房屋以及房屋周围的详细信息.其中包含城镇犯罪率,一氧化氮浓度,住宅平均房间数,到中心区域的加权距离以及自住房平均房价等等. CR ...
- 一文带你用Python玩转线性回归模型《加利福尼亚房价预测》回归模型评估指标介绍
大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 前言 这 ...
- 波士顿房价预测(TensorFlow2.9实践)
波士顿房价预测(TensorFlow2.9实践) 波士顿房价数据集包括506个样本,每个样本包括12个特征变量和该地区的平均房价.房价(单价)显然和多个特征变量相关,不是单变量线性回归(一元线性回归) ...
- 机器学习(11)线性回归(2)实战 -- 正规方程优化、梯度下降优化(波士顿房价预测)
目录 一.波士顿房价预测(正规方程优化) API 1.获取数据集 2.划分数据集 3.标准化 4. 创建预估器,得到模型 5.模型评估(均方差评估) 代码 二.波士顿房价预测(正规方程优化) API ...
- 线性回归之案例:波士顿房价预测
线性回归之案例:波士顿房价预测 数据介绍 [13个特征值,1个目标值] 给定的这些特征,是专家们得出的影响房价的结果属性.此阶段不需要自己去探究特征是否有用,只需要使用这些特征.到后面量化很多特征 ...
- 使用线性回归实现波士顿房价预测
使用线性回归实现波士顿房价预测 本文不进行线性回归基础知识讲解,只提供三种方法对波士顿房价进行预测,这三种方法分别是: 1.使用正规方程的优化方法对波士顿房价进行预测 2.使用梯度下降的优化方法对波士 ...
- MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测
Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...
- 线性回归算法 从认知到实战内含波士顿房价预测案例
文章目录 2.1 线性回归简介 学习目标 1 线性回归应用场景 2 什么是线性回归 2.1 定义与公式 2.2 线性回归的特征与目标的关系分析 3 小结 2.2 线性回归api初步使用 学习目标 1 ...
- 教你使用百度深度学习框架PaddlePaddle完成波士顿房价预测(新手向)
首先,本文是一篇纯新手向文章,我自己也只能算是入门,有说错的地方欢迎大家批评讨论 目录 一.人工智能.机器学习.深度学习 二.PaddlePaddle(飞桨) 三.波士顿房价预测模型 数据处理 模型设 ...
最新文章
- CentOS6.8下安装MySQL5.5数据库
- 如何 提高企业网站大数据量 效率
- 服务器系统都是64位的吗,云服务器32位跟64位的区别吗
- PHP中this,self,parent的区别
- 模拟CMOS集成电路学习笔记——MOS器件物理基础
- PCkit3.5烧写器直接上手使用方法
- [C# Fundamantal] 类继承简析
- 用jQuery实现9宫格抽奖
- JavaWeb开发了解
- 十大战略工具(5)—— 通用电气矩阵
- STM32 SPI NSS大揭秘
- [SDOI2018]旧试题 题解
- WPF DEV dxc:ChartControl 柱状图
- 快乐的强化学习2——DQN及其实现方法
- C语言0基础全面教程
- 如何查看MDAC版本?
- 电梯怎样用服务器修改变频器参数,电梯变频器设定参数.doc
- 兄弟5340D更换硒鼓单元
- Java、JSP汽车销售管理系统的设计与实现
- **关于idea无限期破解出现的问题**
热门文章
- python爬虫实践——自动登录抽屉新热榜
- excel怎么设置自动计算_最新个税计算Excel模版,含专项扣除 (自动生成),人手一份...
- [框架]高并发中的惊群效应
- 如何在D盘以管理员身份,运行cmd
- [caffe] Long-term Recurrent Convolutional Networks
- 宝宝便秘,这些习惯都是元凶!
- c语言程序设计基本模板,《C语言程序设计基础教程》试讲教案模板
- 测试所用的技术(黑盒、白盒测试等)
- 【UE5】使用快捷键切换编辑器中英文设置
- 12306火车票查询--python