如何使用线性回归模型进行预测?

3

我目前正在进行一个线性回归项目,需要收集数据,将其拟合到模型上,然后根据测试数据进行预测。

如果我没错的话,简单线性回归使用两个变量X(自变量)和Y(因变量)。我有以下数据集,在其中我认为time列是X,value列是Y:

+-----+------+
|value|minute|
+-----+------+
| 5000|   672|
| 6000|   673|
| 7000|   676|
| 8000|   678|
| 9000|   680|
+-----+------+

我不知道的是如何正确地将这个数据集拟合到线性回归模型中。我之前使用过k-means,我所做的是创建一个以向量形式表示的features列。对于这个数据集,我也做了同样的事情:

VectorAssembler assembler = new VectorAssembler()
                .setInputCols(new String[]{"minute", "value"})
                .setOutputCol("features");

Dataset<Row> vectorData = assembler.transform(dataset);

然后我将这个内容放入线性回归模型中:

LinearRegression lr = new LinearRegression();
LinearRegressionModel model = lr.fit(vectorData);

这是我遇到困难的地方。如何使用这个模型进行预测?当minute等于一个随机的数值,例如700时,我想找到value的值。
我应该怎么做?如何基于随机的X值来找到我的Y值的预测/估计?
编辑:线性回归模型区分因变量和自变量吗?如何区分?

Javadoc可以为您澄清此问题:https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/mllib/regression/LinearRegressionModel.html。您还可以导出到PMML并进行可视化。 - Rick Moritz
我已经尝试过了,但是文档没有解释如何使用predict()函数。它说它需要一个Vector作为参数。为什么?这是否意味着我需要将一个值转换为向量,然后将其传递给此预测函数?因此,如果我有一个表示时间的整数,我需要将其转换为向量才能进行预测吗? - Guillermo Herrera
是的 - 在SparkML中,您如何对特征进行编码。 - Rick Moritz
但是,如果我已经告诉我的模型,我的特征列包括X和Y变量(分钟和值),那么它在预测函数中会要求我提供一个具有两个维度的向量吗?如果是这样,那对我来说行不通。就像我说的,我想根据我的X(分钟)来预测Y的值。 - Guillermo Herrera
1
这里有一个更全面的示例:http://go.databricks.com/hubfs/notebooks/Pop._vs._Price_LR.html - 看起来最后一列默认用作目标功能-或称为“标签” - Rick Moritz
3个回答

2
我只是刚开始学习Spark MLlib和线性回归,所以我只能讨论技术细节(而不是为什么机器学习会以这种方式工作)。
“这就是我卡住的地方。如何使用此模型进行预测?”
模型是转换器(例如VectorAssembler),提供了一个非常简单的界面,具有transform操作符。
transform(dataset:Dataset[_]):DataFrame 转换输入数据集。”
在这里,您传入数据集并获得带有prediction列的另一个数据集。顺便说一下,这是训练和进行预测的一般方法。
以下内容将使您从输入数据集中得到要素的预测结果。
val dataset = ...
model.transform(dataset).select("prediction").show

我强烈推荐使用Spark MLlib的ML Pipeline功能,以进行所谓的“预测性分析工作流”,这使得将原始数据转换为估计器格式的过程更加愉快。请参见机器学习库(MLlib)指南,特别是ML管道

ML管道提供了一组统一的高级API,构建在DataFrame之上,帮助用户创建和调整实用的机器学习管道。


2
感谢@RickMoritz和@JacekLaskowski的反馈,我能够找到解决方案:
LinearRegression确实有X和Y列。X列是features列,而Y列是label列。
因此,在将数据集拟合到LinearRegression模型之前,请确保声明您的labelfeatures列。您可以在定义LinearRegression时设置标签列: LinearRegression lr = new LinearRegression().setLabelCol(Ycolumn_name); 对于特征列,请确保将X列转换为向量类型,然后您也可以执行相同操作: LinearRegression lr = new LinearRegression().setFeaturesCol(Xcolumn_name); 完成上述步骤后,您就可以了。要获得预测值,只需将X值转换为向量,并将其放在LinearRegressionModel的predict()函数中即可。

1

标签上显示我正在使用Apache Spark和Java进行工作。你发布的内容涉及完全不同的框架和编程语言。看起来它可能有效,但是很遗憾它与我的问题无关。 - Guillermo Herrera
哦,对不起。我疏忽了。我以为它是通用的,所以发布了scikit learn,因为它被广泛使用。 - Manoj Kalluri
没问题。其实我更想使用Python,因为它比Java更易于使用,并且对机器学习的支持更好,但不幸的是被告知要使用Java。 - Guillermo Herrera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接