机器学习项目实践——波士顿房价预测

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

摘要:分类和回归属于机器学习领域有监督学习算法的两种方法,有监督学习是通过已有的训练样本去训练得到一个模型,再使用这个模型将所有的输入映射到相应的输出,若输出结果是离散型称为分类,若输出结果是连续型则称为回归。本项目将利用著名的 boston 房价数据集来介绍简单的回归算法,建立回归模型并通过不断训练提高准确率。

一、问题介绍:

波士顿房屋数据集于1978年开始统计,涵盖了麻省波士顿不同郊区房屋14种特征的信息。本数据集共有506个样本,每个样本有13个特征及标签MEDV
特征信息:
CRIM 城镇人均犯罪率
ZN 占地面积超过2.5万平方英尺的住宅用地比例
INDUS 城镇非零售业务地区的比例
CHAS 查尔斯河虚拟变量 (= 1 如果土地在河边;否则是0)
NOX 一氧化氮浓度(每1000万份)
RM 平均每居民房数
AGE 在1940年之前建成的所有者占用单位的比例
DIS 与五个波士顿就业中心的加权距离
RAD 辐射状公路的可达性指数
TAX 每10,000美元的全额物业税率
PTRATIO 城镇师生比例
B 1000(Bk - 0.63)^2 其中 Bk 是城镇的黑人比例
LSTAT 人口中地位较低人群的百分数
MEDV 以1000美元计算的自有住房的中位数

请解决以下问题:
请用seaborn库绘制所有特征间的相关系数热力图
并对所有特征关于MEDV标签的相关性进行排序
尝试使用相关性最高的3个特征量重建模型,并与原模型进行比较
尝试使用其它多种算法分别建立模型,并比较模型

二、解决思路:

1.导入项目所需要的包:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

2.绘制散点图矩阵:
使用sns库的pairplot()方法绘制的散点图矩阵可以查看数据集内部特征之间的关系,例如可以观察到特征间分布关系以及离群样本。查看特征间的关系,主要是变量两两之间的关系(线性或非线性,有无明显较为相关关系)

features_np = np.array([x[:13] for x in housing_data], np.float32)
labels_np = np.array([x[-1] for x in housing_data], np.float32)
df = pd.DataFrame(housing_data, columns=feature_names)
sns.pairplot(df.dropna(), y_vars=feature_names[-1], x_vars=feature_names[::-1], diag_kind='kde')
plt.show()

散点图如下:
在这里插入图片描述

3.特征之间的相关分析:

fig, ax = plt.subplots(figsize=(15, 1))
corr_data = df.corr().iloc[-1]
corr_data = np.asarray(corr_data).reshape(1, 14)
ax = sns.heatmap(corr_data, cbar=True, annot=True)
plt.show()

特征关系如图:
在这里插入图片描述

4.查看特征值的数据分布区间:

sns.boxplot(data=df.iloc[:, 0:13])
plt.show()

在这里插入图片描述
通过上图分析得出一些结论:
(1)波士顿房价数据中的各特征之间的相关系不大
(2)各特征的取值范围差异太大,甚至不能够在一个画布上充分的展示各属性具体的最大、最小值以及异常值等,需要做归一化处理。
做归一化有以下理由:
(1)过大或过小的数值范围会导致计算时的浮点上溢或下溢。
(2)不同的数值范围会导致不同属性对模型的重要性不同,而这个隐含的假设常常是不合理的。这会对优化的过程造成困难,使训练时间大大的加长。

5.归一化处理:

features_max = housing_data.max(axis=0)
features_min = housing_data.min(axis=0)
features_avg = housing_data.sum(axis=0) / housing_data.shape[0]BATCH_SIZE = 20
def feature_norm(input):f_size = input.shapeoutput_features = np.zeros(f_size, np.float32)for batch_id in range(f_size[0]):for index in range(13):output_features[batch_id][index] = (input[batch_id][index] - features_avg[index]) / (features_max[index] - features_min[index])return output_features#只对属性进行归一化
housing_features = feature_norm(housing_data[:, :13])
#print(feature_trian.shape)
housing_data = np.c_[housing_features, housing_data[:, -1]].astype(np.float32)
#print(training_data[0])#归一化后的train_data,我们看下各属性的情况
features_np = np.array([x[:13] for x in housing_data],np.float32)
labels_np = np.array([x[-1] for x in housing_data],np.float32)
data_np = np.c_[features_np, labels_np]
df = pd.DataFrame(data_np, columns=feature_names)
sns.boxplot(data=df.iloc[:, 0:13])
plt.show()

归一化后得到图像:
在这里插入图片描述

6.利用线性回归模型预测波士顿房价:

# 线性回归模型
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='green', linewidth=1, linestyle='dashdot')
plt.legend(['真实值', '预测值'])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"xx = np.arange(0, 40)
yy = xx
plt.xlabel('ground truth', fontsize=14)
plt.ylabel('infer result', fontsize=14)
plt2.plot(xx, yy)
plt2.scatter(y_test, y_predict, color='green')
plt2.grid()
plt2.show()

