目录
一、问题描述:
二、机器学习预测模型概述:
三、数据获取
四、数据预处理
五、模型训练
六、模型评估
本实验包含线性回归模型、梯度上升回归、决策树、随机森林、梯度回归树五种模型的创建和比较以及加载!
一、问题描述:
本次实验休士顿房价数据集是一个回归问题,共有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梯度上升回归模型:
本质上就是集思广益,集成一堆较差的学习算法进行学习。每个学习算法准备率都不高,但是它们集成起来可以获得很好的准确率
决策树是一个由根到叶的递归过程,在每一个中间结点寻找划分属性,递归重要的是设置停止条件:
(1)当前结点包含的样本属于同一类别,无需划分;
(2)当前属性集为空,或是所有样本在所有属性上取值相同无法划分,简单理解就是当分到这一节点时,所有的属性特征都用完了,没有特征可用了,就根据label数量多的给这一节点打标签使其变成叶节点(其实是在用样本出现的后验概率做先验概率);
(3)当前结点包含的样本集合为空,不能划分。这种情况出现是因为该样本数据缺少这个属性取值,根据父结点的label情况为该结点打标记(其实是在用父结点出现的后验概率做该结点的先验概率)。
5、梯度回归树(GBDT)
GBDT以及其他类型的提升树模型都是基于前向分步算法的(Forward stagewise algorithm)。
优点:预测精度高、适合低维数据、能处理非线性数据与各种类型数据(离散(one_hot) or 连续)
三、数据获取
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()
四、数据预处理
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)
五、模型训练
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文库
本文链接:https://my.lmcjl.com/post/12873.html
4 评论