2012-11-30 95 views
6

我想分類包含使用不同分類器(LDA,SVM,KNN)的兩個類的數據集,並且想比較它們的性能。我通過修改先驗概率爲LDA制定了ROC曲線。MATLAB中的KNN分類 - 混淆矩陣和ROC?

但是我怎麼能爲KNN分類器做同樣的事情呢?

我搜索的文件,發現了一些功能:

  1. Class = knnclassify(Sample, Training, Group, k)
  2. mdl = ClassificationKNN.fit(X,Y,'NumNeighbors',i,'leaveout','On')

我可以運行(一),並通過使用留一法交叉弄混淆矩陣驗證,但是不可能改變製作ROC的先驗概率?

我還沒有嘗試過(b)之前,但是這會創建一個模型,您可以在其中修改mdl.Prior。但我不知道如何得到一個混淆矩陣。

有沒有我錯過的選擇,或者有人可以解釋如何充分利用這些功能獲得ROC?

回答

0

這確實不是直截了當的,因爲k-nn分類器的輸出不是通過閾值得出決定的分數,而只是基於大多數投票決定的分數。

我的建議:根據鄰居中類別的比例定義分數,然後將此分數設爲閾值以計算ROC。鬆散地說,分數表示算法的確定性;它的範圍從-1(等級-1的最大確定性)到+1(等級+1的最大確定性)。

示例:對於k = 6,分數是

  • 1如果所有六個鄰居是1類;
  • -1如果所有六個鄰居都屬於-1類;
  • 0如果將鄰居等分爲+1級並且將鄰居等級減半則爲-1。

一旦你爲每個數據點計算了這個分數,你就可以將它送入一個標準的ROC函數。

+0

謝謝你的評論。我會考慮其他選項是否可行並查看您的建議! – user1865820