为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2021-10-19 09:58:37
我正在研究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()该布尔值返回 0 或 1,具体取决于 Y == k 的真实性,因此 Xk 始终是 X 列表的第一个或第二个值。你没有找到那个的效用。在第 10 行中,len(Xk) 始终为 1,为什么它使用该参数而不是单个 1?下一行的均值和协方差每次只计算一个值。我觉得我没有理解一些非常基本的东西。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您应该考虑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。


查看完整回答
反对 回复 2021-10-19
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号