Spark机器学习

Spark机器学习

Pipelines中的主要概念

MLlib 提供的API可以通过Pipelines将多个复杂的机器学习算法结合成单个pipeline或者单个工作流。这个概念和scikit-learn里的概念类似,根据官方的说法是,此抽象概念的设计灵感来自于scikit-learn。

·        DataFrame:通过Spark SQL 组件里的DataFrame作为机器学习的数据集。支持多种数据类型.比如 DataFrame 可以将文本,数据库等外部数据源划分为不同的列,包含特征向量, 特征值等。

·        Transformer: 一个 Transformer可以将一个DataFrame 转换成另一个DataFrame. 比如, 一个机器学习模型可以将带有特征值的DataFrame转换为一个带有模型预测结果数据的DataFrame.

·        Estimator:通过 DataFrame数据集进行训练 产生一个机器学习模型的算法。

·        Pipeline:联合多个 Transformer和 Estimator构成一个机器学习工作流。

·        Parameter: 所有Transformer和 Estimator指定参数的共享API。

DataFrame

DataFrame里广泛运用的数据结构,可以包含向量,文本,图片,以及结构化数据。DataFrame通过Spark SQL支持多种数据源。

工作流程如图所示:

机器学习中Pipleline流程图

正如图中所示,Pipeline有三个阶段,每个阶段要么是Transformer ,要么就是Estimator,这些阶段按照一定的顺序执行,执行的过程中,通过圆柱体代表的DataFrame类型的Raw text产生一个新的Words(DataFrame类型),最后建立了一个LogisticRegressionModel。图中的Tokenizer,HashingTF都是Transformer,而LogisticRegressionModel是Estimator 。

在Transformer  阶段,主要调用transform()方法进行计算。

Estimator阶段,主要调用fit()方法进行计算。

DAG Pipelines:多个阶段形成一个pipeline,同理,DAG Pipelines就是多个pipeline组成的一个有向无环图。

运行时检查:数据结构DataFrame中可以有各种各样的数据,但是在编译的时候不会检查数据的数据类型,而是在运行的时候才根据DataFrame的Schema来检查数据类型。

唯一ID标识:Pipeline的每一个阶段(stage)都通过id来进行唯一的标识,同一个相同的实列,比如HashingTF不会插入到同一个Pipeline俩次,因为每一个stage都有自身的唯一的ID来进行标识。

保存和读取pipeline

代码案例:

Estimator, Transformer, 以及 Param综合案例

importorg.apache.spark.ml.classification.LogisticRegression

importorg.apache.spark.ml.linalg.{Vector,Vectors}

importorg.apache.spark.ml.param.ParamMap

importorg.apache.spark.sql.Row

// Prepare training data from a list of (label, features)tuples.

valtraining=spark.createDataFrame(Seq(

(1.0,Vectors.dense(0.0,1.1,0.1)),

(0.0,Vectors.dense(2.0,1.0,-1.0)),

(0.0,Vectors.dense(2.0,1.3,1.0)),

(1.0,Vectors.dense(0.0,1.2,-0.5))

)).toDF("label","features")

// Create a LogisticRegression instance. This instance is anEstimator.

vallr=newLogisticRegression()

// Print out the parameters, documentation, and any defaultvalues.

println("LogisticRegressionparameters:\n"+lr.explainParams()+"\n")

// We may set parameters using setter methods.

lr.setMaxIter(10)

.setRegParam(0.01)

// Learn a LogisticRegression model. This uses the parametersstored in lr.

valmodel1=lr.fit(training)

// Since model1 is a Model (i.e., a Transformer produced byan Estimator),

// we can view the parameters it used during fit().

// This prints the parameter (name: value) pairs, where namesare unique IDs for this

// LogisticRegression instance.

println("Model 1 was fit usingparameters: "+model1.parent.extractParamMap)

// We may alternatively specify parameters using a ParamMap,

// which supports several methods for specifying parameters.

valparamMap=ParamMap(lr.maxIter->20)

.put(lr.maxIter,30) // Specify 1 Param. This overwrites the original maxIter.

.put(lr.regParam->0.1,lr.threshold->0.55) // Specify multiple Params.

// One can also combine ParamMaps.

valparamMap2=ParamMap(lr.probabilityCol->"myProbability") // Change output column name.

