【发布时间】: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 中的对数概率。然后我选择最大值并将新点分配给该类。
由于我使用的是球形高斯核,因此我的理解是,我的 sigma_sq 对于每个密度估计器(每个类一个密度估计器)必须是通用的。它是否正确?如果每个维度对都有不同的 sigma_sq,这不会给我一些对角高斯核吗?
对于我的 30 个测试点列表(每个类别 10 个),我发现在这些点上运行贝叶斯分类器继续为每个点提供完全相同的分类,无论我使用什么 sigma。这是正常的吗?由于它是一个球形高斯内核,并且我的所有维度都使用相同的内核,因此增加或减少我的 sigma_sq 只会对我的对数概率产生比例影响,而分类没有变化?或者我的密度估计器是否存在某种我无法弄清楚的问题。
【问题讨论】:
标签: machine-learning classification gaussian bayesian kernel-density