【问题标题】:Using SQL and weights with the spark ML LogisticRegressionModel将 SQL 和权重与 spark ML LogisticRegressionModel 一起使用
【发布时间】:2015-05-27 17:34:32
【问题描述】:

我正在试验 spark.ml 库和管道功能。使用带有拆分的 SQL 似乎存在限制(例如,用于训练和测试):

  • spark.ml 在模式 rdd 上工作很好,但没有简单的方法可以在测试和训练集中随机拆分模式 rdd。我可以使用 randomSplit(0.6,0.4) 但这会返回一个丢失模式的 RDD 数组。我可以在其上强制一个案例类并将其转换回模式 RDD,但我有很多功能。我使用了过滤器并使用了一些基于我的 iid 功能的基本分区条件)。还有什么可以做的建议吗?

关于生成的模型:

  • 如何访问模型权重? lr 优化器和 lr 模型内部具有权重,但不清楚如何使用它们。

【问题讨论】:

  • 似乎是一对合理的问题:我在 mllib 上工作并且理解它们(尽管还没有答案)。鉴于票数接近,我将编辑问题以查看其他人是否可以同意。

标签: apache-spark apache-spark-sql


【解决方案1】:

好的,对于问题的第二部分,

How do I access the model weights? The lr optimizer and lr model internally has weights but it is unclear how to use them

在浏览了库的源代码后(不具备 Scala 知识),

LogisticRegressionModel(spark.ml)具有属性权重(向量类型)。

案例一

如果你有 LogisticRegressionModel (of spark.ml)

LogisticRegression lr = new LogisticRegression();
LogisticRegressionModel lr1 = lr.fit(df_train);
System.out.println("The weights are  " + lr1.weights())

案例 2

如果你有 Pipeline Model,首先使用 getModel 获取 LogisticRegressionModel (Transformer)

    LogisticRegression lr = new LogisticRegression().setMaxIter(10).setRegParam(0.01);
    Pipeline pipeline = new Pipeline().setStages(new PipelineStage[] { lr });

    PipelineModel model = pipeline.fit(train_df);
    LogisticRegressionModel lrModel =model.getModel(lr);
    System.out.println("The model is  {}", lrm.weights());

如果不正确或有更好的方法,请告诉我。

【讨论】:

  • 谢谢。我问的问题是关于 Spark 版本 1.2.0。从最新版本 (1.3.1) 开始,如您所述,获取模型的权重相当容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2016-04-06
  • 2017-09-26
  • 2023-03-20
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多