在使用scikit-learn训练了SVM分类器之后,我需要alpha值,这是SVM对偶问题的拉格朗日乘数。根据该文档,似乎scikit-learn仅提供svm.dual_coef_,它是Lagrange乘数alpha与数据点标签的乘积。

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

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

最佳答案

由于alpha值按定义是正数,因此您可以通过使用double_coefs来获取它:

alphas = np.abs(svm.dual_coef_)

这是以下事实的直接结果:
svm.dual_coef_[i] = labels[i] * alphas[i]

其中labels[i]-1+1alphas[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 => 不可能(字母为非负数)
  • 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 => 不可能(字母为非负数)
  • labels[i] == +1alphas[i]== 0 => 这不是支持向量

  • 因此,如果dual_coef_[i]为正,则它是alphas[i]系数,属于正类;如果为负,则alphas[i] == -dual_coef_[i]属于负类。

    关于python - 如何获取scikit-learning SVM分类器的所有alpha值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33860938/

    10-11 08:55