示例#1
0
 def compute_expectations(self):
     self.Ew, self.Ewinv = _gap.compute_gig_expectations(
         self.a, self.rhow, self.tauw)
     self.Ewinvinv = 1. / self.Ewinv
     self.Eh, self.Ehinv = _gap.compute_gig_expectations(
         self.b, self.rhoh, self.tauh)
     self.Ehinvinv = 1. / self.Ehinv
     self.Et, self.Etinv = _gap.compute_gig_expectations(
         self.alpha / self.K, self.rhot, self.taut)
     self.Etinvinv = 1. / self.Etinv
示例#2
0
文件: gap_nmf.py 项目: dawenl/bp_nmf
 def compute_expectations(self):
     self.Ew, self.Ewinv = _gap.compute_gig_expectations(self.a, self.rhow,
                                                         self.tauw)
     self.Ewinvinv = 1./self.Ewinv
     self.Eh, self.Ehinv = _gap.compute_gig_expectations(self.b, self.rhoh,
                                                         self.tauh)
     self.Ehinvinv = 1./self.Ehinv
     self.Et, self.Etinv = _gap.compute_gig_expectations(self.alpha/self.K,
                                                         self.rhot,
                                                         self.taut)
     self.Etinvinv = 1./self.Etinv
示例#3
0
 def update_theta(self):
     goodk = self.goodk()
     xxtwidinvsq = self.X * self._xtwid(goodk)**(-2)
     xbarinv = self._xbar(goodk)**(-1)
     self.rhot[goodk] = self.alpha + np.sum(
         np.dot(self.Ew[:, goodk].T, xbarinv) * self.Eh[goodk, :], axis=1)
     self.taut[goodk] = self.Etinvinv[goodk]**2 * \
             np.sum(np.dot(self.Ewinvinv[:, goodk].T, xxtwidinvsq) *
                    self.Ehinvinv[goodk, :], axis=1)
     self.taut[self.taut < 1e-100] = 0
     self.Et[goodk], self.Etinv[goodk] = _gap.compute_gig_expectations(
         self.alpha / self.K, self.rhot[goodk], self.taut[goodk])
     self.Etinvinv[goodk] = 1. / self.Etinv[goodk]
示例#4
0
文件: gap_nmf.py 项目: dawenl/bp_nmf
 def update_theta(self):
     goodk = self.goodk()
     xxtwidinvsq = self.X * self._xtwid(goodk)**(-2)
     xbarinv = self._xbar(goodk) ** (-1)
     self.rhot[goodk] = self.alpha + np.sum(np.dot(self.Ew[:, goodk].T,
                                                   xbarinv) *
                                            self.Eh[goodk, :], axis=1)
     self.taut[goodk] = self.Etinvinv[goodk]**2 * \
             np.sum(np.dot(self.Ewinvinv[:, goodk].T, xxtwidinvsq) *
                    self.Ehinvinv[goodk, :], axis=1)
     self.taut[self.taut < 1e-100] = 0
     self.Et[goodk], self.Etinv[goodk] = _gap.compute_gig_expectations(
         self.alpha/self.K, self.rhot[goodk], self.taut[goodk])
     self.Etinvinv[goodk] = 1./self.Etinv[goodk]
示例#5
0
文件: gap_nmf.py 项目: dawenl/bp_nmf
 def update_w(self):
     goodk = self.goodk()
     xxtwidinvsq = self.X * self._xtwid(goodk)**(-2)
     xbarinv = self._xbar(goodk) ** (-1)
     dEt = self.Et[goodk]
     dEtinvinv = self.Etinvinv[goodk]
     self.rhow[:, goodk] = self.a + np.dot(xbarinv, dEt *
                                           self.Eh[goodk, :].T)
     self.tauw[:, goodk] = self.Ewinvinv[:, goodk]**2 * \
             np.dot(xxtwidinvsq, dEtinvinv * self.Ehinvinv[goodk, :].T)
     self.tauw[self.tauw < 1e-100] = 0
     self.Ew[:, goodk], self.Ewinv[:, goodk] = _gap.compute_gig_expectations(
         self.a, self.rhow[:, goodk], self.tauw[:, goodk])
     self.Ewinvinv[:, goodk] = 1./self.Ewinv[:, goodk]
示例#6
0
 def update_w(self):
     goodk = self.goodk()
     xxtwidinvsq = self.X * self._xtwid(goodk)**(-2)
     xbarinv = self._xbar(goodk)**(-1)
     dEt = self.Et[goodk]
     dEtinvinv = self.Etinvinv[goodk]
     self.rhow[:,
               goodk] = self.a + np.dot(xbarinv, dEt * self.Eh[goodk, :].T)
     self.tauw[:, goodk] = self.Ewinvinv[:, goodk]**2 * \
             np.dot(xxtwidinvsq, dEtinvinv * self.Ehinvinv[goodk, :].T)
     self.tauw[self.tauw < 1e-100] = 0
     self.Ew[:,
             goodk], self.Ewinv[:, goodk] = _gap.compute_gig_expectations(
                 self.a, self.rhow[:, goodk], self.tauw[:, goodk])
     self.Ewinvinv[:, goodk] = 1. / self.Ewinv[:, goodk]
示例#7
0
文件: gap_nmf.py 项目: dawenl/bp_nmf
 def update_h(self):
     goodk = self.goodk()
     xxtwidinvsq = self.X * self._xtwid(goodk)**(-2)
     xbarinv = self._xbar(goodk) ** (-1)
     dEt = self.Et[goodk]
     dEtinvinv = self.Etinvinv[goodk]
     self.rhoh[goodk, :] = self.b + np.dot(dEt[:, np.newaxis] *
                                           self.Ew[:, goodk].T, xbarinv)
     self.tauh[goodk, :] = self.Ehinvinv[goodk, :]**2 * \
             np.dot(dEtinvinv[:, np.newaxis] * self.Ewinvinv[:, goodk].T,
                    xxtwidinvsq)
     self.tauh[self.tauh < 1e-100] = 0
     self.Eh[goodk, :], self.Ehinv[goodk, :] = _gap.compute_gig_expectations(
         self.b, self.rhoh[goodk, :], self.tauh[goodk, :])
     self.Ehinvinv[goodk, :] = 1./self.Ehinv[goodk, :]
示例#8
0
 def update_h(self):
     goodk = self.goodk()
     xxtwidinvsq = self.X * self._xtwid(goodk)**(-2)
     xbarinv = self._xbar(goodk)**(-1)
     dEt = self.Et[goodk]
     dEtinvinv = self.Etinvinv[goodk]
     self.rhoh[goodk, :] = self.b + np.dot(
         dEt[:, np.newaxis] * self.Ew[:, goodk].T, xbarinv)
     self.tauh[goodk, :] = self.Ehinvinv[goodk, :]**2 * \
             np.dot(dEtinvinv[:, np.newaxis] * self.Ewinvinv[:, goodk].T,
                    xxtwidinvsq)
     self.tauh[self.tauh < 1e-100] = 0
     self.Eh[goodk, :], self.Ehinv[
         goodk, :] = _gap.compute_gig_expectations(self.b,
                                                   self.rhoh[goodk, :],
                                                   self.tauh[goodk, :])
     self.Ehinvinv[goodk, :] = 1. / self.Ehinv[goodk, :]