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