为什么这个布尔值在这个贝叶斯分类器中?

我正在研究GANs(我是python的初学者),我在之前的练习中发现这部分代码我不明白。具体来说,我不明白为什么使用第 9 行的布尔值(Xk = X[Y == k]),原因我写在下面


class BayesClassifier:

  def fit(self, X, Y):

    # assume classes are numbered 0...K-1

    self.K = len(set(Y))


    self.gaussians = []

    self.p_y = np.zeros(self.K)

    for k in range(self.K):

      Xk = X[Y == k]

      self.p_y[k] = len(Xk)

      mean = Xk.mean(axis=0)

      cov = np.cov(Xk.T)

      g = {'m': mean, 'c': cov}

      self.gaussians.append(g)

    # normalize p(y)

    self.p_y /= self.p_y.sum()

  1. 该布尔值返回 0 或 1,具体取决于 Y == k 的真实性,因此 Xk 始终是 X 列表的第一个或第二个值。你没有找到那个的效用。

  2. 在第 10 行中,len(Xk) 始终为 1,为什么它使用该参数而不是单个 1?

  3. 下一行的均值和协方差每次只计算一个值。

我觉得我没有理解一些非常基本的东西。


海绵宝宝撒
浏览 137回答 2
2回答

手掌心

您应该考虑X, Y, kNumPy 数组,而不是标量,并且某些运算符为它们重载。特别是==基于布尔的索引。==将是逐元素比较,而不是整个数组比较。看看它怎么运作:In [9]: Y = np.array([0,1,2])                                                                                        In [10]: k = np.array([0,1,3])                                                                                       In [11]: Y==k                                                                                                        Out[11]: array([ True,  True, False])所以,结果==是一个布尔数组。In [12]: X=np.array([0,2,4])                                                                                         In [13]: X[Y==k]                                                                                                     Out[13]: array([0, 2])结果是一个数组,其中的元素从X条件为True因此len(Xk)将是X和之间匹配元素的数量k。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python