计算K-NN分类器的{ROC曲线

时间:2016-05-02 13:55:40

标签: machine-learning knn roc

正如您可能知道的那样,在K-NN中,通常根据“多数投票”进行决策,而不是根据某个阈值 - 即没有基于ROC曲线的参数

请注意,在我的K-NN分类器的实现中,投票没有相同的权重。即每个“邻居”的权重是 e ^( - d) ,其中 d 是两者之间的距离测试样本和邻居。该度量为K个邻居中较近邻居的投票提供了更高的权重。

我当前的决定规则是,如果正面邻居的得分总和高于负面样本得分的总和,那么我的分类器会说 POSITIVE ,否则,它会说 NEGATIVE

但是 - 没有门槛

然后,我想到了以下想法:

决定具有更高总票数的样本的类别,可以更一般地描述为使用阈值0,对于通过以下方式计算的分数: < strong> (POS_NEIGHBORS_SUMMED_SCORES - NEG_NEIGHBORS_SUMMED_SCORES)

所以我想改变我的决策规则是在该度量上使用阈值,并根据值的阈值绘制ROC曲线

(POS_NEIGHBORS_SUMMED_SCORES - NEG_NEIGHBORS_SUMMED_SCORES)

这听起来像是一项很好的方法吗?

1 个答案:

答案 0 :(得分:1)

是的,它或多或少是通常使用的。如果你看一下scikit-learn它的权重是knn,它们也有predit_proba,它给你一个明确的决策门槛。通常,您不希望以差异为条件,而是比率

votes positive / (votes negative + votes positive) < T

这样,你知道你只需要将阈值从0“移动”到1,而不是任意值。它现在也有一个明确的解释 - 作为你认为“足够确定”的内部概率估计。默认情况下T = 0.5,如果概率高于50%,则将其归类为正数,但如前所述 - 您可以做任何事情。