MATLAB 中的 KNN 分类 - 混淆矩阵和 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 的人?

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

我的建议:根据邻域中班级的比例定义一个分数,然后阈值该分数以计算 ROC。粗略地说,分数表示算法的确定性;它的范围从 -1(类 -1 的最大确定性)到 +1(类的最大确定性 +1)。

示例:当 k=6 时,分数为

  • 如果所有六个邻居都是 +1 级,则为 1;
  • -1
  • 如果所有六个邻居都是 -1 类;
  • 0 如果邻居减
  • 半,则邻居为 +1 类,邻域减半为 -1 类。

计算每个数据点的此分数后,可以将其馈送到标准 ROC 函数中。

最新更新