Объяснение результатов многослойного классификатора персептрона - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу получить правильную интерпретацию результата.

исходный набор данных (поле метки содержит только 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 Я прав?

...