2012-11-30 10 views
6

Sto provando a classificare un set di dati contenente due classi che utilizzano classificatori diversi (LDA, SVM, KNN) e vorrei confrontare le loro prestazioni. Ho trasformato le curve ROC per la LDA modificando la probabilità a priori.Classificazione KNN in MATLAB - matrice di confusione e ROC?

Ma come posso fare lo stesso per un classificatore KNN?

ho cercato la documentazione e hanno trovato alcune funzioni:

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

posso correre (a) e ottenere una matrice di confusione utilizzando leave-one-out cross- validazione ma non è possibile modificare la probabilità a priori di creare un ROC?

Non ho provato (b) prima ma questo crea un modello in cui è possibile modificare mdl.Prior. Ma non ho idea di come ottenere una matrice di confusione.

C'è un'opzione che ho perso o qualcuno che può spiegare come utilizzare pienamente tali funzioni per ottenere un ROC?

risposta

0

Questo non è in realtà semplice, perché l'output del classificatore k-nn non è un punteggio da cui deriva una decisione mediante soglia, ma solo una decisione basata sul voto a maggioranza.

Il mio suggerimento: definire un punteggio basato sul rapporto tra le classi nel vicinato e quindi impostare questo punteggio per calcolare il ROC. In senso lato, lo spartito esprime la certezza dell'algoritmo; varia da -1 (massima certezza per la classe -1) a +1 (massima certezza per la classe +1).

Esempio: per k = 6, il punteggio è

  • 1 se tutti i sei vicini sono di classe 1;
  • -1 se tutti e sei i vicini sono di classe -1;
  • 0 se dimezzare i vicini sono di classe +1 e dimezzare i neigradi sono di classe -1.

Dopo aver calcolato questo punteggio per ciascun punto dati, è possibile inserirlo in una funzione ROC standard.

+0

Grazie per il commento. Prenderò in considerazione la possibilità di altre opzioni e di esaminare il tuo suggerimento! – user1865820

Problemi correlati