文档章节

Spark机器学习

无畏的老巨人
 无畏的老巨人
发布于 08/13 10:06
字数 767
阅读 2
收藏 0

构建机器学习工作流

目的

查找出所有包含”spark”的句子,即将包含”spark”的句子的标签设为1,没有”spark”的句子的标签设为0

基本流程

  1. 构建训练数据集

  2. 定义 Pipeline 中的各个工作流阶段PipelineStage,包括转换器和评估器,具体的,包含tokenizer, hashingTF和lr三个步骤

  3. 组织PipelineStages 并创建一个Pipeline

    Pipeline本质上是一个Estimator,在它的fit()方法运行之后,它将产生一个PipelineModel,它是一个Transformer

  4. 构建测试数据

  5. 调用训练好的PipelineModel的transform()方法,让测试数据按顺序通过拟合的工作流,生成所需要的预测结果

决策树分类

  1. 介绍

决策树(decision tree)是一种基本的分类与回归方法,这里主要介绍用于分类的决策树。决策树模式呈树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。学习时利用训练数据,根据损失函数最小化的原则建立决策树模型;预测时,对新的数据,利用决策树模型进行分类. 以iris数据集(iris)为例进行分析。iris以鸢尾花的特征作为数据来源,数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集。决策树可以用于分类和回归

  1. 实现
import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.linalg.{Vector,Vectors}
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.feature.{IndexToString, StringIndexer, VectorIndexer}
import spark.implicits._
import org.apache.spark.ml.classification.DecisionTreeClassificationModel
import org.apache.spark.ml.classification.DecisionTreeClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.evaluation.RegressionEvaluator
import org.apache.spark.ml.regression.DecisionTreeRegressionModel
import org.apache.spark.ml.regression.DecisionTreeRegressor

//读取数据,简要分析
case class Iris(features: org.apache.spark.ml.linalg.Vector, label: String)
val data = spark.sparkContext.textFile("file:///home/hadoop/iris.txt").map(_.split(",")).map(p => Iris(Vectors.dense(p(0).toDouble,p(1).toDouble,p(2).toDouble, p(3).toDouble),p(4).toString())).toDF()
data.createOrReplaceTempView("iris")
val df = spark.sql("select * from iris")

//进一步处理特征和标签,以及数据分组
val labelIndexer = new StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(df)
val featureIndexer = new VectorIndexer().setInputCol("features").setOutputCol("indexedFeatures").setMaxCategories(4).fit(df)
val labelConverter = new IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.labels)
val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3))

// 构建决策树分类模型
val dtClassifier = new DecisionTreeClassifier().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures")
val pipelinedClassifier = new Pipeline().setStages(Array(labelIndexer, featureIndexer, dtClassifier, labelConverter))
val modelClassifier = pipelinedClassifier.fit(trainingData)
val predictionsClassifier = modelClassifier.transform(testData)
// 评估决策树分类模型
 val evaluatorClassifier = new MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction").setMetricName("accuracy")
 val accuracy = evaluatorClassifier.evaluate(predictionsClassifier)
 val treeModelClassifier = modelClassifier.stages(2).asInstanceOf[DecisionTreeClassificationModel]
 println("Learned classification tree model:\n" + treeModelClassifier.toDebugString)
 
 // 构建决策树回归模型
 val dtRegressor = new DecisionTreeRegressor().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures")
 val pipelineRegressor = new Pipeline().setStages(Array(labelIndexer, featureIndexer, dtRegressor, labelConverter))
 val modelRegressor = pipelineRegressor.fit(trainingData)
 val predictionsRegressor = modelRegressor.transform(testData)
  predictionsRegressor.select("predictedLabel", "label", "features").show(20)
  
  // 评估决策树回归模型
  val evaluatorRegressor = new RegressionEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction").setMetricName("rmse")
  val rmse = evaluatorRegressor.evaluate(predictionsRegressor)
  val treeModelRegressor = modelRegressor.stages(2).asInstanceOf[DecisionTreeRegressionModel]
  println("Learned regression tree model:\n" + treeModelRegressor.toDebugString)

© 著作权归作者所有

上一篇: Scrapy使用
下一篇: 高级bash脚本
无畏的老巨人

无畏的老巨人

粉丝 17
博文 96
码字总数 96708
作品 0
宁波
CTO(技术副总裁)
私信 提问
【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第1节②

三、你为什么需要Spark; 你需要Spark的十大理由: 1,Spark是可以革命Hadoop的目前唯一替代者,能够做Hadoop做的一切事情,同时速度比Hadoop快了100倍以上: Logistic regression in Hadoo...

Spark亚太研究院
2014/12/16
432
2
如何成为云计算大数据Spark高手

Spark采用一个统一的技术堆栈解决了云计算大数据的如流处理、图技术、机器学习、NoSQL查询等方面的所有核心问题,具有完善的生态系统,这直接奠定了其一统云计算大数据领域的霸主地位; 要想...

Spark亚太研究院
2014/06/13
2.1K
3
Spark on Angel:Spark机器学习的核心加速器

Spark的核心概念是RDD,而RDD的关键特性之一是其不可变性,来规避分布式环境下复杂的各种并行问题。这个抽象,在数据分析的领域是没有问题的,它能最大化的解决分布式问题,简化各种算子的复...

腾讯开源
2017/08/01
3
0
基于Spark的机器学习实践 (三) - 实战环境搭建

0 相关源码 1 Spark环境安装 ◆ Spark 由scala语言编写,提供多种语言接口,需要JVM ◆ 官方为我们提供了Spark 编译好的版本,可以不必进行手动编译 ◆ Spark安装不难,配置需要注意,并且不一定需...

javaedge
04/09
0
0
Spark 数据分析导论-笔记

Spark Core Spark Core 实现了Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。 Spark Core 中还包含了 对弹性分布式数据集(resilient distributed dataset,简...

Java搬砖工程师
2018/12/26
47
0

没有更多内容

加载失败,请刷新页面

加载更多

用盛金公式解三次方程(ansi c版)

/* cc cubic.c -lm gcc cubic.c -lm Shengjin's Formulas Univariate cubic equation aX ^ 3 + bX ^ 2 + cX + d = 0, (a, b, c, d < R, and a!= 0). Multiple root disc......

wangxuwei
33分钟前
4
0
JBolt开发平台入门(16)- 弹出Dialog显示指定区域的html内容

在JBolt里,有个主从表Demo。 子表中除了普通的table显示,还有其它从表显示形式 比如下方案例:是针对一个升级管理子表中存放版本的changelog富文本信息。 需求是点击左上角的弹出查看按钮,...

山东-小木
38分钟前
29
0
TensorFlow .NET 队列操作

ThensorFlow能够并行处理多个任务,而队列是一种强大的异步计算机制。 如果我们拥有大型数据集,则可以大大加快模型的训练过程。 当以小批量读取,预处理和提取我们的训练数据时,此功能特别...

HaipingChen
39分钟前
8
0
Redis持久化

 这节介绍Redis的持久化,包括RDB和AOF两种方式。 1.RDB持久化  Redis能够将内存中的数据持久化到RDB文件中,避免数据丢失。RDB文件的格式如下示:  第一部分是开头的5个字节,值为REDIS...

程序员啊驼
39分钟前
5
0
黄海广:那些年做的学术公益——你不是一个人在战斗

来源:机器学习初学者 我叫黄海广,这篇文章主要写了我的学术公益之路。我希望初学者少踩一些坑,我也希望我能做个“雪中送炭”的人,希望越来越多的人加入到学术公益的道路上来。 2014年9月...

ApacheCN_飞龙
53分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部