我已阅读sklearn中有关one-class-svm的论文“估计高维分布的支持”。
我注意到对偶变量的约束是∑_iα_i= 1。
但是当我尝试调用api clf._dual_coef_
时,我发现clf._dual_coef_
的总和不是1。
我是否错过任何细节?
谢谢
答案 0 :(得分:0)
对于一类SVM,LIBSVM解决了一个缩放问题,每个α_i都乘以(νℓ),其中ν是超参数,而ℓ是实例数。因此约束变为α_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的,所以我修改了here中的代码以确认思想,尽管根据我的理解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