Flink MLR

2017/12/15 Flink

Flink MLR

多层线性回归是Flink的简单线性回归的扩展,是多于一个输入变量来决定一个输出。预测值是输入数据的线性变换。MLR试图解释多种可变变量之间的关系,通过线性方程提供响应。 可以用鸢尾花数据做测试,第一步要通过训练数据来训练模型。 将数据分为训练数据和验证数据,并且将这些数据转化为LibSVM格式。实现的代码如下:

object MLRJob{
    def main(args:Array[String]){
        val env=ExecutionEnvironment.getExecutionEnvironment
        val trainingDataset=MLUUtils.readLibSVM(env,"iris-train.txt")
        val testingDataSet=MLRUtils.readLibSVM(env,"iris-test.txt").map{ lv=> lv.vector }
        val mlr=MultipleLinearRegression()
            .setStepSize(1.0)
            .setIterations(5)
            .setConvergenceThreshold(0.001)

        mlt.fit(trainingDataset)

        val predictions = mlr.predict(testingDataSet)

        predictions.print()

    }
}

可以调整的参数清单如下:

Parameter Description
Iterations 最大迭代次数,默认是10
Stepsize 梯度下降算法的步进值,默认值是0.1
Conver-gencerthreshold 方差的阈值,默认值是None
Learn-ingratemethod 用来计算第一次迭代的学习速率的方法

FLINK 最优化框架

Flink 最优化框架是一个开发者友好的,能用来解决最优化问题的框架。最优化问题基本上是第一和机器学习算法的核心内容。 通常来说,最优化问题包括寻找模型,包括一系列的参数和最小化函数。FlinkML支持Stochastic Gradient Descent(SGD),有三种回归类型:

回归函数 类名
L1 regularization GradientDescentL1
L2 regularization GradientDescentL2
No regularization SimpleGradient

如下的示例代码展示了如何使用SGD:

//create SGD solver
val sgd=GradientDescentL1()
        .setLossFunction(SquaredLoss())
        .setRegularizationConstant(0.2)
        .setIterations(100)
        .setLearningRate(0.01)
        .setLearningRateMethod(LearningRateMethod.Xu(-0.75))

//obtain data
val trainingDS:DataSet[LabeledVector] = ...


//Optimize the weights , according to the provided data
val weightDS=sgd.optimize(trainingDS)


最优化框架可以调整的参数如下:

Parameter Description
LossFunction Flink 支持以下Loss 函数: Squared Loss,Hinged Loss,Logistic Loss 默认值是None
Regularization-Constant 回归的权重,默认值是0.1
Iterations 最大的迭代次数
Convergence-Threshold 停止迭代 relative change of squared residuals ,默认值是None
LearningRateMethod 用来计算每个迭代周期的学习速率的函数
Decay 一个默认值为0.0的量

后话

在AI时代要到来的时候,只知道算法怎么使用是没有价值的,成为一个调包侠没有任何意义。但是对知识的学习过程是一步步的完成的,必须要由浅入深,一步步提高自己的水平。

Show Disqus Comments

Search

    Table of Contents