Ich versuche, bei https://spark.apache.org/docs/latest/mllib-decision-tree.htmlFunkenlastdaten für Entscheidungsbaum - Bezeichnung ändern in LabelledPoint
das Beispiel für Entscheidungsbaum in Funken zu tun habe ich heruntergeladen A1A-Datensatz aus http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html#a1a
Der Datensatz ist in LIBSVM Format, bei dem die zwei Klassen haben Etiketten +1,0 und -1,0 Wenn ich versuche,
import org.apache.spark.mllib.tree.DecisionTree
import org.apache.spark.mllib.tree.model.DecisionTreeModel
import org.apache.spark.mllib.util.MLUtils
// Load and parse the data file.
val data = MLUtils.loadLibSVMFile(sc, "/user/cloudera/testDT/a1a.t")
// Split the data into training and test sets (30% held out for testing)
val splits = data.randomSplit(Array(0.7, 0.3))
val (trainingData, testData) = (splits(0), splits(1))
// Train a DecisionTree model.
// Empty categoricalFeaturesInfo indicates all features are continuous.
val numClasses = 2
val categoricalFeaturesInfo = Map[Int, Int]()
val impurity = "gini"
val maxDepth = 5
val maxBins = 32
val model = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,
| impurity, maxDepth, maxBins)
ich:
java.lang.IllegalArgumentException: GiniAggregator given label -1.0 but requires label is non-negative.
Also habe ich versucht, die Bezeichnung -1.0 zu 0.0 zu ändern. Ich habe versucht, so etwas wie
def changeLabel(a: org.apache.spark.mllib.regression.LabeledPoint) =
{ if (a.label == -1.0) {a.label = 0.0} }
Wo ich Fehler:
reassignment to val
Also meine Frage ist: Wie kann ich die Etiketten meiner Daten ändern? Oder gibt es einen Workaround, damit DecisionTree.trainClassifier() mit Daten mit negativen Labels arbeiten kann?