6

我正在尝试使用不同的分类器(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?

4

1 回答 1

0

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

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

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

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

一旦你为每个数据点计算了这个分数,你就可以将它输入到一个标准的 ROC 函数中。

于 2013-01-11T16:06:39.550 回答