【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.{DecisionTreeClassificationModel, DecisionTreeClassifier}  
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  
import org.apache.spark.rdd.RDD  
import org.apache.spark.sql.{DataFrame, SparkSession}  /**  * 决策树分类器,实现鸢尾花分类  */  //case class Iris(features: org.apache.spark.ml.linalg.Vector, label: String)  // MLlibLogisticRegression 中存在该样例类,这里不用写,一个包里不存在这个样例类时需要写object MLlibDecisionTreeClassifier {  def main(args: Array[String]): Unit = {  val spark: SparkSession = SparkSession.builder().master("local[2]")  .appName("Spark MLlib DecisionTreeClassifier").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")  println("鸢尾花原始数据如下:")  df.map(t => t(1)+":"+t(0)).collect().foreach(println)  //    处理特征和标签,以及数据分组  val labelIndexer: StringIndexerModel = new StringIndexer().setInputCol("label").setOutputCol(  "indexedLabel").fit(df)  val featureIndexer: VectorIndexerModel = new VectorIndexer().setInputCol("features")  .setOutputCol("indexedFeatures").setMaxCategories(4).fit(df)  //这里我们设置一个labelConverter,目的是把预测的类别重新转化成字符型的  val labelConverter: IndexToString = new IndexToString().setInputCol("prediction")  .setOutputCol("predictedLabel").setLabels(labelIndexer.labels)  //接下来,我们把数据集随机分成训练集和测试集,其中训练集占70%。  val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3))  val dtClassifier: DecisionTreeClassifier = new DecisionTreeClassifier()  .setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures")  //在pipeline中进行设置  val pipelinedClassifier: Pipeline = new Pipeline()  .setStages(Array(labelIndexer, featureIndexer, dtClassifier, labelConverter))  //训练决策树模型  val modelClassifier: PipelineModel = pipelinedClassifier.fit(trainingData)  //进行预测  val predictionsClassifier: DataFrame = modelClassifier.transform(testData)  predictionsClassifier.select("predictedLabel", "label", "features").show(5)  //    评估决策树分类模型  val evaluatorClassifier: MulticlassClassificationEvaluator = new MulticlassClassificationEvaluator()  .setLabelCol("indexedLabel")  .setPredictionCol("prediction").setMetricName("accuracy")  val accuracy: Double = evaluatorClassifier.evaluate(predictionsClassifier)  println("Test Error = " + (1.0 - accuracy))  val treeModelClassifier: DecisionTreeClassificationModel = modelClassifier.stages(2)  .asInstanceOf[DecisionTreeClassificationModel]  println("Learned classification tree model:\n" + treeModelClassifier.toDebugString)  spark.stop()  }  }

![[Pasted image 20230807184336.png]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/80743.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django的FBV和CBV

Django的FBV和CBV 基于django开发项目时,对于视图可以使用 FBV 和 CBV 两种模式编写。 FBV,function base views,其实就是编写函数来处理业务请求。 from django.contrib import admin from django.urls import path from app01 import view…

xcode打包导出ipa

转载:xcode打包导出ipa 目录 转载:xcode打包导出ipa 第一步:注册苹果开发者账号 第二步:下载APP Uploader 第三步:使用xcode打包导出ipa文件,供其他人内测 众所周知,在开发苹果应用时需要使…

通达信上涨回调选股公式,趋势指标和摆动指标结合使用

在前面的文章中,介绍了赫尔均线 (HMA)和随机RSI(StochRSI),这两个指标分别属于趋势指标和摆动指标。趋势指标和摆动指标是技术分析中常用的两类指标,用于分析市场的走势和波动,它们的计算方法、应用场景都是有区别的。今天利用两类…

PowerDesigner数据库设计工具使用笔记

简单记录下这个数据库设计工具的使用,在开发中设计数据库过程用得上,好记性不如烂笔头Q 显示窗口 PowerDesigner的工具箱原来叫palette,现在叫Toolbox,大概是PowerDesigner 16版本更名的 工具类View >ToolBox 即可 选择数据…

学术资源加速

以下为可以加速访问的学术资源地址: github.comgithubusercontent.comgithubassets.comhuggingface.co 编辑 /etc/network_turbo vim /etc/network_turbo 内容格式参考如下: export no_proxylocalhost,127.0.0.1 export http_proxyhttp://127.0.0.…

pom文件---maven

027-Maven 命令行-实验四-生成 Web 工程-执行生成_ev_哔哩哔哩_bilibili 27节.后续补充 一.maven下载安装及配置 1)maven下载 2) settings文件配置本地仓库 3)settings配置远程仓库地址 4)配置maven工程的基础JDK版本 5)确认JDK环境变量配置没问题,配置maven的环境变量 验证…

