当前位置: 首页> 健康> 美食 > ui设计公司排行榜_开源免费cms可商业用_搜索引擎优化排名关键字广告_建立网站需要什么

ui设计公司排行榜_开源免费cms可商业用_搜索引擎优化排名关键字广告_建立网站需要什么

时间:2025/8/24 2:47:05来源:https://blog.csdn.net/m0_52735414/article/details/130263581 浏览次数:0次
ui设计公司排行榜_开源免费cms可商业用_搜索引擎优化排名关键字广告_建立网站需要什么

Spark机器学习库MLlib编程实践

文章目录

  • Spark机器学习库MLlib编程实践
    • 0. 写在前面
    • 1. 正文
      • 1.1 案例目的
      • 1.2 案例
        • 1.2.1 数据导入
        • 1.2.2 进行主成分分析(**PCA**)
        • 1.2.3 训练分类模型并预测居民收入
        • 1.2.4 超参数调优
      • 1.3 数据集展示
      • 1.4 程序编写


0. 写在前面

  • 操作系统:Linux(CentOS7.5)
  • Spark版本:Spark3.0.0
  • Scala版本:Scala2.12.1

1. 正文

1.1 案例目的

  • 通过实验掌握基本的MLLib编程方法;

  • 掌握用MLLib解决一些常见的数据分析问题,包括数据导入、成分分析和分类和预测等。

1.2 案例

1.2.1 数据导入

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

1.2.2 进行主成分分析(PCA

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

1.2.3 训练分类模型并预测居民收入

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

1.2.4 超参数调优

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

1.3 数据集展示

  • 数据集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pfcB2LSc-1681964000842)(assets/01.png)]

  • 测试集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SGHxBsuJ-1681964000843)(assets/02.png)]

1.4 程序编写

本案例是在Spark-Shell环境下执行的

  • (1)针对数据导入,提前导入必要的包,如下所示
import org.apache.spark.ml.feature.PCA
import org.apache.spark.sql.Row
import org.apache.spark.ml.linalg.{Vector,Vectors}
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.{Pipeline,PipelineModel}
import org.apache.spark.ml.feature.{IndexToString, StringIndexer, VectorIndexer,HashingTF, Tokenizer}
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.classification.LogisticRegressionModel
import org.apache.spark.ml.classification.{BinaryLogisticRegressionSummary, LogisticRegression}
import org.apache.spark.sql.functions
import org.apache.spark.ml.tuning.{ CrossValidator, CrossValidatorModel, ParamGridBuilder }
  • 将数据集转换为DataFrame
import spark.implicits._
case class Adult(features: org.apache.spark.ml.linalg.Vector, label: String)val df = sc.textFile("/export/server/spark-3.0.0-bin-hadoop3.2/adult.data.txt").map(_.split(",")).map(p => Adult(Vectors.dense(p(0).toDouble,p(2).toDouble,p(4).toDouble, p(10).toDouble, p(11).toDouble, p(12).toDouble), p(14).toString())).toDF()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-18Ciq0Wa-1681964000843)(assets/03.png)]

  • (2)读取数据集和测试集,进行主成分分析(PCA
val test = sc.textFile("/export/server/spark-3.0.0-bin-hadoop3.2/adult.test.txt").map(_.split(",")).map(p => Adult(Vectors.dense(p(0).toDouble,p(2).toDouble,p(4).toDouble, p(10).toDouble, p(11).toDouble, p(12).toDouble), p(14).toString())).toDF()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)

可以看到数据集和测试集导入成功,如下图所示:

  • 数据集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8oCBMGs-1681964000844)(assets/04.png)]

  • 测试集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4xyw08cp-1681964000844)(assets/05.png)]

  • (3)训练分类模型并预测居民收入
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 lrModel = lrPipelineModel.stages(2).asInstanceOf[LogisticRegressionModel]
println("Coefficients: " + lrModel.coefficientMatrix+"Intercept: "+lrModel.interceptVector+"numClasses: "+lrModel.numClasses+"numFeatures: "+lrModel.numFeatures)
val lrPredictions = lrPipelineModel.transform(testdata)
val evaluator = new MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction")val lrAccuracy = evaluator.evaluate(lrPredictions)println("Test Error = " + (1.0 - lrAccuracy))

预测的错误率如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAfi6Ue2-1681964000845)(assets/06.png)]

  • (4)超参数调优
val pca = new PCA().setInputCol("features").setOutputCol("pcaFeatures")
val labelIndexer = new StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(df)
val featureIndexer = new VectorIndexer().setInputCol("pcaFeatures").setOutputCol("indexedFeatures")
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(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()

paramGrid的结果值如下所示:

paramGrid: Array[org.apache.spark.ml.param.ParamMap] =
Array({logreg_9e1b758452ee-elasticNetParam: 0.2,pca_e02a5078c882-k: 1,logreg_9e1b758452ee-regParam: 0.01
}, {logreg_9e1b758452ee-elasticNetParam: 0.2,pca_e02a5078c882-k: 2,logreg_9e1b758452ee-regParam: 0.01
}, {logreg_9e1b758452ee-elasticNetParam: 0.2,pca_e02a5078c882-k: 3,logreg_9e1b758452ee-regParam: 0.01
}, {logreg_9e1b758452ee-elasticNetParam: 0.2,pca_e02a5078c882-k: 4,logreg_9e1b758452ee-regParam: 0.01
}, {logreg_9e1b758452ee-elasticNetParam: 0.2,pca_e02a5078c882-k: 5,logreg_9e1b758452ee-regParam: 0.01
}, {logreg_9e1b758452ee-elasticNetParam: 0.2,pca_e02a5078c882-k: 6,logreg_9e1b758452ee-regParam: 0.01
}, {logreg_9e1b758452ee-elasticNetParam: 0.8,pca_e02a5078c882...
val cv = new CrossValidator().setEstimator(lrPipeline).setEvaluator(new MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction")).setEstimatorParamMaps(paramGrid).setNumFolds(3)
val cvModel = cv.fit(df)
val lrPredictions=cvModel.transform(test)
val evaluator = new MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction")
val lrAccuracy = evaluator.evaluate(lrPredictions)
println("准确率为"+lrAccuracy)
val bestModel= cvModel.bestModel.asInstanceOf[PipelineModel]
val lrModel = bestModel.stages(3).asInstanceOf[LogisticRegressionModel]
println("Coefficients: " + lrModel.coefficientMatrix + "Intercept: "+lrModel.interceptVector+ "numClasses: "+lrModel.numClasses+"numFeatures: "+lrModel.numFeatures)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iNB5GiIY-1681964000846)(assets/07.png)]

import org.apache.spark.ml.feature.PCAModel
val pcaModel = bestModel.stages(0).asInstanceOf[PCAModel]
println("Primary Component: " + pcaModel.pc)

请先提前导入org.apache.spark.ml.feature.PCAModel这个包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJE6hTkt-1681964000847)(assets/08.png)]

全文结束!!!

关键字:ui设计公司排行榜_开源免费cms可商业用_搜索引擎优化排名关键字广告_建立网站需要什么

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: