Классификация КНН в MATLAB - матрица смешения и РПЦ?
Я пытаюсь классифицировать набор данных, содержащий два класса, используя разные классификаторы (LDA, SVM, KNN) и хотел бы сравнить их производительность. Я сделал кривые ROC для LDA, изменив априорную вероятность.
Но как я могу сделать то же самое для классификатора KNN?
Я искал документацию и нашел некоторые функции:
Class = knnclassify(Sample, Training, Group, k)
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.