基于pyspark的波士顿房价预测案例

目录

一、问题描述:

二、机器学习预测模型概述:

 三、数据获取

四、数据预处理 

五、模型训练

 六、模型评估


本实验包含线性回归模型、梯度上升回归、决策树、随机森林、梯度回归树五种模型的创建和比较以及加载! 

一、问题描述:

本次实验休士顿房价数据集是一个回归问题,共有506个样本,13个输入变量和1个输出变量。数据集中的每一行数据都是对休士顿周边或城镇房价的情况描述,下面对数据集变量说明下,方便理解数据集变量代表的意义。

数据集各特征介绍:

• CRIM:城镇人均犯罪率。

• ZN:住宅用地超过 25000 sq.ft. 的比例。

• INDUS:城镇非零售商用土地的比例。

• CHAS:查理斯河空变量(如果边界是河流,则为1;否则为0)。

• NOX:一氧化氮浓度。

• RM:住宅平均房间数。

• AGE:1940 年之前建成的自用房屋比例。

• DIS:到波士顿五个中心区域的加权距离。

• RAD:辐射性公路的接近指数。

• TAX:每 10000 美元的全值财产税率。

• PTRATIO:城镇师生比例。

• B:1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例。

• LSTAT:人口中地位低下者的比例。

• price:自住房的平均房价,以千美元计。

二、机器学习预测模型概述:

1、线性回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

2、随机森林回归模型

随机森林回归模型为一种集成学习算法。通过在数据上构建多个模型,集成所有模型的建模结果。大概流程如下:

  • 从样本集中使用Bootstrap采样选出n个样本。        
  • 从所有属性中随机选择k个属性,之后再使用信息增益、基尼指数方法不断找到最佳分割属性建立CART决策树(也可以是svm、LR等),这里的k控制了随机性的引入程度。        
  • 重复以上过程建立m个分类器,使用这些树形成随机森林,通过求均值来得到预测结果

3、GBR梯度上升回归模型:

本质上就是集思广益,集成一堆较差的学习算法进行学习。每个学习算法准备率都不高,但是它们集成起来可以获得很好的准确率

4、
决策树:

决策树是一个由根到叶的递归过程,在每一个中间结点寻找划分属性,递归重要的是设置停止条件:

(1)当前结点包含的样本属于同一类别,无需划分;

(2)当前属性集为空,或是所有样本在所有属性上取值相同无法划分,简单理解就是当分到这一节点时,所有的属性特征都用完了,没有特征可用了,就根据label数量多的给这一节点打标签使其变成叶节点(其实是在用样本出现的后验概率做先验概率);

(3)当前结点包含的样本集合为空,不能划分。这种情况出现是因为该样本数据缺少这个属性取值,根据父结点的label情况为该结点打标记(其实是在用父结点出现的后验概率做该结点的先验概率)。

5、梯度回归树(GBDT)

GBDT以及其他类型的提升树模型都是基于前向分步算法的(Forward stagewise algorithm)。

优点:预测精度高、适合低维数据、能处理非线性数据与各种类型数据(离散(one_hot) or 连续)

 三、数据获取

1、获取数据集

from sklearn import datasets
import math
import matplotlib.pyplot as plt
house = datasets.load_boston()  # 加载数据
x = house.data  # 获取特征数据
y = house.target  # 获取特征标签
nums = len(house.feature_names)  # 获取特征数量
columns = 4  # 指定一行中图的个数
rows = math.ceil(nums / columns)  # 根据特征数和列数计算行数
plt.figure(figsize=(10, 12))  # 设置图的大小
for i in range(nums):  # 循环绘制每个特征与房价之间的关系图
    plt.subplot(rows, columns, i + 1)  # 指定图的位置
    plt.plot(x[:, i], y, "b+")  # 绘制相关点
    plt.title(house.feature_names[i])  # 指定每个子图的标题
plt.subplots_adjust(hspace=0.8)  # 调整图与图之间的边距
plt.show()  # 显示图

