【问题标题】: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 -- 似乎最后一列默认用作目标特征 -- 或者称为“标签”的那一列

标签: java apache-spark linear-regression apache-spark-ml


【解决方案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。
      猜你喜欢
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2015-06-19
      • 1970-01-01
      • 2020-01-10
      • 2021-07-22
      • 2021-01-15
      相关资源
      最近更新 更多