如何获得 scikit-learn SVM 分类器的所有 alpha 值?
Posted
技术标签:
【中文标题】如何获得 scikit-learn SVM 分类器的所有 alpha 值?【英文标题】:How to get all alpha values of scikit-learn SVM classifier? 【发布时间】:2016-02-24 23:06:32 【问题描述】:在使用 scikit-learn 训练 SVM 分类器后,我需要 alpha 值,即 SVM 对偶问题的拉格朗日乘数。根据文档,scikit-learn 似乎只提供了svm.dual_coef_
,这是拉格朗日乘数 alpha 和数据点标签的乘积。
我尝试通过将svm.dual_coef_
的元素除以数据标签来手动计算 alpha 值,但由于svm.dual_coef_
仅存储支持向量的系数,我不确定是否迭代此数组,支持向量的顺序将与原始训练数据中的顺序相同。
那么有没有可靠的方法来获取支持向量的 alpha 值?
【问题讨论】:
【参考方案1】:由于 alpha 值根据定义为正,您可以通过获取 dual_coefs 的 abs 来获得它:
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] == -1
和 alphas[i] > 0
=> dual_coef_[i] < 0
和 dual_coef_[i] == -alphas[i] == labels[i] * alphas[i]
labels[i] == -1
和 alphas[i] < 0
=> 不可能(alpha 为非负数)
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
=> 不可能(alpha 为非负数)
labels[i] == +1
和 alphas[i]== 0
=> 它不是支持向量
因此,如果dual_coef_[i]
为正则为alphas[i]
系数,属于正类,如果为负,则alphas[i] == -dual_coef_[i]
属于负类。
【讨论】:
以上是关于如何获得 scikit-learn SVM 分类器的所有 alpha 值?的主要内容,如果未能解决你的问题,请参考以下文章
Python scikit-learn SVM 分类器“ValueError:找到昏暗 3 的数组。预期 <= 2”
如何让 SVM 很好地处理 scikit-learn 中的缺失数据?