为了能到远方,脚下的每一步都不能少.|

lmyyyy

园龄:2年8个月粉丝:7关注:10

spark实验七 SparkMLlib

1.数据导入
从文件中导入数据,并转化为 DataFrame。

2.进行主成分分析(PCA)
对 6 个连续型的数值型变量进行主成分分析。PCA(主成分分析)是通过正交变换把一
组相关变量的观测值转化成一组线性无关的变量值,即主成分的一种方法。PCA 通过使用
主成分把特征向量投影到低维空间,实现对特征向量的降维。请通过 setK()方法将主成分数
量设置为 3,把连续型的特征向量转化成一个 3 维的主成分。

val pca = new PCA().setInputCol("features").setOutputCol("pcaFeatures").setK(3).fit(df)
val result = pca.transform(df)
val testdata = pca.transform(test)
result.show(false)
testdata.show(false)

3.训练分类模型并预测居民收入
在主成分分析的基础上,采用逻辑斯蒂回归,或者决策树模型预测居民收入是否超过
50K;对 Test 数据集进行验证。

val labelIndexer = new
StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(result)
labelIndexer.labels.foreach(println)
val featureIndexer = new
VectorIndexer().setInputCol("pcaFeatures").setOutputCol("indexedFeatures").fit(result)
println(featureIndexer.numFeatures)
val labelConverter = new
IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.
labels)
val lr = new
LogisticRegression().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures").setMaxIter(
100)
val lrPipeline = new Pipeline().setStages(Array(labelIndexer, featureIndexer, lr,
labelConverter))
val lrPipelineModel = lrPipeline.fit(result)
val lrAccuracy = evaluator.evaluate(lrPredictions)
println("Test Error = " + (1.0 - lrAccuracy))

4.超参数调优
利用 CrossValidator 确定最优的参数,包括最优主成分 PCA 的维数、分类器自身的参数
等。

val pca = new PCA().setInputCol("features").setOutputCol("pcaFeatures")
val featureIndexer = new
VectorIndexer().setInputCol("pcaFeatures").setOutputCol("indexedFeatures")
val labelConverter = new
IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.l
abels)
val lr = new
LogisticRegression().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures").setMaxIter(1
00)
val lrPipeline = new Pipeline().setStages(Array(pca, labelIndexer, featureIndexer, lr,
labelConverter))
val paramGrid = new ParamGridBuilder().addGrid(pca.k,
Array(1,2,3,4,5,6)).addGrid(lr.elasticNetParam, Array(0.2,0.8)).addGrid(lr.regParam, Array(0.01,
0.1, 0.5)).build()

本文作者:lmyyyy

本文链接:https://www.cnblogs.com/lmyy/p/18029279

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lmyyyy  阅读(157)  评论(0编辑  收藏  举报
历史上的今天:
2023-02-23 2月22日总结-补
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起