valparamMapCombined=paramMap++paramMap2

// Now learn a new model using the paramMapCombinedparameters.

// paramMapCombined overrides all parameters set earlier vialr.set* methods.

valmodel2=lr.fit(training,paramMapCombined)

println("Model 2 was fit usingparameters: "+model2.parent.extractParamMap)

// Prepare test data.

valtest=spark.createDataFrame(Seq(

(1.0,Vectors.dense(-1.0,1.5,1.3)),

(0.0,Vectors.dense(3.0,2.0,-0.1)),

(1.0,Vectors.dense(0.0,2.2,-1.5))

)).toDF("label","features")

// Make predictions on test data using theTransformer.transform() method.

// LogisticRegression.transform will only use the ‘features‘column.

// Note that model2.transform() outputs a ‘myProbability‘column instead of the usual

// ‘probability‘ column since we renamed thelr.probabilityCol parameter previously.

model2.transform(test)

.select("features","label","myProbability","prediction")

.collect()

.foreach{caseRow(features:Vector,label:Double,prob:Vector,prediction:Double)=>

println(s"($features$label) -> prob=$prob, prediction=$prediction")

}

Pipeline单独的案例代码

importorg.apache.spark.ml.{Pipeline,PipelineModel}
importorg.apache.spark.ml.classification.LogisticRegression
importorg.apache.spark.ml.feature.{HashingTF,Tokenizer}
importorg.apache.spark.ml.linalg.Vector
importorg.apache.spark.sql.Row
 
// Prepare training documents from a list of (id, text, label) tuples.
val training = spark.createDataFrame(Seq(
  (0L,"a b c d e spark",1.0),
  (1L,"b d",0.0),
  (2L,"spark f g h",1.0),
  (3L,"hadoop mapreduce",0.0)
)).toDF("id","text","label")
 
// Configure an ML pipeline, which consists of three stages: tokenizer, hashingTF, and lr.
val tokenizer =newTokenizer()
  .setInputCol("text")
  .setOutputCol("words")
val hashingTF =newHashingTF()
  .setNumFeatures(1000)
  .setInputCol(tokenizer.getOutputCol)
  .setOutputCol("features")
val lr =newLogisticRegression()
  .setMaxIter(10)
  .setRegParam(0.001)
val pipeline =newPipeline()
  .setStages(Array(tokenizer, hashingTF, lr))
 
// Fit the pipeline to training documents.
val model = pipeline.fit(training)
 
// Now we can optionally save the fitted pipeline to disk
model.write.overwrite().save("/tmp/spark-logistic-regression-model")
 
// We can also save this unfit pipeline to disk
pipeline.write.overwrite().save("/tmp/unfit-lr-model")
 
// And load it back in during production
val sameModel =PipelineModel.load("/tmp/spark-logistic-regression-model")
 
// Prepare test documents, which are unlabeled (id, text) tuples.
val test = spark.createDataFrame(Seq(
  (4L,"spark i j k"),
  (5L,"l m n"),
  (6L,"spark hadoop spark"),
  (7L,"apache hadoop")
)).toDF("id","text")
 
// Make predictions on test documents.
model.transform(test)
  .select("id","text","probability","prediction")
  .collect()
  .foreach{caseRow(id:Long, text:String, prob:Vector, prediction:Double)=>
    println(s"($id, $text) --> prob=$prob, prediction=$prediction")
  }
时间: 2024-10-17 22:27:26

Spark机器学习的相关文章

Spark机器学习实战视频

深入浅出Spark机器学习实战(用户行为分析) 课程观看地址:http://www.xuetuwuyou.com/course/144 课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程目标  熟练掌握SparkSQL的各种操作,深入了解Spark内部实现原理  深入了解SparkML机器学习各种算法模型的构建和运行  熟练Spark的API并能灵活运用  能掌握Spark在工作当中的运用 二.适合人群  适合给,有java,scala基础,想往大数据spark机器

Spark机器学习:Spark 编程模型及快速入门

http://blog.csdn.net/pipisorry/article/details/52366356 Spark编程模型 SparkContext类和SparkConf类 我们可通过如下方式调用 SparkContext 的简单构造函数,以默认的参数值来创建相应的对象.val sc = new SparkContext("local[4]", "Test Spark App") 这段代码会创建一个4线程的 SparkContext 对象,并将其相应的任务命

