如何使用线性回归模型进行预测?
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
列。
因此,在将您的数据集拟合到线性回归模型之前,请务必说明您的 label
和 features
列。您可以在定义 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。以上是关于如何使用线性回归模型进行预测?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中使用 .predict() 方法进行线性回归?