数据集:波士顿地区房价预测

数据集:波士顿地区房价预测

数据集下载地址
本文以线性回归模型预测为主

1. 数据集说明

变量名变量描述
CRIM城镇人均犯罪率
ZN住宅地超过25000平方英尺的比例
INDUS城镇非零售商用土地的比例
CHAS查理斯河空变量(如果边界是河流,则为1,否则为0)
NOX一氧化碳浓度
RM住宅平均房间数
AGE1940年之前建成的自用房屋比例
DIS到波士顿五个中心区区域的加权距离
RAD辐射性公路的接近指数
TAX每10000美元的全值财产产税率
PTRATIO城镇师生比例
B城镇中黑人的比例
LSTAT人口中地位低下者的比例
target自住房的平均房价,以千美元计

2. 获取数据集

# 导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 导入数据
Boston = pd.read_csv('波士顿房价数据集.csv')
head = Boston.head()

结果
在这里插入图片描述

3. 数据探索

# 采用info查看数据集信息
Boston.info()

结果

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 506 entries, 0 to 505
Data columns (total 14 columns):#   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  0   CRIM     506 non-null    float641   ZN       506 non-null    float642   INDUS    506 non-null    float643   CHAS     506 non-null    int64  4   NOX      506 non-null    float645   RM       506 non-null    float646   AGE      506 non-null    float647   DIS      506 non-null    float648   RAD      506 non-null    int64  9   TAX      506 non-null    int64  10  PTRATIO  506 non-null    float6411  B        506 non-null    float6412  LSTAT    506 non-null    float6413  target   506 non-null    float64
dtypes: float64(11), int64(3)
memory usage: 55.5 KB

结论
数据总共有506行,14个变量,而且这14个变量都有506个非空的float64类型的数值,即所有变量没有空值。

3.1 描述性统计分析

# 描述性统计分析
describe = Boston.describe().T
print(describe)

结果
在这里插入图片描述

结论
没有发现异常情况,但是可能有变量存在极端值的情况,会直接影响后续模型的开发,所以需要通过散点图直接看各个自变量与因变量的关系。

3.2 散点图分析

3.2.1 绘制犯罪率与房价散点图

# 散点图分析
def drawing(x,y,xlabel):plt.scatter(x,y)plt.title('%s - House Prices'% xlabel)plt.xlabel(xlabel)plt.ylabel('House Prices')plt.yticks(range(0,60,5))plt.grid()plt.show()# 绘制变量CRIM和因变量的散点图
drawing(Boston['CRIM'],Boston['target'],'Urban Per Crime Rate')

图示
在这里插入图片描述

结论
从散点图的数据分布可以看出,房价基本和犯罪率呈负相关的关系,高房价的房屋都集中在低犯罪率地区,如果城镇人均犯罪率超过20%的情况,房价最高不高于20。

3.2.2 绘制其他所有自变量与因变量target的散点图

plt.figure(figsize=(15,10.5))
plot_count = 1
for feature in list(Boston.columns)[1:13]:plt.subplot(3,4,plot_count)plt.scatter(Boston[feature],Boston['target'])plt.xlabel(feature.replace('_',' ').title())plt.ylabel('target')plot_count += 1
plt.show()

图示
在这里插入图片描述

结论

  • ZN表示住宅用地所占比例,从散点图可以看出,其与因变量target并没有明显的线性关系
  • INDUS表示城镇中非商业用地所占比例,当城镇中非商业用地所占比例处于(0,5)区间的情况下,房价不低于15
  • CHAS表示地产是否处于查尔斯河边,1表示在河边,0表示不在河边,地产不在查尔斯河边的情况下,房价处于(5,55)区间,地产在查尔斯河边的情况下,房价最低不低于10
  • NOX表示一氧化碳的浓度,整体看NOX与因变量target具有负的相关关系
  • RM表示每栋住宅的房间数,很明显两者之间存在较强的线性关系。
  • AGE表示1940年之前建成的业主自住单位的占比,自住单位的占比处于(0,60)的情况下,房价最底不会低于15.
  • DIS表示距离5个波士顿就业中心的平均距离,一般来说距离就业中心近则上下班距离近,人更愿意住在上下班距离近的地方,根据市场规律,需求高则房价会高,从散点图的数据分布来看,整体与因变量target呈负的相关关系。
  • RAD表示距离高速公路的接近指数,绝大多数房价高于30的房产,都集中在距离高速公路的接近指数低的地区。
  • TAX表示每一万美元的不动产产税率,在税率大于600的情况下,房价会低于10。
  • PTRATIO表示城镇中学生教师比例,学生教师比例小于14的情况下,房价最低不低于20,绝大部分高于30,只有在学生教师比例大于20的情况下,房价会低于10,绝大部分不高于30.
  • B表示城镇中黑人比例,在黑人比例高于350的地区,房价会高于30.
  • LSTAT表示低收入阶层占比,从散点图看,很明显与因变量target具有负的相关关系。

