繁体   English   中英

如何获取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_ ,它是拉格朗日乘数α和数据点标签的乘积。

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

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

由于alpha值的定义是正面的,你可以通过abs的dual_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不存储alphas的原因 - 它们由dual_coefs_以及标签唯一地表示。

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

  • labels[i] == -1 and alphas[i] > 0 => dual_coef_[i] < 0 and dual_coef_[i] == -alphas[i] == labels[i] * alphas[i]
  • labels[i] == -1alphas[i] < 0 => 不可能(alphas为非负数)
  • 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 => 不可能(alphas是非负的)
  • labels[i] == +1alphas[i]== 0 => 它不是支持向量

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM