使用多变量Parzen窗口和球形核的贝叶斯分类

我在实现使用球形(或各向同性)核的Parzen窗口算法的贝叶斯分类器时遇到了问题。

我使用包含2个维度和3个不同类别的测试数据运行算法(每个类别有10个测试点和40个训练点,全部在2个维度上)。当我改变超参数的值(球形高斯核的sigma_sq)时,我发现这对点的分类没有影响。

这是我的密度估计器。我的self.sigma_sq在我的数据的所有维度上(2个维度)都是相同的

 for i in range(test_data.shape[0]):     log_prob_intermediate = 0      for j in range(n): #n是训练集的大小         c = -self.n_dims * np.log(2*np.pi)/2.0 - self.n_dims*np.log(self.sigma_sq)/2.0         log_prob_intermediate += (c - np.sum((test_data[i,:] -  self.train_data[j,:])**2.0) / (2.0 * self.sigma_sq))     log_prob.append(log_prob_intermediate / n)

我如何实现我的贝叶斯分类器:我的贝叶斯分类器必须区分3个类别。我创建了3个训练集和3个测试集(每个类别一个训练集和测试集)。对于测试集中的每个点,我对该点运行每个类别的密度估计器。这给我一个包含3个值的向量:新点属于类别1、类别2或类别3的对数概率。然后我选择最大值并将新点分配到该类别。

  1. 由于我使用的是球形高斯核,我认为我的sigma_sq必须在每个密度估计器中是通用的(每个类别一个密度估计器)。这是正确的吗?如果我对每个维度对使用不同的sigma_sq,这不是某种程度上变成了对角高斯核吗?

  2. 对于我的30个测试点列表(每个类别10个),我发现对这些点运行贝叶斯分类器继续给我每个点相同的分类,无论我使用什么sigma。这是正常的吗?由于这是球形高斯核,并且所有维度使用相同的核,增加或减少我的sigma_sq只是对我的对数概率产生比例效应而没有改变分类吗?或者我的密度估计器有我无法解决的问题。


回答:

让我们分别处理每个问题

  1. 对每个维度使用相同的sigma确实使你的核成为径向核;然而,你可以(而且应该!)对每个类别使用不同的sigma,因为每个分布通常需要不同的密度估计器,关于高斯情况下的核宽度选择的简单启发式方法,可以阅读例如Scott的经验法则或Silverman的后续工作。
  2. 很难判断在你的特定情况下,sigma的选择是否应该改变分类 – 一般来说应该是这样的;但每个数据集都有其自身的特性。然而,你的数据是仅2D的,这使其非常适合可视化。绘制你的数据,然后,绘制每个KDE,并简单地视觉上调查发生了什么

Related Posts

keras cnn_lstm输入层不接受一维输入

我有一系列长的一维向量(3000位数字),我尝试对它们…

使用Tensorflow训练多层感知器对-1、0或1进行分类的问题

我正在尝试创建一个多层感知器来根据一些指标对情感进行分…

迁移学习准确率差

我有一个任务,需要根据缺陷对种子进行分类。我有大约14…

如何计算谷歌地球图片中树木覆盖的面积,或者计算树木与其他物体的比例

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何将预训练的神经网络用于灰度图像?

我有一组包含灰度图像的数据集,我希望在这些图像上训练一…

tf.nn.softmax_cross_entropy_with_logits 如何使用 labels

在一次作业中,我需要编写一个单层神经网络。在大部分内容…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注