data = spark.read.format('CSV').option('header','true').load('D:/code/JupyterNotebookSpace/pypspark/data/data_house/boston.csv',schema=schema)
data.show(10) # 展示前十条数据data.describe().toPandas().transpose()

四、数据预处理 

1、数据去重
data_dis = data.distinct()
data_dis.show()
print(data_dis.count()) 

2、将所有特征转化成向量型,考察特征间相关性
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.stat import Correlation
df_assembler = VectorAssembler(
    inputCols=['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','B','LSTAT','price'],
    outputCol='all_features')
data_view = df_assembler.transform(data).select('all_features')
data_view.show(10)

 3、计算特征间相关性,默认计算的是皮尔逊相关系数
mat = Correlation.corr(data_view,'all_features')
#打印最后一行,查看各特征与售价之问的相关性  
# 输出协方差矩阵
mat.head()[0].toArray()[-1,:]

#可视化特征相关性
import seaborn as sns
sns.heatmap(mat.head()[0].toArray(),cmap="YlGnBu")

 4、构建特征集和标签列

# 数据转换,spark监督学习模型需要两栏数据,分别是特征集和标签列
va = VectorAssembler(inputCols=['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','B','LSTAT'],outputCol='features')
df = va.transform(data).select(['features','price'])
df.show(10)

5.利用卡方特征选择ChiSqSelector来选择部分特征,降低维度,减少计算开销
选用百分之九十的特征
from pyspark.ml.feature import ChiSqSelector
selector = ChiSqSelector(featuresCol='features',percentile=0.9, outputCol="selectedFeatures",labelCol='price')
model = selector.fit(df)
df_select = model.transform(df).select(["selectedFeatures","price"])
model.transform(df).show()

五、模型训练

 1、线性回归

# 训练模型
# 使用pyspark.ml.regression模块构建线性回归模型
from pyspark.ml.regression import LinearRegression   # 导入线性回归库
lr = LinearRegression(featuresCol = 'selectedFeatures', labelCol='price', maxIter=10, regParam=0.3, elasticNetParam=0.8)
lr_model = lr.fit(train)
# 打印各项系数和截距
str(lr_model.coefficients),str(lr_model.intercept)# 线性回归模型对测试集进行预测
predict_lr = lr_model.transform(test)
predict_result_lr = predict_lr.select('prediction','price','selectedFeatures')
predict_result_lr.show(10)

 

2、决策树回归

from pyspark.ml.regression import DecisionTreeRegressor
dt = DecisionTreeRegressor(featuresCol ='selectedFeatures', labelCol = 'price')
dt_model = dt.fit(train)# 使用决策树回归进行预测
predict_dt = dt_model.transform(test)
predict_result_dt = predict_dt.select('prediction', 'price', 'selectedFeatures')
predict_result_dt.show(10)

3、梯度回归树(GBDT)

from pyspark.ml.regression import GBTRegressor
gbt = GBTRegressor(featuresCol = 'selectedFeatures', labelCol = 'price', maxIter=10)
gbt_model = gbt.fit(train)# 使用梯度回归树(GBDT)进行预测
predict_gbt = gbt_model.transform(test)
predict_result_gbt = predict_gbt.select('prediction','price','selectedFeatures')
predict_result_gbt.show(10)

 六、模型评估

# 选用均方根误差评估模型准确率
from pyspark.ml.evaluation import RegressionEvaluator
eva_lr = RegressionEvaluator(predictionCol='prediction',labelCol='price',metricName='rmse').evaluate(predict_result_lr)
eva_dt = RegressionEvaluator(predictionCol='prediction',labelCol='price',metricName='rmse').evaluate(predict_result_dt)
eva_gbt = RegressionEvaluator(predictionCol='prediction',labelCol='price',metricName='rmse').evaluate(predict_result_gbt)
print("线性回归模型均方根误差为{}".format(eva_lr))
print("决策树回归模型均方根误差为{}".format(eva_dt))
print("梯度回归树回归模型均方根误差为{}".format(eva_gbt))

总结: 实验采用了相关系数和平方差两种手段去评判预测结果的好坏。相关系数越接近说明选用的模型回归的效果越好,预测的结果也就越优,在实际解决问题时,应该测试多个模型选用最优的模型进行预测。

