Что означает оценка вывода Spark MLLib SVM?

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


person blpasd    schedule 04.05.2015    source источник
comment
SVM детерминированы и не имеют дело с вероятностями, они соответствуют только границе решения. Вы, конечно, можете предположить вероятность, основанную на расстоянии до границы решения, но сомнительно, насколько хорошо это сработает.   -  person cfh    schedule 04.05.2015
comment
LibSVM поддерживает его, а также научную литературу: www.citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.1639 Поэтому я думаю, что вычисление апостериорной вероятности возможно, но оно недоступно в Spark. MLLib. Поскольку я не получаю никакого ответа от сообщества относительно того, что такая функциональность уже доступна, я делаю вывод, что я должен реализовать ее самостоятельно?   -  person blpasd    schedule 04.05.2015
comment
Эта ссылка не работает.   -  person cfh    schedule 04.05.2015
comment
Дополнительная информация здесь: Существует метод сопоставления оценок SVM с вероятностями на основе по логистической регрессии. Этот метод был предложен Platt et al. пару лет назад и доступен во многих приличных реализациях svm. Поскольку это всего лишь апостериорная вероятностная оценка, обернутая вокруг финальной SVM, некоторые ученые критикуют ее за то, что она не является действительно вероятностной. Для последнего можно использовать гауссовы процессы [...]   -  person cfh    schedule 04.05.2015
comment
Точно! Создание кластеров с использованием квантования обучающего вектора, определение функции распространения кластера с помощью функции Гаусса, а затем получение вероятности имеет гораздо больше смысла. Использование расстояний от гиперплоскостей из нескольких классификаторов SVM, а затем попытка определить некоторую вероятность этих мер расстояния не имеет никакого смысла, поскольку не учитывается свойство распределения точек данных, принадлежащих кластеру. Кто-нибудь видит ошибку в моих рассуждениях?   -  person blpasd    schedule 04.05.2015


Ответы (2)


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

person Sean Owen    schedule 04.05.2015
comment
Поскольку вы являетесь автором книги «Соавтор расширенной аналитики в Spark», вы наверняка знаете, включает ли Spark MLLib функциональность изучения вероятностей. Я не смог его найти. Если я могу так свободно спросить: вы думаете, что LVQ имеет больше смысла в классификации нескольких классов и извлечении вероятности? Я думаю, что да, потому что распределение точек в кластерах можно моделировать функцией Гаусса, и эту функцию можно использовать для расчета вероятностей. Надеюсь, вы дадите мне несколько советов :) - person blpasd; 04.05.2015
comment
Да, это я. Если вам нужно изучить вероятности, используйте модель, которая делает это напрямую, как простой LR. Однако вам не нужны пробы для мультикласса. Я действительно не знаю LVQ, но дает ли это вероятность? Я не думаю, что вы подходите Гауссу ни к одному из них. - person Sean Owen; 04.05.2015
comment
Хорошо, да, я согласен, однако логистическая регрессия (LR) не так эффективна, как SVM с ядром RBF (в большинстве случаев) в задачах классификации с несколькими классами. Поэтому я хотел бы знать, как я могу рассчитать эти вероятности. Из вашего ответа я могу сделать вывод, что MLLib Spark не включает в себя функциональность изучения вероятностей? В этом случае я думаю, что более разумно использовать LVQ: onlinecourses.science.psu. edu/stat557/node/79 По этой ссылке можно найти облака точек определенного цвета, эти облака можно аппроксимировать функцией Гаусса и, таким образом, дать вероятности? - person blpasd; 04.05.2015
comment
Если вы хотите смоделировать данные, которые выглядят как разноцветные облака, я советую сделать каждое облако (т.е. класс) гауссовой выпуклостью, а затем вывести апостериорные вероятности класса с помощью правила Байеса. - person Robert Dodier; 04.05.2015
comment
Спасибо Шон Оуэн и Роберт Додлер. У меня есть четкое представление, что теперь делать. - person blpasd; 12.05.2015

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, они предоставляют вам AUC, который представляет собой площадь под кривой ROC и эквивалентен «Accuracy». Надеюсь, поможет.

person Saman    schedule 10.03.2016