如何从svm_model获取支持向量和rho值(在Python中)?

1 投票
3 回答
3764 浏览
提问于 2025-04-16 12:46

我用libsvm训练得到了svm_model,接下来我想知道怎么从这个模型中获取rho值和支持向量(SVs)。我知道这些值在模型输出时会显示出来,但我不知道怎么提取支持向量。

例如:

svm_model = svmutil.svm_train(Labels,X, svm_options)

那么,如何从svm_model中获取rho值和支持向量呢?

3 个回答

1

如果你运行随 libSVM 安装包一起提供的可执行文件 svm_train.exe,你会发现它会生成一个模型文件,名字是 XXX.model。如果你用编辑器打开这个模型文件,你会看到里面有一些 rho 值和支持向量的列表。

看起来在 C++/C 代码中,并没有办法直接从这个对象中提取这些信息。

4

如果你在使用svmutil这个包,你可以这样获取支持向量、系数和rho值:

m = svmutil.svm_train( y, xs, "-s 3 -t 2" ) # EPSILON_SVR and RBF kernel
rho = m.rho[0] 
svs = m.get_SV() # Dictionary with indices 1, 2 corresponding to i-th dim on support vector
sv_coeffs = m.get_sv_coef()
1

经过将近一个月的尝试,我发现从生成的svm_model中根本无法获取rho值或SVs(支持向量)。如果有人想找这些东西,可以使用scikit-learn这个库,它可以轻松提供支持向量、对偶截距和rho值。而且,它的速度比libsvm在Python中的实现要快,并且支持numpy数组和矩阵。

撰写回答