【问题标题】:Bayes Classification with Multivariate Parzen Window using Spherical Kernel使用 Spherical Kernel 的多元 Parzen 窗口的贝叶斯分类
【发布时间】:2016-02-01 22:47:45
【问题描述】:

我在使用球形(或各向同性)内核的 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 is size of training set
         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 个值的向量:我的新点在 class1、class2 或 class3 中的对数概率。然后我选择最大值并将新点分配给该类。

  1. 由于我使用的是球形高斯核,因此我的理解是,我的 sigma_sq 对于每个密度估计器(每个类一个密度估计器)必须是通用的。它是否正确?如果每个维度对都有不同的 sigma_sq,这不会给我一些对角高斯核吗?

  2. 对于我的 30 个测试点列表(每个类别 10 个),我发现在这些点上运行贝叶斯分类器继续为每个点提供完全相同的分类,无论我使用什么 sigma。这是正常的吗?由于它是一个球形高斯内核,并且我的所有维度都使用相同的内核,因此增加或减少我的 sigma_sq 只会对我的对数概率产生比例影响,而分类没有变化?或者我的密度估计器是否存在某种我无法弄清楚的问题。

【问题讨论】:

    标签: machine-learning classification gaussian bayesian kernel-density


    【解决方案1】:

    让我们分别处理每一件事

    1. 对每个维度使用相同的 sigma 会使内核呈放射状,这是真的;但是,您可以(并且应该!)为每个 使用不同的 sigma,因为每个分布通常需要不同的密度估计器,对于简单的启发式方法,例如阅读 Scott 的高斯内核宽度选择经验法则案例或 Silverman 的后续作品。
    2. 很难判断在您的特定情况下选择的 sigma 是否应该改变分类 - 通常它应该是正确的;但是每个数据集都有自己的属性。但是,您的数据只是 2D,这使得它非常适合可视化。绘制您的数据,然后绘制每个 KDE 并简单地直观地调查正在发生的事情

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 2020-06-02
      • 2020-06-21
      • 2012-11-01
      • 2013-12-02
      • 2012-06-29
      • 2012-02-11
      • 2017-09-14
      • 2013-07-19
      相关资源
      最近更新 更多