Классификация KNN в MATLAB - матрице путаницы и ROC?

Я пытаюсь классифицировать набор данных, содержащий два класса, используя разные классификаторы (LDA, SVM, KNN), и хотел бы сравнить их производительность. Я сделал кривые ROC для LDA, изменив априорную вероятность.

но как я могу сделать то же самое для классификатора KNN?

Я искал документацию и нашел некоторые функции:

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

Я могу запустить (a) и получить матрицу путаницы используя кросс-валидацию leave-one-out, но невозможно изменить априорную вероятность создания ROC?

Я не пробовал (b) раньше, но это создает модель, в которой вы можете изменить mdl.Прежде. Но я понятия не имею, как получить матрицу путаницы.

есть ли вариант, который я пропустил, или кто-то, кто может объяснить, как полностью использовать эту функцию для получения ROC?

1 ответов


Это действительно не просто, потому что выход классификатора k-nn-это не оценка, из которой решение выводится путем порога, а только решение, основанное на голосовании большинства.

мое предложение: определите оценку, основанную на соотношении классов в окрестности, а затем порог этой оценки для вычисления ROC. Грубо говоря, оценка выражает, насколько определенный алгоритм; он колеблется от -1 (максимальная определенность для класса -1) до +1 (максимальная определенность для класса +1).

пример: для k=6, оценка

  • 1 если все шесть соседей-класса +1;
  • 1, если все шесть соседей-класса -1;
  • 0 если половина соседей класса +1 и половина соседей класса -1.

после того, как вы вычислили этот балл для каждой точки данных, вы можете ввести его в стандартную функцию ROC.