Я использую Libsvm для обнаружения извне (от Java), но мне нужна оценка вероятности не только метки. Я проследил код и обнаружил, что это невозможно. В частности, в функции svm_predict_values (..) Я вижу следующий код:Предоставляет ли одноклассная svm оценку вероятности?
if(model.param.svm_type == svm_parameter.ONE_CLASS)
return (sum>0)?1:-1;
else
return sum;
Я понимаю, что один класс SVM пытается оценить поддержку некоторых распределения вероятностей заданных образцов или точек данных от «нормального» класс. Учитывая новую точку данных и учитывая, что модель узнала поддержку нормального распределения классов, могу ли я получить оценку вероятности того, что новая точка данных будет «нормальной» или «выброшенной»? Похоже, что это невозможно, и именно поэтому Libsvm порождает сумму выше и возвращает только метку членства, но я не понимаю, почему. Если можно получить оценку вероятности из одноклассного svm, я не вижу, как это сделать в Libsvm, потратив много времени на чтение code.
Причина, по которой я прошел этот маршрут, заключается в том, что я не верю, что оценка плотности ядра будет хорошо работать в условиях высокой размерности, но, возможно, svm подвержен той же проблеме.
ОК, но libsvm предоставляет этот «чит» для мульти-класса svm. Поэтому вопрос в том, почему он не предусмотрен для одноклассного svm? – Kai
нет математической причины не использовать его в одном классе SVM, так почему он не реализован? Одной из причин может быть тот факт, что, как правило, в одном классе оценка вероятности вероятности заключается в обеспечении P (x | положительной), а не P (положительной | x) (которую дает «чит» Platt-масштабирования), и нет хорошего способа для преобразования между этими величинами (поскольку у одного класса SVM нет модели P (x)). Но более вероятной причиной является просто «недостаточно людей, просящих об этом», поскольку одноклассный SVM является второстепенной частью libsvm. – lejlot
хорошо, это хороший ответ. Спасибо. В моем приложении мне действительно нужно p (положительное | x), поэтому расширенная оценка Platt в libsvm, если бы была предусмотрена для одного класса, была бы идеальной. Однако я нашел обходное решение, которое может быть ответом. Оказывается, что параметр nu по существу является верхней границей отношения отвергаемых примеров обучения. Таким образом, новый контрольный пункт должен быть «ближе» к «нормальному» или позитивному по сравнению с отклоненными примерами обучения (хотя они относятся к положительному классу). Это не точно откалиброванная вероятность, но может действовать вместо p (положительная | x). – Kai