利用波士顿房价数据集实现房价预测

文章目录

    • 一、 观察波士顿房价数据并加载数据集
      • 1、加载数据集
    • 二、 特征选择
    • 三、 模型选择
    • 四、 模型训练和测试
      • 1、 训练模型
      • 2、打印线性方程参数
      • 3、模型预测
      • 4、 计算mae、mse
      • 5、 画出学习曲线
    • 五、 模型性能评估和优化
      • 1、 模型优化,考虑用二项式和三项式优化
      • 2、 划分数据集函数
      • 3、定义MAE、MSE函数
      • 4、定义多项式模型函数
      • 5、 训练模型
      • 6、 定义画出学习曲线的函数
      • 7、定义1、2、3次多项式
      • 8、划分数据集
      • 9、训练模型,并打印train score
      • 10、画出学习曲线
    • 六、 结论与分析

一、 观察波士顿房价数据并加载数据集

1、加载数据集

from sklearn.datasets import load_boston
import pandas as pd
import matplotlib.pyplot as plt
import numpy as npboston=load_boston()
df=pd.DataFrame(boston.data,columns=boston.feature_names)
df['target']=boston.target

数据集共506条,包含有13个与房价相关的特征,分别是:

name释义
CRIM城镇人均犯罪率
ZN住宅用地所占比例
INDUS城镇中非住宅用地所占比例
CHAS虚拟变量,用于回归分析
NOX环保指数
RM每栋住宅的房间数
AGE1940 年以前建成的自住单位的比例
DIS距离 5 个波士顿的就业中心的加权距离
RAD距离高速公路的便利指数
TAX每一万美元的不动产税率
PTRATIO城镇中的教师学生比例
B城镇中的黑人比例
LSTAT地区中有多少房东属于低收入人群

2、查看数据项

#查看数据项
df.head()

二、 特征选择

1、 画出各数据项和房价的散点图
2、 根据散点图粗略选择CRIM, RM, LSTAT三个特征值

features=df[['RM','CRIM', 'LSTAT']]
target=df['target']

三、 模型选择

利用多元线性回归模型,其中自变量为数据集中的 feature_names 的维度(13维度),因变量为数据集中的 target 维度(房价)

#数据集划分
split_num=int(len(features)*0.8)
X_train=features[:split_num]
Y_train=target[:split_num]
X_test=features[split_num:]
Y_test=target[split_num:]

设置标签字段,切分数据集:训练集80%,测试集20%

四、 模型训练和测试

1、 训练模型

split_num=int(len(features)*0.8)
X_train=features[:split_num]
Y_train=target[:split_num]
X_test=features[split_num:]
Y_test=target[split_num:]

2、打印线性方程参数

print(model.coef_,model.intercept_)

3、模型预测

preds=model.predict(X_test)

4、 计算mae、mse

def mae_value(y_true,y_pred):n=len(y_true)mae=sum(np.abs(y_true-y_pred))/n
return maedef mse_value(y_true,y_pred):n=len(y_true)mse=sum(np.square(y_true-y_pred))/n
return msemae=mae_value(Y_test.values,preds)
mse=mse_value(Y_test.values,preds)
print("MAE",mae)
print("MSE",mse)

5、 画出学习曲线

from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit
import matplotlib.pyplot as plt
import numpy as np
def plot_learning_curve(plt,estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(.1,1.0,5)):plt.title(title)if ylim is not None:plt.ylim(ylim)plt.xlabel("Training examples")plt.ylabel("Score")train_sizes,train_scores,test_scores=learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)train_scores_mean=np.mean(train_scores,axis=1)train_scores_std=np.std(train_scores,axis=1)test_scores_mean=np.mean(test_scores,axis=1)test_scores_std=np.std(test_scores,axis=1)plt.grid()plt.fill_between(train_sizes,train_scores_mean-train_scores_std,train_scores_mean+train_scores_std,alpha=0.1,color="r")plt.fill_between(train_sizes,test_scores_mean-test_scores_std,test_scores_mean+test_scores_std,alpha=0.1,color="g")plt.plot(train_sizes,train_scores_mean,'o--',color="r",label="Training scores")plt.plot(train_sizes,test_scores_mean,'o-',color="g",label="Cross-validation score")plt.legend(loc="best")return pltcv=ShuffleSplit(n_splits=10,test_size=0.2,random_state=0)
plt.figure(figsize=(10,6))
plot_learning_curve(plt,model,"Learn Curve for LinearRegression",features,target,ylim=None,cv=cv)
plt.show()

五、 模型性能评估和优化

1、 模型优化,考虑用二项式和三项式优化

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import learning_curve

2、 划分数据集函数

