2020年寒假学习进度第十天

今天主要学习了实验 7 Spark 机器学习库 MLlib 编程实践,

主要代码:

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 spark.implicits._

case class Adult(features: org.apache.spark.ml.linalg.Vector, label: String)

val df = sc.textFile("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()

val test = sc.textFile("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)

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))

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()

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)

 val pcaModel = bestModel.stages(0).asInstanceOf[PCAModel]

println("Primary Component: " + pcaModel.pc)

  在继续这个实验时遇到一个问题,现在还没解决,如图:

org.apache.spark.SparkException: Failed to execute user defined function($anonfun$4: (string) => double)

经过查询这个问题的原因是无法执行定义的函数,但是我完全按照教程中的代码进行就会产生这个问题,网上没有这个问题的解析,所以还未解决。

原文地址:https://www.cnblogs.com/ljm-zsy/p/12291384.html

时间: 2024-11-05 20:46:03

2020年寒假学习进度第十天的相关文章

2020年寒假学习进度第十五天

原文地址:https://www.cnblogs.com/ljm-zsy/p/12312935.html

2020年寒假学习进度(一)

由于下学期就要进行毕业设计答辩,打算这个寒假在家先继续巩固知识和学习新的技术要点,然后着力进行毕业设计的开发. 今天主要复习了一些关于javaweb的内容,总结如下: (1)WEB,也就是网页的意思,它用于表示Internet主机上供外界访问的资源.常用动态web资源开发技术:JSP/Servlet.ASP.PHP等 本人主要学习java运用于web开发的重要技术在Java中,动态web资源开发技术统称为Javaweb. (2)servlet/jsp: 这是SUN公司(SUN现在已经被Oracl

2020年寒假学习进度第七天

今天主要学习了spark实验四的内容,实验四主要为RDD编程,本实验的重点为两个编程题 1.编写独立应用程序实现数据去重对于两个输入文件 A 和 B,编写 Spark 独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件 C.下面是输入文件和输出文件的一个样例,供参考.输入文件 A 的样例如下: 20170101 x 20170102 y 20170103 x 20170104 y 20170105 z 20170106 z 输入文件 B 的样例如下: 20170101 y 2

2020年寒假学习进度第二天

今天主要研究了spark实验二的第一部分的Scala编写,看完代码后发现需要在REPL模式下运行,经过查证发现需要安装scala脚本,所以尝试在虚拟机中安装scala,成功后使用给的代码尝试运行,但是出错,提示没有找到类的定义,经过查证,发现是代码中缺少类得定义.改正后可以正常运行. import io.StdIn._ object Test { def main(args: Array[String]){ var Sn:Float = 0 var n:Float=1 println("plea

2020年寒假学习进度第九天

今天主要解决了实验五未解决的问题,前天在做实验五spark连接mysql时出现找不到jar包的问题,看了网上的讲解,调整了一下路径,有人说jar包要放在同名的一个文件夹里,实际上jar包应该直接放在spark安装目录的jars目录下就可,这样就可以连接上. 3. 编程实现利用 DataFrame 读写 MySQL 的数据 (1) 在 MySQL 数据库中新建数据库 sparktest,再建表 employee,包含下列两行数据: 表 1 employee 表原有数据 (2) 配置Spark通过J

寒假学习进度02

日期:2020.01.15 博客期:124 星期三 嗯,把这几天学习进度汇总一下: 1.CSV文件.XML文件.JSON文件的处理整合 这一部分详细的让我明天把博客整理出来,你们就能看到了,不过这一部分代码,借鉴了好多其他博主的,我在此声明一下:数据的文件读写部分(除CSV文件外,其余两个)不是本博主原创,剩下的这三者之间的转换和前面构造好的BeanGroup类型的相互转换是自己写的.嗯,具体看下一篇博客吧! 2.数据爬取详细信息 嗯,爬取的话,现在是只能爬取一页上的所有信息,没能做到页面跳转继

2020寒假学习进度报告2

今日完成内容:学习了scala中的语法,主要知识点包括:变量的定义,数值类型,运算符,流程控制,for循环,while循环, do ... while循环,(不建议使用while和do...while,因为函数引入了外部变量),函数尤其是递归,之前学习其他语言时强调尽量少用递归操作,但是在scala中对于递归做了底层优化,所以scala中会用到大量的递归操作. 明日学习任务:学习scala中函数的使用,面向对象编程和函数式编程 原文地址:https://www.cnblogs.com/mawan

2020寒假学习进度报告6

1. 计算级数 请用脚本的方式编程计算并输出下列级数的前 n 项之和 Sn,直到 Sn 刚好大于或等于 q 为止,其中 q 为大于 0 的整数,其值通过键盘输入. 例如,若 q 的值为 50.0,则输出应为:Sn=50.416695.请将源文件保存为 exercise2-1.scala,在 REPL模式下测试运行,测试样例:q=1时,Sn=2:q=30时,Sn=30.891459: q=50 时,Sn=50.416695. 1 var n: Float = 1 2 var Sn: Float =

寒假学习进度十

对于Scala这种东西,我还是弄不太清.毕竟大学那点java,c#什么的也还是懵懵懂懂,明明知道自己应该开始努力了却不知道该如何起跑,也不知道要往哪个方向跑.心里很是惆怅. 今天也就看了个b站上的Scala教学视频:https://www.bilibili.com/video/av39126512?from=search&seid=11655088589598890079 原文地址:https://www.cnblogs.com/990906lhc/p/12286015.html