3.3 相关性分析

由于数据集中有很多个变量,我们不希望用所有变量来训练我们的模型,从散点图的数据分布上可以了解它们并不都是相关的,相反,我们希望选择那些直接影响因变量的变量来训练模型,为此,可以使用corr函数来计算变量之间的相关系数,以便判断变量之间的相关程度。

# 相关系数计算
corr = Boston.corr()
print(corr)# 绘制相关矩阵图形
import seaborn as sn
varcorr = Boston[Boston.columns].corr()
mask = np.array(varcorr)
mask[np.tril_indices_from(mask)] = False
sn.heatmap(varcorr,mask=mask,vmax=0.8,square=True,annot=False)

图示
在这里插入图片描述
热力图
在这里插入图片描述
结论
与因变量target相关程度最高的三个变量是LSTAT、RM、PTRATIO,通过如下程序获取相关程度最大的变量列表:

# 获取相关程度最大的三个变量
print(Boston.corr().abs().nlargest(4,'target').index)

结果

Index(['target', 'LSTAT', 'RM', 'PTRATIO'], dtype='object')

根据变量之间相关程度的结果,我们可以选取上述三个自变量进入模型训练之中。

4. 建立模型

首先我们创建两个数据帧X和Y,其中数据帧X将包含LSTAT、RM、PTRATIO变量,而数据帧将包含因变量target:

# 创建两个数据帧X和Y
X = pd.DataFrame(np.c_[Boston['LSTAT'],Boston['RM'],Boston['PTRATIO']],columns=['LSTAT','RM','PTRATIO'])
Y = Boston['target']

对数据集进行分割,其中的80%用于训练模型,其他20%用于测试模型效果:

# 对数据集进行分割
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state=5)

直接调用sklearn中的线性回归包进行模型拟合:

# 调用线性回归库进行模型拟合
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train,y_train)

打印模型的截距:

# 打印模型的截距
print(model.intercept_)

结果

23.68107026871482

打印参数的估计系数:

# 打印出参数的估计系数
coeffcients = pd.DataFrame([X_train.columns,model.coef_]).T
coeffcients = coeffcients.rename(columns={0:'Attribute',1:'Coeffcients'})

结果
在这里插入图片描述
得到线性回归方程如下:
t a r g e t = 23.68107026871482 − 0.646971 × L S T A T + 3.91693 × R M − 0.954833 × P T R A T I O target=23.68107026871482-0.646971 \times LSTAT+3.91693 \times RM-0.954833 \times PTRATIO target=23.681070268714820.646971×LSTAT+3.91693×RM0.954833×PTRATIO

5. 模型评估

5.1 R方检验

模型拟合完成之后,可以对模型进行测试评估,为了了解拟合的模型的效果,可以使用R方进行衡量,R方主要用来评估数据与回归数据的拟合程度,R方的值越接近1,则表示该模型拟合得越好:

# 评估模型
print('R-Squared: %.4f'% model.score(X_test, y_test))

结果

R-Squared: 0.6916

从结果可以知道,本次模型训练得到的结果良好。

5.2 散点图检验

# 绘制预测值与实际值的散点图
plt.figure()
price_pred = model.predict(X_test)
plt.scatter(y_test,price_pred)
plt.xlabel('Actual Prices')
plt.ylabel('Predicted Prices')
plt.title('Actual Prices vs Predicted Prices')
plt.show()

图示
在这里插入图片描述

虽然R方的值为0.6916,但是拟合效果不是很好,再仔细观察图的数据分布情况,在实际值为50时有离群点,因此我们需要进一步查看因变量target的直方图,诊断数据分布是否异常:

from scipy import stats
sn.distplot(Boston['target'],hist=True);
fig = plt.figure()
res = stats.probplot(Boston['target'],plot=plt)

