PJ.*_*des 4 python machine-learning svm scikit-learn
在使用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_)
Run Code Online (Sandbox Code Playgroud)
威尔是事实的直接后果
svm.dual_coef_[i] = labels[i] * alphas[i]
Run Code Online (Sandbox Code Playgroud)
其中,labels[i]
要么是-1
或+1
和alphas[i]
始终为正.此外,您还可以获得每个标签
labels = np.sign(svm.dual_coef_)
Run Code Online (Sandbox Code Playgroud)
使用相同的观察.这也是为什么scikit-learn不存储alphas的原因 - 它们由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
=> 不可能(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]
则它属于负类.
归档时间: |
|
查看次数: |
2229 次 |
最近记录: |