如何在具有逻辑回归的Java项目中使用Spark的Mllib中的交叉验证?

时间:2016-09-07 09:17:36

标签: java apache-spark machine-learning apache-spark-mllib cross-validation

我想要为我的Java spark项目实现一个交叉验证k fold,它使用Mllib,这样我就可以计算出F得分。 (这是一个link到一个pastebin代码)考虑一组标记点

JavaRDD<LabledPoint> allData=  ...// some labled points 

其中每个点都标有&#34; 0&#34;或&#34; 1&#34;。因此它可能看起来像{[1,(2,3)],[0,(4,6)],....}。我设法将我的数据分成两部分进行培训和验证。我创建了一个LogisticRegressionWithLBFGS对象,它为我提供了模型

LogisticRegressionModel model = logisticRegression.run(trainingData.rdd())

我认为在我做模型之前我需要进行交叉验证,但我不太确定它是如何实现的。从概念上讲,我理解交叉验证:它是一种在k部分划分数据上训练我的分类器以找到最佳模型的方法。

对于F分数,我做了以下

  JavaRDD<Tuple2<Object, Object>> predict = valdidationData.map(new Function<LabeledPoint, Tuple2<Object, Object>>() {
                                public Tuple2<Object, Object> call(LabeledPoint point) {
                                    Double prediction = model.predict(point.features());
                                    return new Tuple2<Object, Object>(prediction, point.label());
                                }
                            });

BinaryClassificationMetrics metrics = new BinaryClassificationMetrics(predict.rdd());

JavaRDD<Tuple2<Object, Object>> f1Score =metrics.fMeasureByThreshold().toJavaRDD();

但是F分数总是分开的我得到了标记的&#34; 1&#34;和&#34; 0&#34;。

如何使用Mllib的交叉验证?另外如何正确计算f分数?