正如您可能知道的那样,在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)
这听起来像是一项很好的方法吗?
答案 0 :(得分:1)
是的,它或多或少是通常使用的。如果你看一下scikit-learn它的权重是knn,它们也有predit_proba,它给你一个明确的决策门槛。通常,您不希望以差异为条件,而是比率
votes positive / (votes negative + votes positive) < T
这样,你知道你只需要将阈值从0“移动”到1,而不是任意值。它现在也有一个明确的解释 - 作为你认为“足够确定”的内部概率估计。默认情况下T = 0.5,如果概率高于50%,则将其归类为正数,但如前所述 - 您可以做任何事情。