![](/img/trans.png)
[英]How to parallelise .predict() method of a scikit-learn SVM (SVC) Classifier?
[英]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
或+1
, alphas[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] == -1
且alphas[i] < 0
=> 不可能(alphas为非负数) 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
=> 不可能(alphas是非负的) labels[i] == +1
和alphas[i]== 0
=> 它不是支持向量 因此,如果dual_coef_[i]
为正,则它是alphas[i]
系数,并且它属于正类,如果它是负数,则alphas[i] == -dual_coef_[i]
并且它属于负类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.