地址:

 
Spark PipeLine

是基于DataFrames的高层的API,可以方便用户构建和调试机器学习流水线

可以使得多个机器学习算法顺序执行,达到高效的数据处理的目的
 
DataFrame是来自Spark SQL的ML DataSet 可以存储一系列的数据类型,text,特征向量,Label和预测结果
 
Transformer:将DataFrame转化为另外一个DataFrame的算法,通过实现transform()方法
Estimator:将DataFrame转化为一个Transformer的算法,通过实现fit()方法
 
PipeLine:将多个Transformer和Estimator串成一个特定的ML Wolkflow
Parameter:Tansformer和Estimator共用同一个声明参数的API
 
Transformer和Estimator是PipeLine的Stage
Pipeline是一系列的Stage按照声明的顺序排列成的工作流
 
Transformer.transform()和Estimator.fit()都是无状态的
每一个Transformer和Estimator的实例都有唯一的ID在声明参数的时候非常有用
 
下面是一个线性的PipeLine的流程

 
上面创建的是线性的PipeLine,每一步都依赖上一步的结果
如果数据流可以组成有向不循环图(Directed Acyclic Graph DAG)
那么可以创建Non-Linear Pipeline
 
RuntimeCheching:因为PipeLine可以操作多种类型的DataFrame
所以不能使用编译时检测
那么PipeLine或者PipeLine Model使用运行时检测
这种检测使用了DataFrame Schema这个Schema是DataFrame列的数据类型的描述
 
Unique PipeLine Stage:PipeLine Stage应当都是唯一的实例,都拥有唯一的ID
 
Param是一个命名参数,带有自包含文档
ParamMap是一个参数与值的对(parameter,value)
 
将参数传递给算法主要有下面两种方式:
1. 为实例设置参数,若Ir是LogisticRegression的实例,调用Ir.SetMaxIter(10)意味着Ir.fit()做多调用10次
2. 传递一个ParamMap给fit()或者transform()那么位于map中的所有的parameter都会通过setter方法override以前的参数
 
很多时候将PipeLine保存到disk方便以后的使用是值得的
Spark 1.6时候,model Import/Export函数被添加到PipeLine API
大部分transformer和一些ML Model支持I/O
 
下面是基本组件的一些操作的例子:
 
 
  1. #导入向量和模型
  2. from pyspark.ml.linalg importVectors
  3. from pyspark.ml.classification importLogisticRegression
  4. #准备训练数据
  5. # Prepare training data from a list of (label, features) tuples.
  6. training = spark.createDataFrame([
  7. (1.0,Vectors.dense([0.0,1.1,0.1])),
  8. (0.0,Vectors.dense([2.0,1.0,-1.0])),
  9. (0.0,Vectors.dense([2.0,1.3,1.0])),
  10. (1.0,Vectors.dense([0.0,1.2,-0.5]))],["label","features"])
  11. #创建回归实例,这个实例是Estimator
  12. # Create a LogisticRegression instance. This instance is an Estimator.
  13. lr =LogisticRegression(maxIter=10, regParam=0.01)
  14. #打印出参数和文档
  15. # Print out the parameters, documentation, and any default values.
  16. print"LogisticRegression parameters:\n"+ lr.explainParams()+"\n"
  17. #使用Ir中的参数训练出Model1
  18. # Learn a LogisticRegression model. This uses the parameters stored in lr.
  19. model1 = lr.fit(training)
  20. # Since model1 is a Model (i.e., a transformer produced by an Estimator),
  21. # we can view the parameters it used during fit().
  22. # This prints the parameter (name: value) pairs, where names are unique IDs for this
  23. # LogisticRegression instance.
  24. #查看model1在fit()中使用的参数
  25. print"Model 1 was fit using parameters: "
  26. print model1.extractParamMap()
  27. #修改其中的一个参数
  28. # We may alternatively specify parameters using a Python dictionary as a paramMap
  29. paramMap ={lr.maxIter:20}
  30. #覆盖掉
  31. paramMap[lr.maxIter]=30# Specify 1 Param, overwriting the original maxIter.
  32. #更新参数对
  33. paramMap.update({lr.regParam:0.1, lr.threshold:0.55})# Specify multiple Params.
  34. # You can combine paramMaps, which are python dictionaries.
  35. #新的参数,合并为两组参数对
  36. paramMap2 ={lr.probabilityCol:"myProbability"}# Change output column name
  37. paramMapCombined = paramMap.copy()
  38. paramMapCombined.update(paramMap2)
  39. #重新得到model2并拿出来参数看看
  40. # Now learn a new model using the paramMapCombined parameters.
  41. # paramMapCombined overrides all parameters set earlier via lr.set* methods.
  42. model2 = lr.fit(training, paramMapCombined)
  43. print"Model 2 was fit using parameters: "
  44. print model2.extractParamMap()
  45. #准备测试的数据
  46. # Prepare test data
  47. test = spark.createDataFrame([
  48. (1.0,Vectors.dense([-1.0,1.5,1.3])),
  49. (0.0,Vectors.dense([3.0,2.0,-0.1])),
  50. (1.0,Vectors.dense([0.0,2.2,-1.5]))],["label","features"])
  51. # Make predictions on test data using the Transformer.transform() method.
  52. # LogisticRegression.transform will only use the 'features' column.
  53. # Note that model2.transform() outputs a "myProbability" column instead of the usual
  54. # 'probability' column since we renamed the lr.probabilityCol parameter previously.
  55. prediction = model2.transform(test)
  56. #得到预测的DataFrame打印出预测中的选中列
  57. selected = prediction.select("features","label","myProbability","prediction")
  58. for row in selected.collect():
  59. print row
 
 