由于模型操作较多 在此便不一一详细说明,具体其他模型的详细操作代码包括文档可查看资源,亦可私信我,开源发送,希望可以帮助到大家!

代码资源:

(1条消息) 波士顿房价预测代码pyspark-python-sklearn_波士顿房价预测python代码,波士顿房价预测python-机器学习文档类资源-CSDN文库

数据集:(1条消息) 波士顿房价预测数据集boston.csv_波士顿房价参考文献,波士顿房价预测数据集-机器学习文档类资源-CSDN文库 

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

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

相关文章

python广深地区房价数据的爬取与分析

Python房产数据分析 1、数据爬取2、明确需求与目的数据预览提出问题 3.数据预处理数据清洗缺失值异常值(对连续性标签做处理)异常值(对离散标签做处理) 4、数据分析问题1、广东省房价的总体情况如何?问题2、高端小区都有哪些?问题…

ChatGPT的介绍与运用

ChatGPT的发展 ChatGPT是OpenAI团队开发的一种基于语言模型的对话系统 GPT-1: GPT(Generative Pre-trained Transformer)是OpenAI发布的第一个基于Transformer架构的语言模型。GPT-1于2018年发布,它使用了无监督学习的方法&#…

离线语音交互技术路线之语音合成(TTS)篇

在ChatGPT大行其道之际,我心血来潮想要研究研究如何实现离线语音交互,把它和ChatGPT相结合,自己尝试实现个语音助手玩玩。本篇文章主要先从整体上分析了离线语音交互的技术实现路线,以及每个环节可能用到的参考技术,然…

Linux中文显示乱码问题

终端输入命令回显的时候中文显示乱码,出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的。 Linux系统与windows系统在编码上有显著的差别。Windows中的文件的格式默认是GBK(gb2312),而Linux系统中文件的格式默认是UT…

解决中文乱码问题大全

相信大家在开发过程中遇到很多中文乱码的问题,为此小编在这里汇集了很多不同情况下怎么解决中文乱码,希望对大家有所帮助 1、IDEA控制台输出乱码 修改idea配置文件:找到idea的安装目录,在bin目录下找到dea64.exe.vmoptions和idea.exe.vmoptions这两个文件,分别在这两个文…

解决中文乱码的方法

今天跟路飞学习爬虫时,遇到的中文乱码。他提出了一种解决方法,而我在弹幕上也看到了一种方法。 法1:在响应数据时加一句 response.encoding response.apparent_encoding 法2: #通用处理中文乱码的解决方法img_name img_name.en…

中文乱码问题整理总结

目录 1、字符编码 2、乱码产生的原因 3、乱码解决方案 3.1、解决HTML页面中的中文问题: 3.2、解决JSP页面中的中文问题 3.3、解决Servlet响应结果的中文问题 3.4解决页面数据传输的中文问题 3.5、解决HTTP(get)请求中的中文问题 3.6、解决MySQL数据库的中文…

php echo中文乱码问题

