我正在试验spark.ml库和管道功能。将SQL与拆分一起使用似乎有一个限制(例如,用于训练和测试):
- spark.ml在模式rdd之外工作是很好的,但在测试和训练集中并没有简单的方法来随机分割模式rdd。我可以使用randomSplit(0.6,0.4),但这会返回一个丢失模式的RDD数组。我可以在上面强制使用case类,并将其隐藏回模式RDD,但我有很多功能。我使用了过滤器,并基于我的一个iid特性使用了一些基本的分区条件)。还有什么可以做的建议吗
关于生成的模型:
- 如何访问模型权重?lr优化器和lr模型内部有权重,但尚不清楚如何使用它们
好的,对于问题的第二部分,
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)具有属性权重(vector类型)。
案例1
如果你有LogisticRegression模型(的spark.ml)
LogisticRegression lr = new LogisticRegression();
LogisticRegressionModel lr1 = lr.fit(df_train);
System.out.println("The weights are " + lr1.weights())
案例2
如果您有管道模型,首先使用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());
如果它是不正确的,或者有更好的方法,请告诉我。