2015-05-04 3 views
1

Я не понимаю выход классификатора SVM из алгоритма Spark MLLib. Я хочу преобразовать оценку в вероятность, так что я получаю вероятность для точки данных, принадлежащей определенному классу (на котором обучается SVM, проблема с несколькими классами a.k.a.) (see also this thread). Неясно, что означает оценка. Это расстояние до гиперплоскости? Как мне получить из этого вероятность?Что означает результат Spark MLLib SVM?

+0

SVM являются детерминированными и не имеют дело с вероятностями, они подходят только к границе решения. Вероятно, вы могли бы предположить вероятность, основанную на расстоянии до границы принятия решения, но вряд ли она будет работать. – cfh

+0

LibSVM действительно поддерживает его, а также научную литературу: www.citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.1639 Таким образом, я думаю, что вычисление апостериорной вероятности возможно, но оно недоступно в Spark MLLib. Поскольку у меня нет ответа от сообщества относительно того, что такая функциональность уже доступна, я заключаю, что я должен сам ее реализовать. – blpasd

+0

Эта ссылка не работает. – cfh

ответ

1

Значение - это маржа - расстояние до разделительной гиперплоскости. Это не вероятность, и SVM вообще не дают вам вероятности. Однако в качестве комментариев примечания @cfh вы можете попытаться узнать вероятности на основе этого поля. Но это отдельно от SVM.

+0

Поскольку вы являетесь автором: Соавтором Advanced Analytics на Spark, вы наверняка знаете наверняка, если Spark MLLib включает в себя функциональность изучения вероятностей. Я не мог найти его. Если я так позволю себе спросить: как вы думаете, LVQ имеет смысл в многоклассовой классификации и извлечения вероятности? Я думаю, что это происходит потому, что распределение точек в кластерах может быть моделями гауссовой функцией, и эта функция может быть использована для вычисления вероятностей. Надеюсь, вы можете дать мне несколько советов :) – blpasd

+0

Да, это я. Если вам нужно узнать вероятности, используйте модель, которая делает это прямо как простой LR. Тем не менее, вам не нужны пробки для мультикласса. Я действительно не знаю LVQ, но дает ли это вероятности? Я не думаю, что вы соответствуете гауссианам в любом из них. –

+0

Хорошо, да, я согласен, однако, логистическая регрессия (LR) не такая мощная, как SVM с ядром RBF (в большинстве случаев) в задачах классификации с несколькими классами. Поэтому я хотел бы знать, как я могу вычислить эти вероятности. Из вашего ответа я могу заключить, что MLLib Spark не включает в себя функциональность изучения вероятностей? В этом случае я думаю, что более разумно использовать LVQ: https: //onlinecourses.science.psu.edu/stat557/node/79 В этой ссылке можно найти облака точек с цветом, эти облака могут быть приспособлены к функции Гаусса и, таким образом, дают вероятности? – blpasd

2
import org.apache.spark.mllib.classification.{SVMModel, SVMWithSGD} 
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics 
import org.apache.spark.mllib.util.MLUtils 

// Load training data in LIBSVM format. 
val data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt") 

// Split data into training (60%) and test (40%). 
val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L) 
val training = splits(0).cache() 
val test = splits(1) 

// Run training algorithm to build the model 
val numIterations = 100 
val model = SVMWithSGD.train(training, numIterations) 

// Clear the default threshold. 
model.clearThreshold() 

// Compute raw scores on the test set. 
val scoreAndLabels = test.map { point => 
    val score = model.predict(point.features) 
    (score, point.label) 
} 

// Get evaluation metrics. 
val metrics = new BinaryClassificationMetrics(scoreAndLabels) 
val auROC = metrics.areaUnderROC() 

println("Area under ROC = " + auROC) 

// Save and load model 
model.save(sc, "myModelPath") 
val sameModel = SVMModel.load(sc, "myModelPath") 

Если вы используете модуль SVM в MLLib, они дают вам АУК, которое площадь под кривой ROC, и это эквивалентно «Точность». Надеюсь, поможет.

Смежные вопросы