Как получить все альфа-значения классификатора SVM scikit-learn?
Мне нужны альфа-значения, которые являются множителями Лагранжа для двойной задачи SVM, после обучения классификатора SVM с помощью scikit-learn. Согласно документу, кажется, что Scikit-Learn обеспечивает только svm.dual_coef_
, который является произведением альфа-множителя Лагранжа и метки точки данных.
Я попытался вычислить альфа-значение вручную, разделив элементы svm.dual_coef_
по метке данных, но так как svm.dual_coef_
хранит только коэффициенты опорных векторов, я не уверен, что если я переберу этот массив, порядок опорных векторов будет таким же, как в исходных обучающих данных.
Так есть ли надежный способ получить альфа-значения векторов поддержки?
1 ответ
Поскольку альфа-значения по определению положительны, вы можете получить их, взяв abs из dual_coefs:
alphas = np.abs(svm.dual_coef_)
Это прямое следствие того факта, что
svm.dual_coef_[i] = labels[i] * alphas[i]
где labels[i]
либо -1
или же +1
а также alphas[i]
всегда позитивны. Кроме того, вы также можете получить каждый ярлык через
labels = np.sign(svm.dual_coef_)
используя то же наблюдение. По этой же причине scikit-learn не хранит альфы как таковые - они однозначно представлены как dual_coefs_ вместе с метками.
Это легко понять, если проанализировать все возможные случаи:
labels[i] == -1
а такжеalphas[i] > 0
=>dual_coef_[i] < 0
а такжеdual_coef_[i] == -alphas[i] == labels[i] * alphas[i]
labels[i] == -1
а такжеalphas[i] < 0
=> невозможно (альфа неотрицательны)labels[i] == -1
а такжеalphas[i]== 0
=> это не опорный векторlabels[i] == +1
а такжеalphas[i] > 0
=>dual_coef_[i] > 0
а такжеdual_coef_[i] == alphas[i] == labels[i] * alphas[i]
labels[i] == +1
а такжеalphas[i] < 0
=> невозможно (альфа неотрицательны)labels[i] == +1
а такжеalphas[i]== 0
=> это не опорный вектор
Следовательно, если dual_coef_[i]
положительно, то это alphas[i]
коэффициент, и он принадлежит к положительному классу, и если он отрицательный, alphas[i] == -dual_coef_[i]
и это относится к отрицательному классу.