回归的模型均可抽象为多元线性回归,其优化方法一般为最小二乘法与梯度下降法等。一般选择使用梯度下降法求解,因为最小二乘法要求特征变量X必须是列满秩且需要求矩阵的逆,求解困难。
MLlib实现了分布式的随机梯度下降。其实现方法是:在每次迭代中,随机抽取一定比例的样本作为当前迭代的计算样本,对计算样本中的每一个样本分别计算梯度(在分布式的集群中),将这些样本的梯度进行累加,求得每个样本的平均梯度和损失,根据最新的梯度和损失对权重进行更新。
(1)线性回归
线性回归类 LinearRegressionWithSGD 传入RDD(Label,features格式)、迭代次数、步长等参数
使用 方法:
val model = LinearRegressionWithSGD.train(examples,numIterations,stepSize,miniBatchfraction)
val prediction = model.predict(examples.map(_.features))
val predictionAndlabel = prediction.zip(examples.map(_.label))
predict = predictionAndlabel (i).-1 ; labels = predictionAndlabel (i).-2
model.save(sc,path)
(2)逻辑回归
逻辑回归是线性回归加上Sigmoid函数。
逻辑斯特回归类 LogisticsRegressionWithSGD
优化方法来自optimizer.optimize方法
梯度计算为gradient.cumpte方法
权重更新为 updater.compute方法
#划分数据集
val data = MLUtils.loadLibSVMFile(sc,"path")
val splits = data.randoSplit(Array(0.6,0.4),seed = 11L)
val trains = splits(0).cache()
val tests = splits(1)
#建立模型并训练
val model = new LogisticsRegressionWithLBFGS().setNumClasses(10).run(trains)
#测试
val predictionAndlabel = test.map{
case LabeledPoint(label,features) =>
val prediction = model.predict(features)
(prediction,label)
}在使用scala编程时,其语言很大程度上是流式编程。
(3)保序回归
对给定的一个无序数字序列,通过修改每个元素的值,得到一个非递减序列,并是误差最小。
IsotonicRegression()
网友评论