用echo输出的中文显示成乱码, 其实应该是各种服务器脚本都会遇到这个问题, 根本还是编码问题, 一般来说出于编码兼容考虑大多的页面都将页面字符集定义为utf-8 这时候要正常显示中文需要转化一下编码方式,比如 echo iconv(“…

中文出现乱码最常见的几种方式解析

1、出现古文夹杂日韩文,以GBK读取UTF-8编码 2、出现方块形,以UTF-8读取GBK 3、各种符号,以ISO8859-1方式读取UTF-8 4、拼音码,带声调的字母,以ISO8859-1方式读取GBK 5、长度为奇数时,最后的字符变成问号&am…

SEO百度搜索引擎优化30min了解网站排名

目录 seo优化 介绍seo是什么 网站更新: 网站排名在21世纪的意义: 网站为电商引流 百度算法规则 排名流程 seo策略 规则——“学会在线球里玩” 单页面收录显示 必要条件——链接数量 日志统计——及时优化seo策略 降低识别难度 收录越多排名就越大吗 …

毕设项目《基于STM32的智能乒乓球捡球小车的设计与实现》从零开始过程笔记

毕设项目《基于STM32的智能乒乓球捡球小车的设计与实现》从零开始过程笔记 小车实物 前言 本文是后来记录而写,如有不足之处,欢迎批评指正。 如果您觉得文章写得不错,欢迎一键三连。(比心 orz) 目录 毕设项目《基于S…

全面剖析OpenAI发布的GPT-4比其他GPT模型强在哪里

最强的文本生成模型GPT-4 一、什么是GPT-4二、GPT-4的能力三、和其他GPT模型比较3.1、增加了图像模态的输入3.2、可操纵性更强3.3、复杂任务处理能力大幅提升3.4、幻觉、安全等局限性的改善3.6、风险和缓解措施改善更多安全特性3.7、可预测的扩展 四、与之前 GPT 系列模型比较五…

GPT-4 官方技术报告(译)

摘要 我们报告了GPT-4的开发情况,这是一个大规模的多模态模型,可以接受图像和文本输入并产生文本输出。虽然在许多现实世界的场景中,GPT-4的能力不如人类,但在各种专业和学术基准上表现出人类水平的性能,包括在模拟的律…

重磅突发!OpenAI正式推出多模态GPT-4

大家好,今天这篇文章是我的好朋友阿法兔翻译的,她凌晨熬夜研究了一下 OpenAI 推出的 GPT-4,基本把所有发布的内容重点都读完了,分享给大家,希望能给你一些启发。 作者 | OpenAI&TheVerge&Techcrunch 翻译 &am…

Chatbox - 一款适用于 GPT-4 / GPT-3.5 (OpenAI API) 的桌面应用程序

简介 给大家推荐一款适用于 GPT-4 / GPT-3.5 (OpenAI API) 的桌面应用程 ChatBox,开源的 ChatGPT API (OpenAI API) 跨平台桌面客户端,Prompt 的调试与管理工具,也可以用作 ChatGPT Plus 平替。 下载 ► chatBox 下载安装 ⇲ 为什么不直接…

是兄弟就来找 ChatGPT 漏洞,OpenAI:最高赏金 2 万刀

这是「进击的Coder」的第 822 篇技术分享 作者:克雷西 发自 凹非寺 来源:量子位(ID:QbitAI) “ 阅读本文大概需要 5 分钟。 ” 现在,给 ChatGPT 找漏洞有钱挣了。 今天凌晨,OpenAI 宣布开启漏洞…

chatgpt赋能python:Python配色方案:让您的代码更易于阅读和管理

Python配色方案:让您的代码更易于阅读和管理 Python是一种广泛使用的编程语言,它具有简单易学、功能强大的特点。但是,当您开始编写更复杂的代码时,遇到的主题和配色问题可能会影响代码的可读性和管理能力。 为了解决这个问题&a…

LLM系列 | 09: 基于ChatGPT构建智能客服系统(query分类安全审核防注入)

简介 竹斋眠听雨,梦里长青苔。门寂山相对,身闲鸟不猜。小伙伴们好,我是卖热干面的小女孩。紧接前面几篇ChatGPT Prompt工程系列文章: 04:ChatGPT Prompt编写指南05:如何优化ChatGPT Prompt?06:ChatGPT Prompt实践&am…

Rabbitmq使用笔记

前言 mq的优点:异步提速、解耦、流量削峰 mq的缺点: mq宕机可能导致消息丢失、消费者未成功消费如果保证整个系统架构的事务安全、消息可能被重复消费出现幂等问题、消息未被消费到引发死信问题、消息出现消费延迟或消费异常引发的顺序消费错乱问题...…

Dapr,可能是传统应用转向微服务式应用最快的技术路线

一、开篇小记 过去的一段时间,一直在赶一些项目的进度,再加上前阵子的封控,一直没有时间静下心来好好整理和总结。从这周开始,总算有时间整理点东西了,就还是继续折腾了一些关于微服务的知识点。 由于我本人呢&#…