下面是一个PipeLine的实例:
 
  1. from pyspark.ml importPipeline
  2. from pyspark.ml.classification importLogisticRegression
  3. from pyspark.ml.feature importHashingTF,Tokenizer
  4. #准备测试数据
  5. # Prepare training documents from a list of (id, text, label) tuples.
  6. training = spark.createDataFrame([
  7. (0L,"a b c d e spark",1.0),
  8. (1L,"b d",0.0),
  9. (2L,"spark f g h",1.0),
  10. (3L,"hadoop mapreduce",0.0)],["id","text","label"])
  11. #构建机器学习流水线
  12. # Configure an ML pipeline, which consists of three stages: tokenizer, hashingTF, and lr.
  13. tokenizer =Tokenizer(inputCol="text", outputCol="words")
  14. hashingTF =HashingTF(inputCol=tokenizer.getOutputCol(), outputCol="features")
  15. lr =LogisticRegression(maxIter=10, regParam=0.01)
  16. pipeline =Pipeline(stages=[tokenizer, hashingTF, lr])
  17. #训练出model
  18. # Fit the pipeline to training documents.
  19. model = pipeline.fit(training)
  20. #测试数据
  21. # Prepare test documents, which are unlabeled (id, text) tuples.
  22. test = spark.createDataFrame([
  23. (4L,"spark i j k"),
  24. (5L,"l m n"),
  25. (6L,"mapreduce spark"),
  26. (7L,"apache hadoop")],["id","text"])
  27. #预测,打印出想要的结果
  28. # Make predictions on test documents and print columns of interest.
  29. prediction = model.transform(test)
  30. selected = prediction.select("id","text","prediction")
  31. for row in selected.collect():
  32. print(row)