所得图像如下:
在这里插入图片描述
在这里插入图片描述

根据预测值和真实值的对比图,其中线性回归模型的决定系数为0.62907,说明线性关系可以解释房价的62.907%。

7.其他模型预测波士顿房价:
岭回归
岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。

from sklearn.linear_model import RidgeCV
rr = RidgeCV(alphas=np.array([.1, .2, .3, .4]))
rr.fit(X_train,y_train)
rr_y_predict = rr.predict(X_test)score_rr = r2_score(y_test,rr_y_predict)
score_rr

在这里插入图片描述

lasso回归:
LASSO是由1996年Robert Tibshirani首次提出,全称Least absolute shrinkage and selection operator。该方法是一种压缩估计。它通过构造一个惩罚函数得到一个较为精炼的模型,使得它压缩一些回归系数,即强制系数绝对值之和小于某个固定值;同时设定一些回归系数为零。因此保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。

lassr = linear_model.Lasso(alpha=.0001)
lassr.fit(X_train,y_train)
lassr_y_predict=lassr.predict(X_test)score_lassr = r2_score(y_test,lassr_y_predict)
print(score_lassr)

在这里插入图片描述

SVR回归

from sklearn.svm import SVR
svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=.1) #高斯核
svr_lin = SVR(kernel='linear', C=100, gamma='auto') #线性核
svr_poly = SVR(kernel='poly', C=100, gamma='auto', degree=3, epsilon=.1,coef0=1) #径向基核函数
svr_rbf_y_predict=svr_rbf.fit(X_train, y_train).predict(X_test)
score_svr_rbf = r2_score(y_test,svr_rbf_y_predict)
svr_lin_y_predict=svr_lin.fit(X_train, y_train).predict(X_test)
score_svr_lin = r2_score(y_test,svr_lin_y_predict)
svr_poly_y_predict=svr_poly.fit(X_train, y_train).predict(X_test)
score_svr_poly = r2_score(y_test,svr_poly_y_predict)

在这里插入图片描述

8.模型可视化:

#绘制真实值和预测值对比图
def draw_infer_result(groud_truths,infer_results):title='Boston'plt.title(title, fontsize=24)x = np.arange(-0.2,2)y = xplt.plot(x, y)plt.xlabel('ground truth', fontsize=14)plt.ylabel('infer result', fontsize=14)plt.scatter(groud_truths, infer_results,color='green',label='training cost')plt.grid()plt.show()draw_infer_result(y_test,lr_y_predict)
draw_infer_result(y_test,rr_y_predict)
draw_infer_result(y_test,lassr_y_predict)
draw_infer_result(y_test,svr_rbf_y_predict)
draw_infer_result(y_test,svr_lin_y_predict)
draw_infer_result(y_test,svr_poly_y_predict)
print("score of lr:",score_lr)
print("score of rr:",score_rr)
print("score of lassr:",score_lassr)
print("score of svr_rbf:",score_svr_rbf)
print("score of svr_lin:",score_svr_lin)
print("score of svr_poly:",score_svr_poly)

波士顿房价预测数据集和相关文档可通过本页面下载:
https://download.csdn.net/download/weixin_47686861/40769250

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

起底网红机器人波士顿动力

关注网易智能,聚焦AI大事件,读懂下一个大时代! 这家“网红”机器人公司又火了。 最近,接连发布的两条波士顿动力机器人的最新视频让不少人感到惊讶,一段是发布于今年10月11日标题为“跑酷阿特拉斯”的视频,…

重磅干货!揭秘波士顿动力背后的专利技术

【导读】本文从波士顿动力背后申请的专利入手,从动力系统、步态分析,详细探讨了波士顿动力机器人背后的技术实现。 波士顿动力四足机器人的发展历程(前世今身) 相比于轮式或履带机器人,波士顿足式机器人具有更强的地形适应能力,身体十分灵活,可以在各种崎岖不平的地面行…

机器学习实战演练 波士顿房价预测与模型评估

