LIBSVM:从模型文件中获取支持向量

vse*_*uip 1 machine-learning svm libsvm

这可能是一个奇怪的请求,所以先解释一下.我最近遇到了突然的高清崩溃,丢失了一个用于生成带有libSVM的模型文件的数据文件.我确实有我从这个数据文件生成的SVM模型和缩放文件,我想知道是否有一种方法可以从模型文件中的支持向量生成数据文件,就像是model_sv_to_instances(model, &instances)因为获取实例的过程非常昂贵.(我知道它与原版不一样但仍然比没有更好)我正在使用带RBF内核的概率SVM.

Ped*_*rom 6

如果您在任何文本编辑器中打开给定的模型文件,您会发现如下所示:

 svm_type c_svc
 kernel_type sigmoid
 gamma 0.5
 coef0 0
 nr_class 2
 total_sv 4
 rho 0
 label 0 1
 nr_sv 2 2
 SV
 1 1:0 2:0
 1 1:1 2:1
 -1 1:1 2:0
 -1 1:0 2:1
Run Code Online (Sandbox Code Playgroud)

对你来说有趣的事情是跟在SV之后.

 1 1:0 2:0
 1 1:1 2:1
-1 1:1 2:0
-1 1:0 2:1
Run Code Online (Sandbox Code Playgroud)

这些是被选为支持向量的数据点,因此您只需要解析文件.格式如下:[label] [index1]:[value1] [index2]:[value2] ... [indexn] [valuen]

例如,从我的例子中你可以得出结论,我的训练集是:

x y desired val 
0 0     -1
0 1      1
1 0      1
1 1     -1
Run Code Online (Sandbox Code Playgroud)

一些注意事项和警告.SV数量和数据点之间的比率取决于您使用的参数.在某些情况下,比率很大,与数据相比,您的SV很少.

要记住的另一件事是,这种减少很可能会改变问题,如果再次使用SV作为数据点进行训练,您可能会得到一个完全不同的模型,其中包含完整不同的参数集.

祝好运!