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

Posted

技术标签:

【中文标题】概率 kNN 和朴素贝叶斯之间的区别【英文标题】:Difference between Probabilistic kNN and Naive Bayes 【发布时间】:2016-08-26 11:14:42 【问题描述】:

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

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

提前致谢!

【问题讨论】:

【参考方案1】:

说实话,几乎没有相似之处。

朴素贝叶斯假设每个类都根据简单分布进行分布,独立于特征。对于连续情况-它将适合您的整个班级(每个班级)的径向正态分布,然后通过argmax_y N(m_y, Sigma_y) 做出决定

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

【讨论】:

好的,但是我根本没有得到概率 kNN。它采用什么机制来确定样本的概率? 概率是通过邻域中的朴素估计器估计的,例如P(y|x) = # labels y in NN(x) / # size of NN(x),其中 NN 是最近邻的集合。【参考方案2】:

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

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

为了进行密度估计,我们尝试估计 p(x) = k/NV,其中 k 是位于区域 R 中的样本数,N 是总样本数,V 是区域 R 的体积. 通常,估计有两种方法:(1)固定V,计算k,称为核密度估计或Parzen窗口; (2)固定k,计算V,即基于KNN的密度估计。后者的名气远不如前者,因为它有很多缺点。

然而,我们可以使用基于 KNN 的密度估计来连接 KNN 和 NB。给定总共 N 个样本,Ni 类样本,我们可以通过考虑包含 x 的区域将 NB 写成基于 KNN 的密度估计的形式:

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

其中 ki 是该区域中类别 ci 的样本数。最终形式 ki/k 实际上是 KNN 分类器。

【讨论】:

以上是关于概率 kNN 和朴素贝叶斯之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

数据挖掘十大经典算法之朴素贝叶斯

朴素贝叶斯(Naive Bayes)算法

机器学习:朴素贝叶斯的python实现

sklearn-朴素贝叶斯

三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯伯努利朴素贝叶斯多项式朴素贝叶斯

朴素贝叶斯的理解