求助關於libsvm的predict方法的具體意義?

使用svm-train訓練完成後,將一行數據作為測試樣本,運行svm-predict。測試數據的首位label值我是隨意寫的,結果predict出來一個accuracy=0% (0/1),如果我修改首位label值為訓練樣本中的某類別編號,則accuracy=100% (1/1)。
1,我想要知道單個測試樣本最有可能屬於哪一個類別(訓練時用的是多類別分類),該如何做?
2,我看見不少人在訓練完成後,用另一個樣本集做predict,返回一個介於0%和100%之間的accuracy值。我想這個值只能解釋為測試樣本中正確的類別編號所佔的百分比,但這又有何意義?這個accuracy到底是什麼意義?


題主的問題一是如何使用LIBSVM工具,二是對模式識別、機器學習中的一些概念不清楚。下面以matlab版libsvm為例:

訓練命令:

model = svmtrain(train_label, train_data, ["libsvm_options"]);

測試命令:

[predict_label, accuracy, dec_values] = svmpredict(test_label, test_data, model);

0. 「使用svm-train訓練完成後,將一行數據作為測試樣本,運行svm-predict。測試數據的首位label值我是隨意寫的,結果predict出來一個accuracy=0% (0/1),如果我修改首位label值為訓練樣本中的某類別編號,則accuracy=100% (1/1)。」

首先, 如果測試樣本的label在訓練樣本里沒出現過,那accuracy肯定是0. 想想這個類別之前都沒訓練學習過,機器怎麼可能把它預測出來。

其次,用訓練樣本當作測試樣本,這個意義不大。即使在訓練樣本上測試的結果是100%,這也並不說明問題,更可能的是過擬合。

1. 「我想要知道單個測試樣本最有可能屬於哪一個類別(訓練時用的是多類別分類),該如何做?」

單個樣本預測的類別,就是上述測試命令中的返回值predict_label,它是一個列向量,第i個元素代表第i個測試樣本的預測類別。

2. 「我看見不少人在訓練完成後,用另一個樣本集做predict,返回一個介於0%和100%之間的accuracy值。我想這個值只能解釋為測試樣本中正確的類別編號所佔的百分比,但這又有何意義?這個accuracy到底是什麼意義?」

這個accuracy非常有意義。想想你訓練了一個模型,如何評價這個模型的好壞?當然是找一組新的測試數據來進行預測,如果預測的準確率非常高,100%,那說明之前訓練的模型是比較好的。當然前提是測試樣本也要足夠多。


推薦閱讀:

文本數據可視化(下)——一圖勝千言
[Document Deduplication][1] MinHash
node2vec: Scalable Feature Learning for Networks 閱讀筆記

TAG:數據挖掘 | 自然語言處理 | SVM |