因变量的直方图
在这里插入图片描述
正态概率图
在这里插入图片描述

从上述两图可以看出,因变量取值为50时为离散值,较为异常,对拟合模型的效果有重大的影响,所以必须删除取值为50的观测样本,之后在进行模型拟合:

# 删除因变量值为50的点
Boston_new = Boston[Boston['target']<50]
Boston_new.info()
X_new = pd.DataFrame(np.c_[Boston_new['LSTAT'],Boston_new['RM'],Boston_new['PTRATIO']],columns=['LSTAT','RM','PTRATIO'])
y_new = Boston_new['target']
X_new_train,X_new_test,y_new_train,y_new_test = train_test_split(X_new,y_new,test_size = 0.2,random_state=5)
model = LinearRegression()
model.fit(X_new_train,y_new_train)
print('R-Squared: %.4f'% model.score(X_new_test, y_new_test))

结果

R-Squared: 0.7571

数据质量的好坏直接决定模型的最终拟合效果

6. 完整代码

# 导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sn
sn.set()# 从sklearn中导入波士顿房价数据集
# from sklearn.datasets import load_boston
# dataset = load_boston()# # 查看数据集的信息
# print(dataset.data)# # 查看数据集各个变量的名称
# print(dataset.feature_names)Boston = pd.read_csv('波士顿房价数据集.csv')
head = Boston.head()
# 构建表格
# Boston = pd.DataFrame(dataset.data,columns=dataset.feature_names)# 采用info查看数据集信息
Boston.info()# 描述性统计分析
describe = Boston.describe().T
print(describe)# 散点图分析
def drawing(x,y,xlabel):plt.scatter(x,y)plt.title('%s - House Prices'% xlabel)plt.xlabel(xlabel)plt.ylabel('House Prices')plt.yticks(range(0,60,5))plt.grid()plt.show()# 绘制变量CRIM和因变量的散点图
drawing(Boston['CRIM'],Boston['target'],'Urban Per Crime Rate')plt.figure(figsize=(15,10.5))
plot_count = 1
for feature in list(Boston.columns)[1:13]:plt.subplot(3,4,plot_count)plt.scatter(Boston[feature],Boston['target'])plt.xlabel(feature.replace('_',' ').title())plt.ylabel('target')plot_count += 1
plt.show()# 相关系数计算
corr = Boston.corr()
print(corr)# 绘制相关矩阵图形
varcorr = Boston[Boston.columns].corr()
mask = np.array(varcorr)
mask[np.tril_indices_from(mask)] = False
sn.heatmap(varcorr,mask=mask,vmax=0.8,square=True,annot=False)# 获取相关程度最大的三个变量
print(Boston.corr().abs().nlargest(4,'target').index)# 创建两个数据帧X和Y
X = pd.DataFrame(np.c_[Boston['LSTAT'],Boston['RM'],Boston['PTRATIO']],columns=['LSTAT','RM','PTRATIO'])
y = Boston['target']# 对数据集进行分割
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state=5)# 调用线性回归库进行模型拟合
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train,y_train)# 打印模型的截距
print(model.intercept_)# 打印出参数的估计系数
coeffcients = pd.DataFrame([X_train.columns,model.coef_]).T
coeffcients = coeffcients.rename(columns={0:'Attribute',1:'Coeffcients'})# 评估模型
print('R-Squared: %.4f'% model.score(X_test, y_test))# 绘制预测值与实际值的散点图
plt.figure()
price_pred = model.predict(X_test)
plt.scatter(y_test,price_pred)
plt.xlabel('Actual Prices')
plt.ylabel('Predicted Prices')
plt.title('Actual Prices vs Predicted Prices')
plt.show()# 绘制数据分布直方图及正态概率图
from scipy import stats
sn.distplot(Boston['target'],hist=True);
fig = plt.figure()
res = stats.probplot(Boston['target'],plot=plt)# 删除因变量值为50的点
Boston_new = Boston[Boston['target']<50]
Boston_new.info()
X_new = pd.DataFrame(np.c_[Boston_new['LSTAT'],Boston_new['RM'],Boston_new['PTRATIO']],columns=['LSTAT','RM','PTRATIO'])
y_new = Boston_new['target']
X_new_train,X_new_test,y_new_train,y_new_test = train_test_split(X_new,y_new,test_size = 0.2,random_state=5)
model = LinearRegression()
model.fit(X_new_train,y_new_train)
print('R-Squared: %.4f'% model.score(X_new_test, y_new_test))

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

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

