MATLAB中的KNN分类 - 混淆矩阵和ROC?

use*_*820 5 matlab knn confusion-matrix roc

我正在尝试使用不同的分类器(LDA,SVM,KNN)对包含两个类的数据集进行分类,并希望比较它们的性能.我通过修改先验概率为LDA制作了ROC曲线.

但是我如何为KNN分类器做同样的事情呢?

我搜索了文档,发现了一些功能:

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

我可以运行(a)并通过使用留一法交叉验证来获得混淆矩阵,但是不可能改变先验概率来进行ROC?

我之前没有尝试过(b)但是这会创建一个模型,您可以在其中修改mdl.Prior.但我不知道如何获得混淆矩阵.

有没有我错过的选项或者可以解释如何充分利用这些功能获得ROC的人?

pau*_*aul 0

这确实并不简单,因为 k-nn 分类器的输出不是通过阈值得出决策的分数,而只是基于多数票的决策。

我的建议:根据邻域中类的比例定义一个分数,然后对该分数进行阈值计算 ROC。宽松地说,分数表达了算法的确定性;它的范围从 -1(-1 类的最大确定性)到 +1(+1 类的最大确定性)。

示例:对于 k=6,分数为

  • 如果所有六个邻居都属于 +1 类,则为 1;
  • 如果所有六个邻居都属于 -1 类,则为 -1;
  • 如果将邻居减半为 +1 类,将邻居减半为 -1 类,则为 0。

计算出每个数据点的分数后,您可以将其输入标准 ROC 函数。