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

Posted

技术标签:

【中文标题】如何使用线性回归模型进行预测?【英文标题】:How to make predictions with Linear Regression Model? 【发布时间】:2017-11-30 18:14:54 【问题描述】:

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

如果我是正确的,简单的线性回归适用于两个变量,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 等于随机分钟时找到value 的值,例如。 700.

我该怎么做?如何根据随机 X 值找到 Y 值的预测/估计值?

编辑:线性回归模型是否区分因变量和自变量?怎么样?

【问题讨论】:

Javadoc 应该为您解决这个问题:spark.apache.org/docs/2.1.0/api/java/org/apache/spark/mllib/…。您还可以导出到 PMML 并将其可视化。 我已经这样做了,但是文档没有解释如何使用 predict() 函数。它说它需要一个Vector 作为参数。为什么?这是否意味着我需要将一个值转换为一个向量,然后将其传递给这个预测函数?所以如果我有一个表示时间的整数,我需要将其转换为向量才能进行预测? 是的 - 引导您在 SparkML 中编码特征的方式。 但是如果我已经告诉我的模型我的特征列由 X 和 Y 变量(分钟和值)组成,它不会在预测函数上问我同样的问题吗?方面?如果是这样的话,那对我不起作用。就像我说的,我想根据我的 X(分钟)来预测 Y 的值。 这里有一个功能更全面的例子:go.databricks.com/hubfs/notebooks/Pop._vs._Price_LR.html -- 似乎最后一列默认用作目标特征 -- 或者称为“标签”的那一列 【参考方案1】:

我刚开始使用 Spark MLlib,尤其是线性回归,所以我只能讨论技术细节(而不是为什么机器学习会这样工作)。

这是我卡住的部分。如何使用此模型进行预测?

模型是转换器(如VectorAssembler),它提供了一个非常简单的接口与transform 运算符。

transform(dataset: Dataset[_]): DataFrame 转换输入数据集。

这就是您传递数据集并获得另一个带有prediction 列的数据集的地方。顺便说一下,这是训练和进行预测的一般方法。

以下内容将为您提供输入数据集中特征的预测。

val dataset = ...
model.transform(dataset).select("prediction").show

我强烈建议将 Spark MLlib 的 ML Pipeline 功能用于所谓的预测分析工作流,这使得将原始数据转换为Estimator 格式的过程更加愉快.请参阅Machine Learning Library (MLlib) Guide,尤其是ML Pipelines。

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

【讨论】:

【参考方案2】:

感谢@RickMoritz 和@JacekLaskowski 的反馈,我能够找到解决方案:

LinearRegression 确实有 X 和 Y 列。 X 列是features 列,Y 列是label 列。

因此,在将您的数据集拟合到线性回归模型之前,请务必说明您的 labelfeatures 列。您可以在定义 LinearRegression 时设置标签列:

LinearRegression lr = new LinearRegression().setLabelCol(Ycolumn_name);

对于特征列,确保将 X 列转换为矢量类型,然后您也可以这样做:

LinearRegression lr = new LinearRegression().setFeaturesCol(Xcolumn_name);

一旦你完成了,你就准备好了。要获得预测,只需将您的 X 值转换为向量并将其放在 LinearRegressionModel 的 predict() 函数中。

【讨论】:

【参考方案3】:

这里是关于线性回归模型的文档

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

将您的 XTrain、YTrain 数据拟合到线性回归模型。确保 XTrain 和 Y train 是数据帧。

使用 pandas 将您的数据转换为数据帧。

现在您可以提供测试数据来预测值

要获得最佳估算器,请使用网格搜索。 http://scikit-learn.org/stable/modules/grid_search.html

【讨论】:

在标签上说我正在使用 Apache Spark 和 Java。您发布的内容涉及完全不同的框架和编程语言。看起来它可能有效,但不幸的是,它与我的问题无关。 哦,是的,对不起。我忽略了它。我认为它是通用的,并发布了 scikit learn,因为它被广泛使用。 是的,没问题。我实际上想使用 Python,因为它比 Java 更容易使用并且对 ML 的支持更多,但不幸的是,我被告知要使用 Java。

以上是关于如何使用线性回归模型进行预测?的主要内容,如果未能解决你的问题,请参考以下文章

如何在R语言中使用Logistic回归模型

如何在 python 中使用 .predict() 方法进行线性回归?

scikit-learn的线性回归模型

spss:得到一个多元线性回归模型之后,如何比较预测值和真实值?如何判断模型是不是有预测能力?

拟合贝叶斯线性回归并预测不可观察的值

使用线性回归和神经网络模型预测比特币收盘价