Spark.ML之PipeLine学习笔记的更多相关文章

  1. ML机器学习导论学习笔记

    机器学习的定义: 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.专门研究计算机怎样模拟或实现人类的学习行为,以 ...

  2. Spark ML下实现的多分类adaboost+naivebayes算法在文本分类上的应用

    1. Naive Bayes算法 朴素贝叶斯算法算是生成模型中一个最经典的分类算法之一了,常用的有Bernoulli和Multinomial两种.在文本分类上经常会用到这两种方法.在词袋模型中,对于一 ...

  3. spark ML pipeline 学习

    一.pipeline 一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出.这非常类似于流水线式工作,即通常会包含源数据ETL(抽取.转化.加载),数据预处理,指标提取,模型训练与 ...

  4. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  5. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  6. 使用spark ml pipeline进行机器学习

    一.关于spark ml pipeline与机器学习 一个典型的机器学习构建包含若干个过程 1.源数据ETL 2.数据预处理 3.特征选取 4.模型训练与验证 以上四个步骤可以抽象为一个包括多个步骤的 ...

  7. Spark ML Pipeline简介

    Spark ML Pipeline基于DataFrame构建了一套High-level API,我们可以使用MLPipeline构建机器学习应用,它能够将一个机器学习应用的多个处理过程组织起来,通过在 ...

  8. 机器学习框架ML.NET学习笔记【6】TensorFlow图片分类

    一.概述 通过之前两篇文章的学习,我们应该已经了解了多元分类的工作原理,图片的分类其流程和之前完全一致,其中最核心的问题就是特征的提取,只要完成特征提取,分类算法就很好处理了,具体流程如下: 之前介绍 ...

  9. 机器学习框架ML.NET学习笔记【7】人物图片颜值判断

    一.概述 这次要解决的问题是输入一张照片,输出人物的颜值数据. 学习样本来源于华南理工大学发布的SCUT-FBP5500数据集,数据集包括 5500 人,每人按颜值魅力打分,分值在 1 到 5 分之间 ...

随机推荐

  1. Windows cmd 颜色,字体,color font set up

    windows的cmds默认的字体很丑,丑的不认直视,『如花』一般. 但是总有用到的时候 这是我有优化的一种结果,怎么来弄呢 要字体颜色漂亮,先要在注册表的Console中注册你要使用的字体,这个至关 ...

  2. 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录

    使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录 C#进阶系列——WebApi 异常处理解决方案 [ASP.NET Web API教程]4.3 AS ...

  3. Dijkstra 算法、Kruskal 算法、Prim算法、floyd算法

    1.dijkstra算法 算最短路径的,算法解决的是有向图中单个源点到其他顶点的最短路径问题. 初始化n*n的数组. 2.kruskal算法 算最小生成树的,按权值加入 3.Prim算法 类似dijk ...

  4. 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法

    前言相信这样一个问题,大家都不会陌生,“有什么的方法可以使Android的程序APK不用安装,而能够直接启动”.发现最后的结局都是不能实现这个美好的愿望,而腾讯Android手机游戏平台却又能实现这个 ...

  5. okhttp封装

    对这玩意并不熟,网上有很多大神封装好的,但是懒得看里面的封装逻辑,索性自己简单做个封装,方便使用,出现bug也好查找: get请求: /** * get请求 * @param url * @param ...

  6. 【转】MYSQL入门学习之二:使用正则表达式搜索

    转载地址:http://www.2cto.com/database/201212/173869.html 一.正则表达式介绍   www.2cto.com   正则表达式是用来匹配文本的特殊的串(字符 ...

  7. syntactically incorrect() 404

    遇到这个错误就来记录一下吧. 这个错误是springMVC报出的错误.大致的意思就是form传值的类型和controller中的参数不符. 有可能是名字错误,有可能是类型不对.比如前面你传来的是  p ...

  8. 磕磕碰碰的Chrome之plugin开发

    前言 在Firefox下可用的npapi插件,在chrome下调用时遇到问题,于是尝试研究chrome下的ppapi插件,一路上真是磕磕碰碰,波折不断啊. 阶段一.复用npapi 尝试将npapi直接 ...

  9. CentOS 5/6.X 使用 EPEL YUM源

    参考:http://www.linuxidc.com/Linux/2013-08/88523.htm 大纲 一.什么是EPEL? 二.与163 YUM源比较 三.CentOS 5.X 安装使用EPEL ...

  10. Linux平台下线程池的原理及实现

    转自:http://blog.csdn.net/lmh12506/article/details/7753952 前段时间在github上开了个库,准备实现自己的线程池的,因为换工作的事,一直也没有实 ...