Spark ML 线性回归 - 要调整的超参数



我在Spark ML中使用LinearRegression模型来预测价格。它是一个单变量回归(x=time, y=price)

假设我的数据是干净的,那么通常要采取哪些步骤来改进此模型?

到目前为止,我尝试使用交叉验证来调整regularization parameter,并得到了rmse=15 stdev=30

我应该关心其他重要的超参数吗?似乎 Spark ML 没有很好的超参数调优文档......


更新

我能够使用 ParamGridCross-Validation 调整参数。但是,有没有办法在正确训练线性回归模型后查看拟合线的外观?我怎么知道线路是quadric还是cubic等?如果有一种方法可以使用所有训练数据点可视化拟合线,那就太好了。

您提供的链接指向主要的超参数:

.setRegParam(0.3)   // lambda for regularization
.setElasticNetParam(0.8)  // coefficient for L1 vs L2 

您可以执行网格搜索以优化其使用..说

lambda in 0 to 0.8   
elasticNet in 0 to 1.0

这可以通过向CrossValidator提供ParamMap来完成

val estimatorParamMaps: Param[Array[ParamMap]]
param for estimator param maps

为了回答您的后续问题,线性回归也将是线性拟合。您可以通过使用线图在范围内的点数据集上预测 y 值来绘制它。然后,您可以在其上绘制训练数据。

val session = SparkSession.builder().master("local").appName("PredictiveAnalysis").getOrCreate();

def main(args: Array[String]): Unit = {
        val data = session.sparkContext.textFile("C:\Users\Test\new_workspace\PredictionAlgo\src\main\resources\data.txt");
        val parsedData = data.map { line =>
        val x : Array[String] = line.replace(",", " ").split(" ")
        val y = x.map{ (a => a.toDouble)}
        val d = y.size - 1
                val c = Vectors.dense(y(0),y(d))
                LabeledPoint(y(0), c)
        }.cache();
        val numIterations = 100;
        val stepSize = 0.00000001;
        val model = LinearRegressionWithSGD.train(parsedData, numIterations, stepSize);
        val valuesAndPreds = parsedData.map { point =>
        val prediction = model.predict(point.features)
        (point.label, prediction)
        }
        valuesAndPreds.foreach((result) => println(s"predicted label: ${result._1}, actual label: ${result._2}"))
        val MSE = valuesAndPreds.map{ case(v, p) => math.pow((v - p), 2) }.mean()
        println("training Mean Squared Error = " + MSE)
}

}

最新更新