这可能是一个奇怪的请求,所以先解释一下。我最近突然硬盘崩溃,丢失了一个用于生成libSVM模型文件的数据文件。我确实有从这个数据文件生成的SVM模型和缩放文件,我想知道是否有办法从模型文件中的支持向量生成一个数据文件,类似于model_sv_to_instances(model, &instances)
,因为获取实例的过程非常昂贵。(我知道它不会和原来的完全一样,但总比没有好)我使用的是带有RBF核的概率SVM。
回答:
如果你在任何文本编辑器中打开一个给定的模型文件,你会发现类似这样的内容:
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
对你来说,有趣的部分是在以SV开头的行之后。
1 1:0 2:0 1 1:1 2:1-1 1:1 2:0-1 1:0 2:1
这些是被选为支持向量的数据点,所以你只需要解析文件。格式如下:[label] [index1]:[value1] [index2]:[value2] … [indexn][valuen]
例如,从我的例子中你可以得出我的训练集是:
x y desired val 0 0 -10 1 11 0 11 1 -1
一些考虑和警告。支持向量与数据点之间的比例取决于你使用的参数。在某些情况下,比例很大,你的支持向量与数据相比会非常少。
另一件需要记住的事情是,这种减少可能会改变问题,如果你仅用支持向量作为数据点重新训练,你可能会得到一个完全不同的模型和一组完全不同的参数。
祝你好运!