如何获得 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+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 => 不可能(alpha 为非负数) 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 => 不可能(alpha 为非负数) labels[i] == +1alphas[i]== 0 => 它不是支持向量

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

【讨论】:

以上是关于如何获得 scikit-learn SVM 分类器的所有 alpha 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SIFT 和 SVM 实现通用图像分类器

Python scikit-learn SVM 分类器“ValueError:找到昏暗 3 的数组。预期 <= 2”

在 MapReduce 中组合 SVM 分类器

如何让 SVM 很好地处理 scikit-learn 中的缺失数据?

如何获得在更大矩阵上训练的 SVM 以对不同大小的矩阵进行分类

如何使用 scikit-learn 计算用于情感分析的分类报告