概率 kNN 和朴素贝叶斯之间的区别

Difference between Probabilistic kNN and Naive Bayes

我正在尝试修改标准 kNN 算法以获得属于 class 的概率,而不仅仅是通常的 classification。我没有找到太多关于概率 kNN 的信息,但据我了解,它的工作原理与 kNN 类似,不同之处在于它计算给定半径内每个 class 的示例百分比。

所以我想知道,朴素贝叶斯和概率 kNN 之间有什么区别?我只能发现朴素贝叶斯考虑了先验可能性,而 PkNN 没有。我理解错了吗?

提前致谢!

老实说几乎没有相似之处。

朴素贝叶斯假设每个 class 都按照简单分布进行分布,独立于特征基础。对于连续的情况——它将对你的整个 class(每个)拟合径向正态分布,然后通过 argmax_y N(m_y, Sigma_y)

做出决定

另一方面,KNN 不是概率模型。您所指的修改只是原始想法的 "smooth" 版本,其中您 return 最近邻集中每个 class 的比率(这实际上不是任何 "probabilistic kNN",它只是常规的 kNN,它是概率的粗略估计)。这对数据分布没有任何假设(除了局部平滑)。特别是 - 它是一个非参数模型,如果有足够的训练样本,它将完美地适合任何数据集。朴素贝叶斯仅适用于 K 个高斯(其中 K 是 classes 的数量)。

(我不知道如何格式化数学公式。有关更多详细信息和清晰表示,请参阅this。)

我想提出一个相反的观点,即 KNN 是一种简化的朴素贝叶斯 (NB) 将 KNN 视为密度估计的均值

为了执行密度估计,我们尝试估计 p(x) = k/NV,其中 k 是位于区域 R 中的样本数,N 是样本总数,V 是体积通常,有两种估计方法:(1)固定V,计算k,称为核密度估计或Parzenwindow; (2)固定k,计算V,即KNN-based密度估计。由于其许多缺点,后一种不如前一种出名。

然而,我们可以使用KNN-based密度估计来连接KNN和NB。给定总 N 个样本,class ci 的 Ni 个样本,我们可以通过考虑包含 x:

的区域,将 NB 写成 KNN-based 密度估计的形式

P(ci|x) = P(x|ci)P(ci)/P(x) = (ki/NiV)(Ni/N)/(k/NV) = ki/k,

其中 ki 是 class ci 位于该区域的样本数。最终形式 ki/k 实际上是 KNN classifier.