对 OneClassSVM 的 "dual_coef_" 感到困惑
Confuse about "dual_coef_" of OneClassSVM
我已经阅读了sklearn中提供的关于one-class-svm的论文"Estimating the Support of a High-Dimensional Distribution"。
我注意到对偶变量有一个约束 ∑_i α_i =1。
但是当我尝试调用 api clf._dual_coef_
时,我发现 clf._dual_coef_
的总和不是 1。
我是不是漏掉了任何细节?
谢谢
结果
对于一个-class SVM,LIBSVM解决了一个缩放问题,即每个α_i乘以(νℓ),其中ν是超参数,ℓ是实例数。所以约束变为α_i≤1和∑_i α_i = νℓ.
原因
在 LIBSVM
的第 2.3 节中
Similar to the case of ν-SVC, in LIBSVM, we solve a scaled version of (7).
第 2.2 节(ν-支持向量分类)中引用的地方
In LIBSVM, we solve a scaled version of problem (5) because numerically α_i may be too small due to the constraint α_i≤1/ℓ.
所以对于one-class SVM,LIBSVM解决了一个缩放问题,因为由于约束α_i≤1/(νℓ),在数值上α_i可能太小了。
验证
具体来说,因为问题是关于sklearn的,所以我修改了代码here to confirm thought, though from my understanding sklearn.svm.OneClassSVM use LIBSVM in the backend.
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
我已经阅读了sklearn中提供的关于one-class-svm的论文"Estimating the Support of a High-Dimensional Distribution"。
我注意到对偶变量有一个约束 ∑_i α_i =1。
但是当我尝试调用 api clf._dual_coef_
时,我发现 clf._dual_coef_
的总和不是 1。
我是不是漏掉了任何细节?
谢谢
结果
对于一个-class SVM,LIBSVM解决了一个缩放问题,即每个α_i乘以(νℓ),其中ν是超参数,ℓ是实例数。所以约束变为α_i≤1和∑_i α_i = νℓ.
原因
在 LIBSVM
的第 2.3 节中Similar to the case of ν-SVC, in LIBSVM, we solve a scaled version of (7).
第 2.2 节(ν-支持向量分类)中引用的地方
In LIBSVM, we solve a scaled version of problem (5) because numerically α_i may be too small due to the constraint α_i≤1/ℓ.
所以对于one-class SVM,LIBSVM解决了一个缩放问题,因为由于约束α_i≤1/(νℓ),在数值上α_i可能太小了。
验证
具体来说,因为问题是关于sklearn的,所以我修改了代码here to confirm thought, though from my understanding sklearn.svm.OneClassSVM use LIBSVM in the backend.
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