相关文章

AI for Science的上半场:人工智能如何重新定义科学研究新范式?

AI发展七十余年&#xff0c;每一技术性突破都将给人类未来开辟新一种可能性。而它与科学研究的深度融合&#xff0c;则会裂变出无数或无穷种可能性。 来源 :36氪 万众瞩目下&#xff0c;今年10月&#xff0c;有着诺贝尔奖“嫡传”之称的诺贝尔化学奖终于揭晓&#xff0c;授予了…

【分享NVIDIA GTC 23大会干货】加速生成式AI在生物学和医疗领域的应用

【分享NVIDIA GTC 23大会干货】加速生成式AI在生物学和医疗领域的应用 1. NVIDIA医疗领域AI计算平台——NVIDIA CLARA2. NVIDIA CLARA医学影像子平台——MONAI3. NVIDIA CLARA医疗设备子平台——Holoscan4. NVIDIA基因组学解决方案Parabricks5. NVIDIA药物研发解决方案6. 个人思…

GTC 2023 万字纪要 | Don‘t Miss This Defining Moment in AI

「Don’t Miss This Defining Moment in AI」 「切勿错过 AI 的决定性时刻」 北京时间 2023 年 3 月 21 日 23:00&#xff0c;「皮衣刀客」黄教主在 GTC 2023 发表主题如上的 Keynote 演讲&#xff0c;并称「这将是我们迄今为止最重要的一次 GTC」&#xff0c;NVIDIA官方 Twi…

「国际科技信息中心SCITIC论坛」细胞,基因和人工智能:探索医学研究的未来...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 随着科技的不断进步&#xff0c;我们现在拥有了许多前所未有的工具和技术&#xff0c;可以更深入地研究和了解人体内部的细胞和基因。人工智能技术的发展&#xff0c;也为医学研究带来了全新的机遇。例如&#…

明天10:00「国际科技信息中心SCITIC论坛」细胞,基因和人工智能:探索医学研究的未来...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 随着科技的不断进步&#xff0c;我们现在拥有了许多前所未有的工具和技术&#xff0c;可以更深入地研究和了解人体内部的细胞和基因。人工智能技术的发展&#xff0c;也为医学研究带来了全新的机遇。例如&#…

Nat. Biotechnol. | 生成式AI在生物科学领域发展迅速

在过去的一年中&#xff0c;人工智能迎来了突破性的技术&#xff0c;它们来自OpenAI的DALL-E2和ChatGPT。 Link: https://openai.com/dall-e-2 Link: https://openai.com/blog/chatgpt 或许你在网络上已经或多或少了解了一些&#xff0c;甚至已经在无意中使用过了这些技术所带来…

OpenAI新模型惊艳了!对话问答能力逆天

编&#xff5c;昕朋 Aeneas源&#xff5c;新智元 OpenAI新模型来了&#xff01;全新对话模型ChatGPT&#xff0c;可以回答用户问题&#xff0c;还能挑出问题的错误之处。面对不懂的问题&#xff0c;还会承认错误并拒绝回答&#xff01; 当人们翘首期待GPT-4时&#xff0c;OpenA…

买股不如买基?Python实现快速追踪基金的收益情况!谁还不是个买基高手?

​ 大家知道&#xff0c;近几年&#xff0c;不少同学都是经由基金进入到股市中的。去年就很流行“买股不如买基”的说话&#xff0c;至于股票和基金到底谁更好&#xff0c;这个仁者见仁智者见智&#xff0c;恐怕一时半会儿也说不清楚。 今天&#xff0c;阳哥给大家分享的主题是…

研报精选230505

目录 【行业230505国信证券】风电or电网产业链周评&#xff08;4月第5周&#xff09;&#xff1a;海风开发资源集中释放&#xff0c;黑色类原材料价格持续下行 【行业230505天风证券】通信AI系列之&#xff1a;人工智能之火点燃算力需求&#xff0c;AI服务器迎投资机遇 【行业2…

你最关心的4个零代码问题,ChatGPT 帮你解答了!

作为人工智能&#xff08;AI&#xff09;新型聊天机器人模型 ChatGPT&#xff0c;刚上线5天就突破100万用户&#xff0c;两个多月全球用户量破亿&#xff0c;不愧为业界最炙热的当红炸子鸡。 ChatGPT 是一种语言生成模型&#xff0c;由 OpenAI 开发和训练。它是基于 Transform…