介绍数据集: 本数据集共有506个样本,每个样本有13个特征及标签MEDV 特征信息: CRIM 城镇人均犯罪率 ZN 占地面积超过2.5万平方英尺的住宅用地比例 INDUS 城镇非零售业务地区的比例 CHAS 查尔斯河虚拟变量 ( 1 如果土地在河边;否则…

这就是波士顿动力第一款商用产品「机器狗」Spot

波士顿动力 CEO Marc Raibert 告诉《The Verge》称,最近 Spot 正在大量的「概念验证」环境下接受测试,包括包裹递送和监控作业。他表示,尽管商用版 Spot 没有具体的上线日期,但应该会在几个月内与公众见面,并且年底前肯…

波士顿动力9.21亿美元被卖,地主家也养不起网红机器狗

据韩国经济日报消息,消息人士透露在今天上午的董事会上,韩国现代集团确认将以不到一万亿韩元(约9.21亿美元)收购波士顿动力。 消息人士称,为完成波士顿动力收购,现代汽车已聘请高盛(Goldman Sa…

科普分享 | 波士顿动力机器人进化史

我想很多人都看过美国科幻电影系列《终结者》,著名电影杂志《电影周刊》在评选20世纪最值得收藏的一部电影时,此片以最高票数位居第一。科幻是现实对历史的镜像,机器人领域最让人津津乐道的莫过于波士顿动力公司了。 图1 《终结者》剧照 波士…

人工智能与大数据—线性回归之波士顿房价预测

一,首先导入必要的包 1,paddle.fluid--->PaddlePaddle深度学习框架 2,numpy---------->python基本库,用于科学计算 3,os------------------>python的模块,可使用该模块对操作系统进行操作 4&a…

波斯顿动力机器人为啥那么牛逼?

关注星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 原文:1980 - 2022年,波斯顿动力发展历程、机器人产品分类汇总。 视频:位于我的视频号『strongerHuang』中视频专辑《斯顿动力机器人》(第…

思考累了,看看故事:波士顿动力公司大狗系列--SpotMini

2016年6月23日,Boston Dynamics在YouTube发布了他们新一款的机器人SpotMini,截止26日,网上已经有超过200万人观看过这段视频,再加上国内视频的转发,观看量可想而知。这个热门程度有不禁让人想起来今年年初新一代Atlas发…

波士顿动力机器狗在工厂打工的实录火了

博雯 发自 凹非寺量子位 报道 | 公众号 QbitAI 实验室里的波士顿动力狗,跳舞跑酷后空翻,堪称狗界网红,机器界顶流: 但如果出了实验室,开始正经找个厂上班呢? 机器狗的生活就变成了现在这样: 迈着…

开源教程 | 树莓派 DIY 波士顿动力机器狗,立省 53 万 RMB

国外小哥 Michael Romanko 利用树莓派3B,伺服电机,液晶显示器,锂电池,PCA9695控制板打造了一只波士顿动力机器狗,成本不到4000元。 通过三轴身体姿态控制,这样一只树莓派版波士顿动力狗,可以实现…

波士顿动力真的无可企及吗?一步步剖析四足机器人技术(一)

四足机器人运动控制 第一章 序第二章 运动状态姿态控制运动控制 第三章 步态第四章 CPG控制网络介绍CPG模型分类基于HOPF振荡器的CPG单元模型CPG网络控制模型 Tips参考文献 大家可以先看看效果 [四足机器人]开环运动控制测试 第一章 序 足式机器人较传统的四轮式和履带式有着…

自己动手做个DIY波士顿机器狗

我想来整个DIY波士顿机器狗。 中文的介绍: https://www.qbitai.com/2020/08/17572.html 软件安装: https://github.com/mike4192/spotMicro 硬件制作: https://www.thingiverse.com/thing:3445283 中文介绍是这样的: 用树莓派DIY波士顿机器狗,帮你省下50万:教程开…

波士顿仿生机械狗 原理分析

导语:Boston Dynamics 在机器人动力方面堪称翘楚,其由双足或多足机器人组成的机器人天团总是时不时能给我们带来惊喜。上周,Boston Dynamics 又发布了一段视频,并再次推出了一款全新机器人——Handle,这也是Boston Dyn…

数据可视化分析报告这样做,大家都轻松

在BI数据可视化工具上这样做分析报告,智能分析、可视化呈现,拖拉拽点击就能快速完成一份数据可视化分析报告。不仅做分析报告的人轻松了,看报表的也轻松了,毕竟除了能够一眼看懂分析报告,更能够随时随地根据实际需求去…

数据分析-01数据分析之数据可视化(转)

声明:数据分析01-08均来自尚学堂学习内容,文档仅供学习交流使用,已上传github 一、数据分析介绍 什么是数据分析: 百度百科:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和…

一般用哪些工具做大数据可视化分析?

做数据分析这些年来,从刚开始的死磕excel,到现在成为数据分析行业的偷懒大户,使用过的工具还真不少! 这篇分享一些我在可视化工具上的使用心得,由简单到复杂,按照可视化类型一共分为纯统计图表类、GIS地图…

如何做好数据可视化分析?

数据可视化是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。数据可视化的实质是借助图形化手段,清晰有效的传达与沟通信息,使通过数据表达的内容更容易被理解。 那…

数据分析与可视化概述

目录 一、数据分析 二、数据可视化 三、数据分析与可视化常用工具 四、为什么用python进行数据分析与可视化 爬取数据需要 Python 数据分析需要 Python Python 语言简单高效 五、Python 数据分析与可视化常用库 1、Numpy 2、Pandas 3、Matplotlib 4、SciPy 5…

如何实现数据可视化分析?有这个解决方案就够了

在这个数据呈爆炸式增长的时代,每天都有海量数据在产生。如何通过简单的方式实现业务上的分析、计算、交互,并最终呈现出可视化的分析结果,帮助业务人员更好地理解数据的价值,将数据变现,是当前众多企业都需要面对的问…