GD32F103VE外部中断

GD32F103VE外部中断线线0~15,对应外部IO口的输入中断。它有7个中断向量,外部中断线0 ~ 4分别对应EXTI0_IRQn ~ EXTI4_IRQn中断向量;外部中断线 5 ~ 9 共用一个 EXTI9_5_IRQn中断向量;外部中断线10~15 共用一个 EXTI15_10_IRQn中断…

5 小时玩转阿里云 Flink 实时湖仓,速速报名!

阿里云 Flink 专家与传智教育高级顾问联合出品,5 小时玩转阿里云 Flink 实时湖仓,项目依托于传智教育博学谷线上教育平台数字化建设场景,真实还原实时计算业务细节,学完后掌握基于阿里云的 Flink CDC,Paimon&#xff0…

前台自动化测试:基于敏捷测试驱动开发(TDD)的自动化测试原理

一、自动化测试概述 自动化测试主要应用到查询结果的自动化比较,把借助自动化把相同的数据库数据的相同查询条件查询到的结果同理想的数据进行自动化比较或者同已经保障的数据进行不同版本的自动化比较,减轻人为的重复验证测试。多用户并发操作需要自动…

【雕爷学编程】Arduino动手做(194)---makeblock mbot 主控板

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

洪水肆虐京津冀,救灾新闻别虚假

在洪水肆虐京津冀的今天,本“人民体验官”将要推广人民日报官方微博文化产品《辛苦了!子弟兵蹚淤泥推舟为村民送物资》,并联系各方媒体的相关报道夹叙夹议。 图:来源“人民体验官”推广平台 人民微博用正能量语气告诉朝野上下&am…

Linux进程信号

全文目录 概念什么是Linux信号?信号行为(core dump)如何理解信号被进程保存:信号发送的本质: 产生信号1. 终端按键(组合键)变成信号:2. 通过系统调用接口向进程发送信号3. 软件条件产…

模拟实现消息队列项目(系列3) -- 服务器模块(硬盘管理)

目录 前言 1. 创建项目 2. 创建核心类 2.1 Exchange 2.2 MSQueue 2.3 Binding 2.4 Message 3. 数据库设计 3.1 SQLite 配置 3.2 Mapper层代码实现 3.2.1 创建表操作 3.2.2 交换机 队列 绑定的增加和删除 3.3 实现DataBaseManager 3.4 DataBaseManager单元测试 4.…

“他“是怎么拿offer的?全网最全,性能测试面试题+答案(超全整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、什么是负载测试…

R语言3_安装SeurateData

环境Ubuntu22/20, R4.1 在命令行中键入, apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev # libcairo2-dev :: systemfonts # libgtk :: textshaping进入r语言交互环境,键入, instal…

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转, 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用,使用递归互斥信号量,但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…

Git仓关联多个远程仓路径

前言 Git仓如果需要将代码push到多个仓,常用的做法是添加多个远程仓路径,然后分别push。这样虽然可以实现目的,但是需要多次执行push指令,很麻烦。 本文介绍关联多个远程仓路径且执行一次push指令的方法:git remote …

conda 环境 numpy 安装报错需要 Microsoft Visual C++ 14.0

到公司装深度学校环境。项目较旧,安装依赖,一堆报错(基于 conda 环境): numpy 安装报需要 C 14.0 No module named numpy.distutils._msvccompiler in numpy.distutils; trying from distutilserror: Microsoft Visu…

Maven-生命周期及命令

关于本文 ✍写作原因 之前在学校学习的时候,编写代码使用的项目都是单体架构,导入开源框架依赖时只需要在pom.xml里面添加依赖,点一下reload按钮即可解决大部分需求;但是在公司使用了dubbo微服务架构之后发现只知道使用reload不足…

COSV Schema 1.0正式对外发布,棱镜七彩参与制定工作

近期,CCF版开源漏洞信息描述规范COSV Schema 1.0正式制定并对外发布,棱镜七彩参与制定工作。 图 COSV Schema 1.0制定过程贡献单位及专家名单 作为开源软件治理与软件供应链安全领域的先行者,棱镜七彩一直致力于提升开源效能、防范开源漏洞。…