温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Confuse about "dual_coef_" of OneClassSVM
python scikit-learn svm libsvm

python - 对OneClassSVM的“ dual_coef_”感到困惑

发布于 2020-03-29 13:10:36

我已经阅读了sklearn中提供的有关class-svm的论文“估计对高维分布的支持”

我注意到对偶变量的约束是∑_iα_i= 1。

但是,当我尝试调用api时clf._dual_coef_,发现总和clf._dual_coef_不是1。

我错过了任何细节吗?

谢谢

查看更多

查看更多

提问者
Gu.lol
被浏览
26
hychou 2020-01-31 17:28

结果

对于一类SVM,LIBSVM解决了一个缩放问题,即每个α_i都乘以(νℓ),其中ν是超参数,而of是实例数。因此约束变为α_i≤1且∑_iα_i=νℓ。


原因

LIBSVM的 2.3节中

与ν-SVC的情况类似,在LIBSVM中,我们求解(7)的缩放版本。

在第2.2节(v-支持向量分类)中引用的位置

在LIBSVM中,我们解决问题(5)的缩放版本,因为由于约束α_i≤1/ℓ,数值α_i可能太小。

因此对于一类SVM,LIBSVM解决了一个定标问题,因为数值α_i由于约束α_i≤1/(ν1/)可能太小。


验证

具体来说,因为问题是关于sklearn的,所以我从此处修改代码以确认想法,尽管根据我的理解sklearn.svm.OneClassSVM在后端中使用LIBSVM。

from sklearn.svm import OneClassSVM
from sklearn.datasets import load_boston

X = load_boston()['data'][:, [8, 10]]
clf = OneClassSVM(nu=0.261, gamma=0.05)
clf.fit(X)

print(clf.nu*X.shape[0])
print(clf._dual_coef_.sum())

132.066
132.06599999999918