问ChatGPT:零基础如何学好.Net Core?

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 ChatGPT横空出世&#xff0c;一下子让全球互联网企业都慌了&#xff0c;纷纷表示&#xff1a;马上跟进发布ChatGPT&#xff0c;媒体纷纷报道大有改变教培行业。 下面我们问问ChatGPT&#xff1a;零基础如何学好…

GPT-4刚发布就有手机APP接入,上传照片视频一键解读,还当起了美版知乎的问答bot...

萧箫 发自 凹非寺量子位 | 公众号 QbitAI GPT-4刚发布&#xff0c;就已经有手机应用接入了&#xff01; 只需要上传图像&#xff0c;再用语音提出需求&#xff0c;GPT-4就能帮助视障人士“看清”眼前的世界。 随时随地&#xff0c;实时解读&#xff0c;就像聊天对话一样自然。 …

whisper:robust speech recognition via large-sacle weak supervision

OpenAI Whisper 精读【论文精读45】_哔哩哔哩_bilibili更多论文&#xff1a;https://github.com/mli/paper-reading, 视频播放量 68331、弹幕量 327、点赞数 2332、投硬币枚数 1192、收藏人数 983、转发人数 394, 视频作者 跟李沐学AI, 作者简介 &#xff0c;相关视频&#xff…

《通义听悟能这么用?大佬语音面试音频通义AI总结》

此文章更适用与&#xff1a;有会议记录、直播记录、面试记录的朋友和知识内容博主等 1、把录音视频文件上传到电脑 2、上传音视频入口 3、上传音视频 4、选择语言是否翻译 5、选择是否区分发言人 我这里是某大佬的语音面试音频文件&#xff0c;选择了2人对话。 6、效果展示 总…

强到离谱!2023年必备的21款AI工具

2022年是AI技术大发展的一年&#xff0c;特别是ChatGPT的很空出世&#xff0c;让AI工具迎来大爆发&#xff0c;今天就给大家整理出21款免费且实用的AI工具推荐&#xff0c;无论是做设计还是日常学习工作都能用得到。2023年已经开始&#xff0c;让这些AI工具帮你提升生产效率&am…

《AI上字幕》基于openAI研发的whisper模型,语音(视频)一键转文本/字幕/带时间轴/支持多语言/自带翻译《桌面版教程》

简介&#xff1a; OpenAI的chatGPT非常火爆&#xff0c;其实OpenAI旗下的另一个模型实力也十分强大&#xff0c;它就是开源免费的Whisper语音转文本模型&#xff0c;目前为止它是较为顶尖的语音转文本模型 当前github上也有许多出色的开发者根据此模型开发出桌面版语音转文字应…

用GitChat赚钱的6种方法

先说下GitChat这个平台&#xff0c;其主页是&#xff1a;https://gitbook.cn/ 。 GitChat是针对技术人的知识付费平台&#xff0c;创始人是谢工&#xff0c;中途被CSDN收购&#xff0c;现在属于CSDN&#xff0c;不过依然是以独立品牌在运作。目前已完成和CSDN的衔接&#xff0c…

ChatGPT帮你梳理最全Java多线程编程知识

目录 引言 引入多线程编程的重要性和应用场景 介绍多线程的优势和挑战 什么是多线程&#xff1f; 线程与进程的区别 线程的创建与生命周期管理 线程的创建方式 …

ChatGPT、Midjourney不香了吗,New Bing 已向全球个人开放

文章目录 1. 前言2. 教程3. 开始 Bing AI 以上图片均由Bing AI生成。&#xff08;后文给出第一幅图的关键字&#xff09; 本文没有任何广告&#xff0c;放心食用&#xff0c;并且手把手教你怎么配置new bing&#xff0c;有需要的耐心看完哦&#xff0c;不懂的可私信我~ 1. 前…

胎教级培训手册:两步让ChatGPT成为小红书标题大师

文 / 高扬&#xff08;微信公众号&#xff1a;量子论&#xff09; 上篇介绍了如何编写小红书爆款笔记的内容部分&#xff0c;今天重点介绍给小红书内容起标题。 最近做小红书&#xff0c;我发现一个规律&#xff0c;要想做爆款&#xff0c;除了内容优秀&#xff0c;除了首图亮眼…