MLlib程序包如下图所示
如图所示。
每个模型都有一个伴生对象,是模型的入口,定义了模型训练的train方法。而实际使用时调用的是run方法。有点类似Java中的线程。
同时Spark 机器学习的API,将从RDD过渡到DataSet和DataFrame。
(1)Spark 机器学习系统
Spark机器学习系统,类似于一个数据流水线。其架构如下
机器学习架构1、数据预处理
首先查看数据统计信息,包括最大值、均值、最小值、分位数、方差等
案例如下:
Data为读入数据的RDD
schemauser = saprk.createDataFrame(Data).#DataFrame类似数据库中的表或者视图,可以对其进行查询等,也可以将数据中某几个列组合起来构成
schemauser.createOrReplaceTempView("user")
schemauser.describe("userid","age","gender","XXX").show()即可得出。
2、数据质量分析,主要注意缺失值、异常值、不一样的值和错误数据
缺失值可以通过df.count()得到。或者画出线箱图来看。 其使用如https://baike.baidu.com/item/%E7%AE%B1%E5%BD%A2%E5%9B%BE/10671164?fr=aladdin
3、数据特征分析
包括特征分布分析、对比分析、统计量分析(特征之间的相关性分析)
主要分析特征的分布类型和是否对称等。(在进行机器学习前所有特征都进行了数字化)通过柱状图等实现
hist(age,bins=20,color = 'lightblue',normed = true)
(2)PipeLine
一个PipeLine包含多个Stage ,每个Stage完成一个任务。由两个基本组建组成Transformer和Estimator。transformer是数据转换器,Estimator是评估器。transformer通过transform()方法转换数据;Estimator通过fit()方法进行训练。
使用PipeLine进行训练的过程为:
#输入数据为文本和对应标签
#定义三个Stage ,tokenizer,hashingTF,lr
val tokenizer = new Tokenizer()
.setInputCol("text")
.setoutputCl("word")
val hashingTF = new HashingTF()
.setNumFeatures(1000)
.setInputCol(tokenizer.getOutputCol)
.setoutputCol("feature")
val lr = new LogistiicRegression()
.setMaxIter(10)
.setRegParam(0.001)
val pipeline = new PipeLine()
.setDtage(Array(tokenizer,hashingTF,lr))
val model = pipeline.fit(Data)
(3)在训练时可以设置参数数组,通过循环训练不同参数下的模型,选择效果最好的
4、MLlib最核心的是ML Optimizer 。它可以把复杂的学习任务转化为学习计划,并提供内部实现好的算法和参数。
网友评论