如何获取 scikit-learn SVM 分类器的所有 alpha 值?

How to get all alpha values of scikit-learn SVM classifier?

在使用 scikit-learn 训练 SVM 分类器后,我需要 alpha 值,即 SVM 对偶问题的拉格朗日乘数。根据文档,好像scikit-learn只提供了svm.dual_coef_,它是拉格朗日乘数alpha和一个数据点的标签的乘积

我试图通过将 svm.dual_coef_ 的元素除以数据标签来手动计算 alpha 值,但是由于 svm.dual_coef_ 仅存储支持向量的系数,我不确定是否我遍历这个数组,支持向量的顺序将与原始训练数据中的顺序相同。

那么有没有一种可靠的方法来获取支持向量的 alpha 值?

根据定义,alpha 值是正的,您可以通过取 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 不存储 alpha 的原因 - 它们由 dual_coefs_ 和标签唯一表示。

分析所有可能的情况就很容易理解了:

  • labels[i] == -1alphas[i] > 0 => dual_coef_[i] < 0dual_coef_[i] == -alphas[i] == labels[i] * alphas[i]
  • labels[i] == -1alphas[i] < 0 => 不可能(alpha 是非负的)
  • labels[i] == -1alphas[i]== 0 => 它不是支持向量
  • labels[i] == +1alphas[i] > 0 => dual_coef_[i] > 0dual_coef_[i] == alphas[i] == labels[i] * alphas[i]
  • labels[i] == +1alphas[i] < 0 => 不可能(alpha 是非负的)
  • labels[i] == +1alphas[i]== 0 => 它不是支持向量

因此,如果dual_coef_[i]为正则为alphas[i]系数,属于正class,若为负则alphas[i] == -dual_coef_[i]且属于正属于负数class.