def split_data():boston = load_boston()x = boston.datay = boston.targetprint(boston.feature_names)x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2,random_state=2)return (x, y, x_train, x_test, y_train, y_test)

3、定义MAE、MSE函数

def mae_value(y_true,y_pred):n=len(y_true)mae=sum(np.abs(y_true-y_pred))/nreturn maedef mse_value(y_true,y_pred):n=len(y_true)mse=sum(np.square(y_true-y_pred))/n
return mse

4、定义多项式模型函数

def polynomial_regression(degree=1):polynomial_features = PolynomialFeatures(degree=degree, include_bias=False)#模型开启数据归一化linear_regression_model = LinearRegression(normalize=True)model = Pipeline([("polynomial_features", polynomial_features),("linear_regression", linear_regression_model)])return model

5、 训练模型

def train_model(x_train, x_test, y_train, y_test, degrees):   res = []for degree in degrees:model = polynomial_regression(degree)model.fit(x_train, y_train)train_score = model.score(x_train, y_train)test_score = model.score(x_test, y_test)res.append({"model": model, "degree": degree, "train_score": train_score, "test_score": test_score})preds=model.predict(x_test)mae=mae_value(y_test,preds)mse=mse_value(y_test,preds)print(" degree: " ,degree, "  MAE:",mae,"    MSE",mse)for r in res:print("degree: {}; train score: {}; test_score: {}".format(r["degree"], r["train_score"], r["test_score"]))return res

6、 定义画出学习曲线的函数

def plot_learning_curve(plt,estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(.1,1.0,5)):plt.title(title)if ylim is not None:plt.ylim(ylim)plt.xlabel("Training examples")plt.ylabel("Score")train_sizes,train_scores,test_scores=learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)train_scores_mean=np.mean(train_scores,axis=1)train_scores_std=np.std(train_scores,axis=1)test_scores_mean=np.mean(test_scores,axis=1)test_scores_std=np.std(test_scores,axis=1)plt.grid()plt.fill_between(train_sizes,train_scores_mean-train_scores_std,train_scores_mean+train_scores_std,alpha=0.1,color="r")plt.fill_between(train_sizes,test_scores_mean-test_scores_std,test_scores_mean+test_scores_std,alpha=0.1,color="g")plt.plot(train_sizes,train_scores_mean,'o--',color="r",label="Training scores")plt.plot(train_sizes,test_scores_mean,'o-',color="g",label="Cross-validation score")plt.legend(loc="best")return plt

7、定义1、2、3次多项式

degrees = [1,2,3]

8、划分数据集

x, y, x_train, x_test, y_train, y_test = split_data()

9、训练模型,并打印train score

res = train_model(x_train, x_test, y_train, y_test, degrees)

10、画出学习曲线

cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=0)
plt.figure(figsize=(10, 6))for index, data in enumerate(res):plot_learning_curve(plt, data["model"], "degree %d"%data["degree"], x, y, cv=cv)
plt.show()

degree-001
degree-002
degree-003

六、 结论与分析

通过对波士顿房价数据的分析预测练习,运用多元回归模型(一共十三个维度),前期训练量不足导致拟合程度不理想。经过模型的参数优化,采用了全部特征值,结果显示一次多项式训练准确度72%,测试准确度76%。二次多项式训练准确度92%,测试准确度89%,mae=2.36, mse=8.67。综上所述,采用二次多项式回归方法优化效果较好。

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

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

相关文章

预测房价(Python)

构建神经网络/深度学习模型的基本步骤 深度学习模型具有一定的通用性,使得深度学习的门槛降低,这是深度学习得以重新占据计算机领域一席之地的重要原因,深度学习均可以从下述五个步骤来完成模型的构建和训练。 def load_data():# 从文件导入…

香港的房价真的那么贵吗?用数据挖掘真相!

作者 | 挖数 来源 | 挖数(公众号id:washu66) 香港位于广东深圳的南边,面积是1106平方公里,比中国的四大一线城市都小。 不仅面积小,其人口密度也大,香港每平方公里的人口数比四大一线城市都多。…

波士顿房价数据集

数据集 Keras中常见的集成数据集波士顿房价数据集1. 加载数据集2. 访问数据集3. 数据可视化 Keras是一个高层的神经网络和深度学习库,可以快速搭建神经网络,易于调试和从扩展,是TensorFlow的官方API,内置了常用的公共数据集&#…

ChatGTP全景图 | 背景+技术篇

引言:人类以为的丰功伟绩,不过是开端的开端……我们在未来100年取得的技术进步,将远超我们从控制火种到发明车轮以来所取得的一切成就。——By Sam Altman 说明:ChatGPT发布后,我第一时间体验了它的对话、翻译、编程、…

