如何获取 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_
,它是拉格朗日乘数alpha和一个数据点的标签的乘积
我试图通过将 svm.dual_coef_
的元素除以数据标签来手动计算 alpha 值,但是由于 svm.dual_coef_
仅存储支持向量的系数,我不确定是否我遍历这个数组,支持向量的顺序将与原始训练数据中的顺序相同。
那么有没有一种可靠的方法来获取支持向量的 alpha 值?
根据定义,alpha 值是正的,您可以通过取 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 不存储 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]
系数,属于正class,若为负则alphas[i] == -dual_coef_[i]
且属于正属于负数class.
在使用 scikit-learn 训练 SVM 分类器后,我需要 alpha 值,即 SVM 对偶问题的拉格朗日乘数。根据文档,好像scikit-learn只提供了svm.dual_coef_
,它是拉格朗日乘数alpha和一个数据点的标签的乘积
我试图通过将 svm.dual_coef_
的元素除以数据标签来手动计算 alpha 值,但是由于 svm.dual_coef_
仅存储支持向量的系数,我不确定是否我遍历这个数组,支持向量的顺序将与原始训练数据中的顺序相同。
那么有没有一种可靠的方法来获取支持向量的 alpha 值?
根据定义,alpha 值是正的,您可以通过取 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 不存储 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]
系数,属于正class,若为负则alphas[i] == -dual_coef_[i]
且属于正属于负数class.