題主的問題一是如何使用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%,那說明之前訓練的模型是比較好的。當然前提是測試樣本也要足夠多。
題主的問題一是如何使用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%,那說明之前訓練的模型是比較好的。當然前提是測試樣本也要足夠多。