Я хочу получить правильную интерпретацию результата.
исходный набор данных (поле метки содержит только 0 и 1)
scala> mlsrc.show()
+-----+---+---+---+
|label| f1| f2| f3|
+-----+---+---+---+
| 0.0|3.0|3.0| 1|
| 0.0|3.0|3.0| 1|
| 0.0|3.0|3.0| 2|
| 0.0|3.0|2.0| 1|
| 0.0|2.0|3.0| 2|
| 0.0|1.0|1.0| 3|
| 0.0|3.0|3.0| 1|
| 0.0|1.0|1.0| 2|
| 0.0|1.0|2.0| 1|
| 0.0|3.0|3.0| 1|
| 0.0|3.0|3.0| 1|
| 0.0|3.0|3.0| 1|
| 0.0|3.0|3.0| 1|
| 0.0|1.0|1.0| 2|
| 0.0|3.0|3.0| 2|
| 0.0|1.0|3.0| 2|
| 0.0|3.0|3.0| 1|
| 0.0|3.0|3.0| 1|
| 0.0|1.0|2.0| 3|
| 0.0|1.0|1.0| 3|
+-----+---+---+---+
преобразовать его в формат libsvm для SparkML.
scala> data.show(5)
+-----+---+---+---+-------------+
|label| f1| f2| f3| features|
+-----+---+---+---+-------------+
| 0.0|3.0|3.0| 1|[3.0,3.0,1.0]|
| 0.0|3.0|3.0| 1|[3.0,3.0,1.0]|
| 0.0|3.0|3.0| 2|[3.0,3.0,2.0]|
| 0.0|3.0|2.0| 1|[3.0,2.0,1.0]|
| 0.0|2.0|3.0| 2|[2.0,3.0,2.0]|
+-----+---+---+---+-------------+
И запустить следующий код.
val layers = Array[Int](3, 5, 5, 2)
val trainer = new MultilayerPerceptronClassifier().setLayers(layers).setLabelCol("label").setFeaturesCol("features").setBlockSize(128).setSeed(1234L).setMaxIter(10)
val model = trainer.fit(train)
val result = model.transform(test)
result.show()
(3, 5, 5, 2), потому что у меня есть 3 элемента в свойствах, и я знаю, что есть только 2 возможных выхода 0,1.
входной слой размером 3, два промежуточных размера 5 и 5 и выходной размер 2 (классы)
результат выглядит так:
+-----+---+---+---+-------------+--------------------+--------------------+----------+
|label| f1| f2| f3| features| rawPrediction| probability|prediction|
+-----+---+---+---+-------------+--------------------+--------------------+----------+
| 0.0|1.0|1.0| 3|[1.0,1.0,3.0]|[-1.7545448222707...|[0.46074576139667...| 1.0|
| 0.0|2.0|3.0| 2|[2.0,3.0,2.0]|[-1.7361574163221...|[0.46435300578321...| 1.0|
| 0.0|3.0|2.0| 1|[3.0,2.0,1.0]|[-1.6983478426376...|[0.47152530968704...| 1.0|
| 0.0|1.0|1.0| 2|[1.0,1.0,2.0]|[-1.7461462437059...|[0.46441191948172...| 1.0|
| 0.0|1.0|2.0| 1|[1.0,2.0,1.0]|[-1.7296803383526...|[0.47066804705632...| 1.0|
+-----+---+---+---+-------------+--------------------+--------------------+----------+
По вероятности столбца у меня есть тип VectorUDT размера 2 (где сумма элементов равна 1). Здесь виден только первый элемент, для 0,46 второе значение равно 0,54
.
Мой вопрос:
Я интерпретирую результаты следующим образом:
для признаков (1.0, 1.0, 3) прогнозируемое значение 1 (из прогноза столбца) с
вероятность = 0,54
Я прав?