Классификация КНН в MATLAB - матрица смешения и РПЦ?

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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам