当前位置: 首页 > news >正文

【基于IDEA + Spark 3.4.1 + sbt 1.9.3 + Spark MLlib 构建逻辑回归鸢尾花分类预测模型】

逻辑回归进行鸢尾花分类的案例

背景说明:

基于IDEA + Spark 3.4.1 + sbt 1.9.3 + Spark MLlib 构建逻辑回归鸢尾花分类预测模型,这是一个分类模型案例,通过该案例,可以快速了解Spark MLlib分类预测模型的使用方法。

依赖

ThisBuild / version := "0.1.0-SNAPSHOT"  ThisBuild / scalaVersion := "2.13.11"  lazy val root = (project in file("."))  .settings(  name := "SparkLearning",  idePackagePrefix := Some("cn.lh.spark"),  libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.4.1",  libraryDependencies += "org.apache.spark" %% "spark-core" % "3.4.1",  libraryDependencies += "org.apache.hadoop" % "hadoop-auth" % "3.3.6",     libraryDependencies += "org.apache.spark" %% "spark-streaming" % "3.4.1",  libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-10" % "3.4.1",  libraryDependencies += "org.apache.spark" %% "spark-mllib" % "3.4.1",  libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.30"  
)

代码如下:

package cn.lh.spark  import org.apache.spark.ml.{Pipeline, PipelineModel}  
import org.apache.spark.ml.classification.{LogisticRegression, LogisticRegressionModel}  
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator  
import org.apache.spark.ml.feature.{IndexToString, StringIndexer, StringIndexerModel, VectorIndexer, VectorIndexerModel}  
import org.apache.spark.ml.linalg.{Vectors,Vector}  
import org.apache.spark.rdd.RDD  
import org.apache.spark.sql.{DataFrame, Row, SparkSession}  case class Iris(features: org.apache.spark.ml.linalg.Vector, label: String)  /**  * 二项逻辑斯蒂回归来解决二分类问题  */  
object MLlibLogisticRegression {  def main(args: Array[String]): Unit = {  val spark: SparkSession = SparkSession.builder().master("local[2]")  .appName("Spark MLlib Demo List").getOrCreate()  val irisRDD: RDD[Iris] = spark.sparkContext.textFile("F:\\niit\\2023\\2023_2\\Spark\\codes\\data\\iris.txt")  .map(_.split(",")).map(p =>  Iris(Vectors.dense(p(0).toDouble, p(1).toDouble, p(2).toDouble, p(3).toDouble), p(4).toString()))  import spark.implicits._  val data: DataFrame = irisRDD.toDF()  data.show()  data.createOrReplaceTempView("iris")  val df: DataFrame = spark.sql("select * from iris where label != 'Iris-setosa'")  df.map(t => t(1)+":"+t(0)).collect().foreach(println)  //    构建ML的pipeline  val labelIndex: StringIndexerModel = new StringIndexer().setInputCol("label")  .setOutputCol("indexedLabel").fit(df)  val featureIndexer: VectorIndexerModel = new VectorIndexer().setInputCol("features")  .setOutputCol("indexedFeatures").fit(df)  //    划分数据集  val Array(trainingData, testData) = df.randomSplit(Array(0.7, 0.3))  //    设置逻辑回归模型参数  val lr: LogisticRegression = new LogisticRegression().setLabelCol("indexedLabel")  .setFeaturesCol("indexedFeatures").setMaxIter(10).setRegParam(0.3).setElasticNetParam(0.8)  //    设置一个labelConverter,目的是把预测的类别重新转化成字符型的  val labelConverter: IndexToString = new IndexToString().setInputCol("prediction")  .setOutputCol("predictedLabel").setLabels(labelIndex.labels)  //    构建pipeline,设置stage,然后调用fit()来训练模型  val lrPipeline: Pipeline = new Pipeline().setStages(Array(labelIndex, featureIndexer, lr, labelConverter))  val lrmodle: PipelineModel = lrPipeline.fit(trainingData)  val lrPredictions: DataFrame = lrmodle.transform(testData)  lrPredictions.select("predictedLabel", "label", "features", "probability")  .collect().foreach { case Row(predictedLabel: String, label: String, features: Vector, prob: Vector) =>  println(s"($label, $features) --> prob=$prob, predicted Label=$predictedLabel")}  //    模型评估  val evaluator: MulticlassClassificationEvaluator = new MulticlassClassificationEvaluator()  .setLabelCol("indexedLabel").setPredictionCol("prediction")  val lrAccuracy: Double = evaluator.evaluate(lrPredictions)  println("Test Error = " + (1.0 - lrAccuracy))  val lrmodel2: LogisticRegressionModel = lrmodle.stages(2).asInstanceOf[LogisticRegressionModel]  println("Coefficients: " + lrmodel2.coefficients+"Intercept: " +  lrmodel2.intercept+"numClasses: "+lrmodel2.numClasses+"numFeatures: "+lrmodel2.numFeatures)  spark.stop()  }  }

运行结果如下:
在这里插入图片描述

http://www.lryc.cn/news/114401.html

相关文章:

  • 资深测试老鸟整理,性能测试-常见调优详细,卷起来...
  • 【第五章 flutter学习之flutter进阶组件-上篇】
  • 鸿蒙边缘计算网关正式开售
  • Bytebase 2.5.0 - VCS 集成支持 Azure DevOps,支持达梦数据库
  • tomcat通过systemctl启动时报错Cannot find /usr/local/tomcat/bin/setclasspath.sh
  • Django架构图
  • vue- 创建wms-web项目
  • 集成学习:机器学习模型如何“博采众长”
  • 排序算法(二)
  • CVPR 2023 | 无监督深度概率方法在部分点云配准中的应用
  • HTTP隧道识别与防御:机器学习的解决方案
  • 【MMU】认识 MMU 及内存映射的流程
  • Clion开发Stm32之存储模块(W25Q64)驱动编写
  • SpringBoot动态切换数据源
  • [C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...
  • SAP ABAP元素域值描述通过函数(DD_DOMVALUE_TEXT_GET)获取
  • 原型模式与享元模式:提升系统性能的利器
  • uniapp封装手写签名
  • 掌握 JVM 调优命令
  • 扩增子分析流程——Lotus2: 一行命令完成所有分析
  • 微服务 云原生:搭建 Harbor 私有镜像仓库
  • Ceph入门到精通-远程开发Windows下使用SSH密钥实现免密登陆Linux服务器
  • APP外包开发的开发语言对比
  • 基于Python++PyQt5马尔科夫模型的智能AI即兴作曲—深度学习算法应用(含全部工程源码+测试数据)
  • Android中简单封装Livedata工具类
  • 国内大模型在局部能力上已超ChatGPT
  • 监控设置ip地址怎么设置
  • 力扣:56. 合并区间(Python3)
  • 最小二乘问题和非线性优化
  • Selenium/webdriver原理解析