2013-03-11 43 views
1

這可能是一個奇怪的請求,所以先解釋一下。我最近突然發生了高速崩潰,並丟失了一個數據文件,我正在使用這個文件用libSVM生成模型文件。我確實有從該數據文件生成的SVM模型和縮放文件,我想知道是否有方法從模型文件中的支持向量中生成數據文件,例如model_sv_to_instances(model, &instances),因爲獲取實例的過程非常非常昂貴。 (我知道它不會和原來的一樣,但仍然比沒有好)我使用了一個RBF內核的概率SVM。LIBSVM:從模型文件中獲取支持向量

回答

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 

如果你有趣的是,與SV線後。

1 1:0 2:0 
1 1:1 2:1 
-1 1:1 2:0 
-1 1:0 2:1 

這些數據點被選爲支持向量,所以你只需要解析文件。格式如下: [標籤] [索引1]:[值1] [索引2]:[值2] ... [索引n] [價值]

例如,從我的例子可以得出結論,我的訓練集是:

x y desired val 
0 0  -1 
0 1  1 
1 0  1 
1 1  -1 

一些注意事項和警告。的SV和數據點的數量之間的比率取決於所使用的參數。在某些情況下比大,你將有很少的SV與您的數據進行比較。

另一件事要記住的是,這種減少是有可能改變的問題,如果你只是顆衛星的數據點再訓練,你可能會得到一個完整的不同的參數完全不同的模式。

祝你好運!

+0

非常感謝您的回答。我估計SV會縮小,所以我將不得不「縮小」它以再次獲得真實點數? – vseguip 2013-03-11 19:54:43

+0

@vseguip如果縮放事前......是的,你需要unscale他們。該庫不會自動縮放它們,因此它將取決於您如何構建模型。 – Pedrom 2013-03-11 20:22:29

+0

此外,你應該注意一下這個小告誡的:http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f430(模型文件中的'label'線是真的,真的重要)。另一方面,你應該總是有這樣的備份。例如,Dropbox非常棒。 – 2013-03-14 16:13:30

1

據我所知,SVM模型,特別是libSVM模型,只包含支持向量。這些向量表示類之間的邊界線;最有可能的是,它們不代表絕大多數數據點。所以,不幸的是,我認爲沒有辦法從模型中重新生成數據。

話雖如此,我能想到的一個深奧的情況下可能有一些價值的模型:有企業專門回收這種情況下的數據(例如,從墜毀HDS)。但是,恢復的數據有時存在差距;在某些情況下,該模型可能會被反向設計以填補某些缺失點。但是,這是非常理論的。

編輯:作爲其他的答案狀態下,通過支持向量表示的數據點的比例可能會有所不同,這取決於特定的問題和參數。但是,如上所述,在大多數情況下,您只能重建原始數據集的一小部分。

+0

「這些載體代表類別之間的邊界線,它不直接參考任何特定的數據點」你是對不同之處在於支持向量設置,因爲它們是定義超平面數據點的訓練不直接涉及該分離類。 – Pedrom 2013-03-11 15:25:08

+0

當然你是對的。編輯... – etov 2013-03-11 16:09:06

+0

「幸運」的模式是這樣即便如此告誡我將能夠恢復數據的公平份額相當大。 – vseguip 2013-03-11 19:57:27

1

RBF的情況下,你是幸運的。根據libsvm FAQ可以提取從模型文件支撐載體:

在模型文件,參數和其它信息,如標籤後,每一行代表一個支持向量。

但請記住,這些只是支持向量,它們只是原始輸入數據的一小部分。

相關問題