Ich möchte die a-Kreuz-Validierung K-Falte für meine Java-Spark-Projekt implementieren, die Mllib verwendet, so dass ich den F-Score berechnen kann. (Hier ist ein link zu einer pastebin Code) Betrachten wir einen Satz von markierten PunktenWie funktioniert die Cross Validation in Sparks Mllib in einem Java-Projekt mit logistischer Regression?
JavaRDD<LabledPoint> allData= ...// some labled points
wobei jeder Punkt markiert ist „0“ oder „1“. Daher könnte es wie {[1, (2,3)], [0, (4,6)] ... aussehen. Ich habe es geschafft, meine Daten in zwei Teile zu teilen und zu verifizieren. Ich habe ein LogisticRegressionWithLBFGS Objekt, das mir das Modell, dass
LogisticRegressionModel model = logisticRegression.run(trainingData.rdd())
Ich gehe davon gibt, bevor ich das Modell muß ich Kreuzvalidierung tun, aber ich bin mir nicht ganz sicher, wie es umgesetzt wird. Konzeptionell habe ich die Kreuzvalidierung verstanden: Es ist eine Methode, die meinen Klassifikator auf die k Teile geteilten Daten trainiert, um das beste Modell zu finden.
Für die F-Score habe ich folgendes
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()
;
Aber die F Score werden immer getrennt ich einen Wert für die Bezeichnung „1“ und „0“ erhalten.
Wie kann ich die Kreuzvalidierung von Mllib verwenden? Wie kann ich den f-Score korrekt berechnen?
F1: Ich glaube, Sie wollen metrics.microF1Measure verwenden, die der gewichtete Durchschnitt der Klasse F-Maß –
Danke ist, psoucy. Lass mich auschecken. –