Я пытаюсь найти Точность, используя 5-кратное перекрестное подтверждение с использованием модели Random Forest Classifier в SCALA. Но я получаю следующее сообщение об ошибке во время выполнения:RandomForestClassifier получил ввод с недопустимой ошибкой столбца столбца в Apache Spark
java.lang.IllegalArgumentException: RandomForestClassifier был дан вход с недопустимой подписью столбца метка, без числа классов, указанных. См. StringIndexer.
Получение выше ошибки в строке ---> Val cvModel = cv.fit (trainingData)
Код, который я использовал для перекрестной проверки набора данных с использованием случайных лес выглядит следующим образом:
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.tuning.{ParamGridBuilder, CrossValidator}
import org.apache.spark.ml.classification.RandomForestClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
val data = sc.textFile("exprogram/dataset.txt")
val parsedData = data.map { line =>
val parts = line.split(',')
LabeledPoint(parts(41).toDouble,
Vectors.dense(parts(0).split(',').map(_.toDouble)))
}
val splits = parsedData.randomSplit(Array(0.6, 0.4), seed = 11L)
val training = splits(0)
val test = splits(1)
val trainingData = training.toDF()
val testData = test.toDF()
val nFolds: Int = 5
val NumTrees: Int = 5
val rf = new
RandomForestClassifier()
.setLabelCol("label")
.setFeaturesCol("features")
.setNumTrees(NumTrees)
val pipeline = new Pipeline()
.setStages(Array(rf))
val paramGrid = new ParamGridBuilder()
.build()
val evaluator = new MulticlassClassificationEvaluator()
.setLabelCol("label")
.setPredictionCol("prediction")
.setMetricName("precision")
val cv = new CrossValidator()
.setEstimator(pipeline)
.setEvaluator(evaluator)
.setEstimatorParamMaps(paramGrid)
.setNumFolds(nFolds)
val cvModel = cv.fit(trainingData)
val results = cvModel.transform(testData)
.select("label","prediction").collect
val numCorrectPredictions = results.map(row =>
if (row.getDouble(0) == row.getDouble(1)) 1 else 0).foldLeft(0)(_ + _)
val accuracy = 1.0D * numCorrectPredictions/results.size
println("Test set accuracy: %.3f".format(accuracy))
Может кто-нибудь объяснить, что является ошибкой в приведенном выше коде.