考研成功上岸提前学Python,轻松拿到大厂实习offer!

23考研即将尘埃落定,首先要恭喜上岸的同学呀~ 关于上岸后到底要不要学Python、读研怎么找实习等相关问题,其实之前也聊过,但是大家可能还没有意识到Python给读研带来什么样的正面影响,蛋糕给大家看看往期Python学员的反馈&#x…

在当下互联网行情下,2023年程序员的工作真的很难找

前言 年后,听到有几位同事有离职的想法,有的已经在开始找工作了。,这个行业的工资就是靠跳槽来加速增长的,不过经过了这几个月的面试、复试的经历,几位前期提出离职的同事渐渐改变了想法,他们发现放开后的…

重磅!大湾区大学,官宣招生!

来源:大湾区大学 编辑整理 :双一流高教 3月23日,大湾区大学(筹)发布招生信息,该校将和南方科技大学联合招收30名硕士研究生。通知显示,这批学生的学籍属于南科大,第一年在南科大培养…

2022硅谷大厂的大!失!败!AiDA时尚设计师助手;2023热门IT技能预告;Uber送货机器人;GitHub今日热榜 | ShowMeAI资讯日报

👀日报合辑 | 🎡AI应用与工具大全 | 🔔公众号资料下载 | 🍩韩信子 📢 『抖音』2022抖音热点数据报告,共度温暖岁末 抖音热点联合巨量算数,发布了《2022抖音热点数据报告》,盘点了20…

Datawhale优秀作者,入选名单!

Datawhale团队 公示:Datawhale优秀作者,2023.01-03 优秀作者公示 入选奖 1. 陈敬 中国移动云能力中心 机器学习技术:多任务学习综述! 2. 滕飞 浙江大学研究生 浙大学长分享,第二次打数据挖掘赛,雪浪算力…

24考研网盘群来了…免费进…

简介 免费分享考研网课资源,考研资料、考研资讯、考研真题、分享考研英语\考研政治\考研数学\考研复试\考研调剂信息等一系列资源,助你一战成硕。 百度网盘群 2024考研 微信公众号:考研保研直通车,坚持方便、省时的原则&#xff…

考研人导航上线啦

科大学长开发的考研人导航上线啦 ,可以帮助考研学生更高效的获取最新考研复试信息和备考资料 考研人导航官网:https://kaoyan.ahy2.top

从事架构师岗位快2年了,聊一聊我对架构的一些感受和看法

从事架构师岗位快2年了,聊一聊我和ChatGPT对架构的一些感受和看法 职位不分高低,但求每天都能有新的进步,永远向着更高的目标前进。 文章目录 踏上新的征程架构是什么?架构师到底是干什么的?你的终极目标又是什么&…

ChatGPT的出现,让我们必须思考未来孩子的职业

最近这段时间,大家都在谈论ChatGPT,谈论最多的大概就是它将来会淘汰哪些行业?多少人会因此而失业? 作为父母,我们除了关心自己的发展,当然还关心孩子的未来。 尤其是现在的人工智能发展如此迅速&#xff0c…

chatgpt赋能Python-python影评分析

介绍 Python是一种流行的编程语言,它被广泛应用于各种领域,包括数据分析领域。在电影业,Python也被用于进行影评分析。通过分析影评数据,我们可以了解到观众对于不同电影的看法和评价,从而更好地了解市场需求和趋势。…

GPT、科技、人类的生产、知识与未来(上)

本文将继续结合GPT探讨人工智能技术升级可能对人类社会带来的影响。主要还是侧重历史、社会、文化、经济、政治等角度。 问题的提出:ChatGPT等工具会提高人的工作效率和产出。但它会让人类使用者自身变得更“聪明”,还是“更笨”?更“强”&am…

ChatGPT初尝试——合并Excel表格【AI版】

ChatGPT真的能提升生产力吗?【AI版】 无意间的刷到的视频一、提需求二、ChatGPT用Python编写代码三、意外的解释四、ChatGPT改用Java编写代码五、GPT第二次生成Java代码尾巴 无意间的刷到的视频 晚上在家刷视频,突然看到一个在讲关于AI编程的视频&#…

AI 3.0快速阅读后的思考

AI3.0阅读思考 梳理 几大技术词汇: 卷积神经网络CNN:权重和值之积的和深度神经网络DNN工具:深度指层数,深度学习强化学习符号人工智能亚符号人工智能,感知机,亚符号,从数据中学习机器学习对博…

HTTP的缓存机制是什么?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言HTTP缓存机制简介H…

进阶高级Python开发工程师,不得不掌握的Python高并发编程

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【Python基础】- 文件的读写操作

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…