2013-05-14 75 views
1

我想在MATLAB中使用使用LibSVM的單類分類。在libsvm matlab中標記一個用於交叉驗證的類

我想訓練數據,並使用交叉驗證,但我不知道我必須做的標記異常值。

如果例如我有這樣的數據:

trainData = [1,1,1; 1,1,2; 1,1,1.5; 1,1.5,1; 20,2,3; 2,20,2; 2,20,5; 20,2,2]; 
labelTrainData = [-1 -1 -1 -1 0 0 0 0]; 

(前四個是1類的例子,其他四個爲異常值的實例,只是爲了交叉驗證)

我使用此訓練模型:

model = svmtrain(labelTrainData, trainData , '-s 2 -t 0 -d 3 -g 2.0 -r 2.0 -n 0.5 -m 40.0 -c 0.0 -e 0.0010 -p 0.1 -v 2'); 

我不確定使用哪個值來標記1級數據以及使用哪些異常值。有人知道如何做到這一點?

在此先感謝。 -Jessica

+0

檢查下面的帖子。一個級別的svm,顧名思義,你只在訓練集中有一個類http://stackoverflow.com/questions/14588967/one-class-svm-libsvm – Cici

+0

謝謝,但是,我仍然有下一個疑問。所以不可能在1類/異常值上使用交叉驗證?我使用了weka包裝器,如果我使用標有'?'的實例他們在訓練過程中被忽略。 – jessica

+0

另外,這個標籤是否適合這個課程?只是任何數字,還是應該嚴格使用-1或特定值? – jessica

回答

0

根據http://www.joint-research.org/wp-content/uploads/2011/07/lukashevich2009Using-One-class-SVM-Outliers-Detection.pdf「由於在 一類SVM缺乏類的標籤,這是不可能使用交叉驗證來優化內核 參數」。 然而,根據LIBSVM FAQ,這種說法並不正確:

問:我如何選擇一類SVM參數作爲訓練數據是隻在一個類? 您已經預先指定了真正的陽性率,然後搜索實現類似交叉驗證準確性的參數。

此外爲LIBSVM源的自述輸入數據的表示: 「對於分類,標籤是指示類別標籤的整數...對於一類SVM,它沒有使用,因此可以是任何數。」

我覺得你的異常值不應包括在訓練數據 - LIBSVM會忽略培訓的標籤。你想要做的是找到一個包含好數據但不是異常值的超球面。如果您在數據中訓練出異常值,LIBSVM會嘗試找到包含異常值的超球面,這正是您不想要的。因此,您需要一個無異常值的訓練數據集,一個包含選擇參數的異常值的驗證數據集,以及一個最終測試數據集,以查看您的模型是否具有概括性。