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

时间:2012-11-30 09:34:01

标签: matlab knn roc confusion-matrix

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

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

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

  1. Class = knnclassify(Sample, Training, Group, k)
  2. mdl = ClassificationKNN.fit(X,Y,'NumNeighbors',i,'leaveout','On')
  3. 我可以运行(a)并通过使用留一法交叉验证来获得混淆矩阵,但是不可能更改先验概率来制作ROC吗?

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

    我是否错过了一个选项,或者有人可以解释如何充分利用这些功能获得ROC?

1 个答案:

答案 0 :(得分:0)

这确实不是直截了当的,因为k-nn分类器的输出不是通过阈值处理得出决策的分数,而是仅基于多数表决的决定。

我的建议:根据邻域中的班级比例定义分数,然后对此分数进行阈值计算ROC。松散地说,分数表示算法是多么确定;它的范围从-1(-1级的最大确定性)到+1(+1级的最大确定性)。

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

  • 1如果所有六个邻居都属于+1级;
  • -1如果所有六个邻居都是-1级;
  • 0如果邻居的等级为+1,并且将邻居的等级减半,则为-1。

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