Spark机器学习· 实时机器学习

Spark机器学习 1 在线学习 模型随着接收的新消息,不断更新自己:而不是像离线训练一次次重新训练. 2 Spark Streaming 离散化流(DStream) 输入源:Akka actors.消息队列.Flume.Kafka.-- http://spark.apache.org/docs/latest/streaming-programming-guide.html 类群(lineage):应用到RDD上的转换算子和执行算子的集合 3 MLib+Streaming应用 3.0 build

Spark机器学习——互动出版网

这篇是计算机类的优质预售推荐>>>><Spark机器学习> 当机器学习遇上最流行的并行计算框架Spark...... 编辑推荐 Apache Spark是一个分布式计算框架,专为满足低延迟任务和内存数据存储的需求而优化.现有并行计算框架中,鲜有能兼顾速度.可扩展性.内存处理以及容错性,同时还能简化编程,提供灵活.表达力丰富的强大API的,Apache Spark就是这样一个难得的框架. 本书介绍了Spark的基础知识,从利用Spark API来载入和处理数据,到将数据作

Spark机器学习解析下集

上次我们讲过<Spark机器学习(上)>,本文是Spark机器学习的下部分,请点击回顾上部分,再更好地理解本文. 1.机器学习的常见算法 常见的机器学习算法有:l   构造条件概率:回归分析和统计分类:l   人工神经网络:l   决策树:l   高斯过程回归:l   线性判别分析:l   最近邻居法:l   感知器:l   径向基函数核:l   支持向量机:l   通过再生模型构造概率密度函数:l   最大期望算法:l   graphical model :包括贝叶斯网和 Markov 随机

掌握Spark机器学习库 大数据开发技能更进一步

第1章 初识机器学习在本章中将带领大家概要了解什么是机器学习.机器学习在当前有哪些典型应用.机器学习的核心思想.常用的框架有哪些,该如何进行选型等相关问题.1-1 导学1-2 机器学习概述1-3 机器学习核心思想1-4 机器学习的框架与选型.. 第2章 初识MLlib本章中,将介绍Spark的机器学习库,对比Spark当前两种机器学习库(MLLib/ML)的区别,同时介绍Spark机器学习库的应用场景以及行业应用优势.2-1 MLlib概述2-2 MLlib的数据结构2-3 MLlib与ml2-

掌握Spark机器学习库 大数据开发技能更进一步 高清无密

掌握Spark机器学习库 大数据开发技能更进一步 "大数据时代"已经不是一个新鲜词汇了,随着技术的商业化推广,越来越多的大数据技术已经进入人们的生活.与此同时,大数据技术的相关岗位需求也越来越多,更多的同学希望向大数据方向转型.本课程主要讲解Spark机器学习库,侧重实践的讲解,同时也以浅显易懂的方式介绍机器学习算法的内在原理.学习本课程,可以为想要转型大数据工程师或是入行大数据工作的同学提供实践指导作用.欢迎感兴趣的小伙伴们一起来学习. 第1章 初识机器学习 在本章中将带领大家概要了

2019-1-18 Spark 机器学习

2019-1-18 Spark 机器学习 机器学习 模MLib板 预测 //有视频 后续会补充 1547822490122.jpg 1547822525716.jpg 1547822330358.jpg 1547822508907.jpg // 加空行 图片才会居中显示 否则 靠左显示 --by 凡正(Iamfbz) 原文地址:https://www.cnblogs.com/fbz123456/p/10290477.html

Spark机器学习实战 (十一) - 文本情感分类项目实战

0 相关源码 将结合前述知识进行综合实战,以达到所学即所用.文本情感分类这个项目会将分类算法.文本特征提取算法等进行关联,使大家能够对Spark的具体应用有一个整体的感知与了解. 1 项目总体概况 2 数据集概述 数据集 3 数据预处理 4 文本特征提取 官方文档介绍提取,转换和选择特征本节介绍了使用特征的算法,大致分为以下几组: 提取:从"原始"数据中提取特征 转换:缩放,转换或修改特征 选择:从中选择一个子集一组更大的特征局部敏感散列(LSH):这类算法将特征变换的各个方面与其他算