1

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

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

关于生成的模型:

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

1 回答 1

2

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

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)具有属性权重(向量类型)。

情况1

如果你有 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());

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

于 2015-05-27T09:34:32.210 回答