Ответ 1
Scikit-learn использует LibSVM внутренне, и это, в свою очередь, использует масштабирование Platt, как описано в эта заметка авторов LibSVM, чтобы калибровать SVM для создания вероятностей в дополнение к предсказаниям класса.
Масштабирование Platt требует сначала обучения SVM, как обычно, затем оптимизации векторов параметров A и B таких, что
P(y|X) = 1 / (1 + exp(A * f(X) + B))
где f(X)
- знаковое расстояние образца от гиперплоскости (метод scikit-learn decision_function
). Вы можете распознать логистический сигмоид в этом определении, ту же функцию, что и логистическая регрессия и нейронные сети, для преобразования функций решения в вероятностные оценки.
Имейте в виду: параметр B
, "перехват" или "смещение" или все, что вы хотите называть, может привести к тому, что прогнозы, основанные на оценках вероятности из этой модели, будут несовместимы с теми, которые вы получаете от решения SVM функция f
. Например. предположим, что f(X) = 10
, то прогноз для X
положителен; но если B = -9.9
и A = 1
, то P(y|X) = .475
. Я вытягиваю эти цифры из воздуха, но вы заметили, что это может произойти на практике.
Эффективно, масштабирование Platt обучает вероятностную модель поверх выходов SVM под функцией потери поперечной энтропии. Чтобы предотвратить переопределение этой модели, она использует внутреннюю пятикратную перекрестную проверку, что означает, что обучение SVM с помощью probability=True
может быть намного дороже, чем ванильный, не вероятностный SVM.