2012-11-30 30 views
6

Próbuję sklasyfikować zestaw danych zawierający dwie klasy przy użyciu różnych klasyfikatorów (LDA, SVM, KNN) i chciałbym porównać ich wydajność. Wykonałem krzywą ROC dla LDA, modyfikując prawdopodobieństwo priori.Klasyfikacja KNN w MATLAB - macierz zamieszania i ROC?

Ale jak mogę zrobić to samo dla klasyfikatora KNN?

Szukałem dokumentację i niektóre funkcje:

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

mogę uruchomić (a) i dostać matrycę zamieszanie za pomocą leave-one-out cross- sprawdzanie poprawności, ale nie można zmienić prawdopodobieństwa uzyskania ROC?

Nie próbowałem (b) wcześniej, ale tworzy to model, w którym można zmodyfikować plik mdl.Prior. Ale nie mam pojęcia, jak uzyskać matrycę zamieszania.

Czy istnieje opcja, którą przegapiłem, lub ktoś, kto może wyjaśnić, jak w pełni wykorzystać te funkcje, aby uzyskać ROC?

Odpowiedz

0

To naprawdę nie jest proste, ponieważ wynik k-nn klasyfikatora nie jest wynikiem, z którego wynika decyzja o progowaniu, ale tylko decyzja oparta na większości głosów.

Moja sugestia: zdefiniuj wynik na podstawie stosunku klas w sąsiedztwie, a następnie próg ten wynik, aby obliczyć ROC. Luźno mówiąc, wynik wyraża, jak pewien algorytm; waha się od -1 (maksymalna pewność dla klasy -1) do +1 (maksymalna pewność dla klasy +1).

przykład: dla k = 6, wynik

  • 1, jeśli wszystkie sześć sąsiedzi klasy +1;
  • -1 jeśli wszyscy sześcioro sąsiadów należą do klasy -1;
  • 0 o połowę sąsiedzi są klasy +1 i o połowę sąsiadów należą do klasy -1.

Po obliczeniu tego wyniku dla każdego punktu, można go wprowadzić do standardowej funkcji ROC.

+0

Dziękuję za komentarz. Zastanowię się, czy możliwe są inne opcje i sprawdź swoją sugestię! – user1865820