def _buildRandomWalkScore(self,d): epsilon = 0.00001 #TO CHECK : Should P be computed based on the cosine similarity matrix ??? I don't think so! #P = matrix(toolBox.randomWalkTransitionProbability(self.UI)) #P = matrix(toolBox.AtoP(toolBox.cosineSimilarity(self.UI))) P = matrix(toolBox.transitionProbability(self.UI)) Phi = self.ItemPrior W = repeat(array([Phi]), Phi.shape[0], axis=0) #TO BE TESTED #W = 1.0/W W = exp(-500*W) P = matrix(array(P)*W) R = matrix(zeros((self.nbItems, self.nbItems)), dtype=float64) U = matrix(eye(self.nbItems, self.nbItems,dtype=float64)) #U = U / self.nbItems diff = 1000 #count = 20 print 'Convergence ...' while (diff > epsilon) :#and (count > 0): sys.stdout.write('.') oldRSum= sum(R) R = d*P*R + (1-d)*U diff = abs(oldRSum - sum(R)) / sum(R) #count-=1 print diff #for i in arange(R.shape[0]): # R[i,i] = 1 print R print sum(R,0) self.R = array(R)
def _buildRandomWalkScore(self, d): epsilon = 0.00001 #TO CHECK : Should P be computed based on the cosine similarity matrix ??? I don't think so! #P = matrix(toolBox.randomWalkTransitionProbability(self.UI)) #P = matrix(toolBox.AtoP(toolBox.cosineSimilarity(self.UI))) P = matrix(toolBox.transitionProbability(self.UI)) Phi = self.ItemPrior W = repeat(array([Phi]), Phi.shape[0], axis=0) #TO BE TESTED #W = 1.0/W W = exp(-500 * W) P = matrix(array(P) * W) R = matrix(zeros((self.nbItems, self.nbItems)), dtype=float64) U = matrix(eye(self.nbItems, self.nbItems, dtype=float64)) #U = U / self.nbItems diff = 1000 #count = 20 print 'Convergence ...' while (diff > epsilon): #and (count > 0): sys.stdout.write('.') oldRSum = sum(R) R = d * P * R + (1 - d) * U diff = abs(oldRSum - sum(R)) / sum(R) #count-=1 print diff #for i in arange(R.shape[0]): # R[i,i] = 1 print R print sum(R, 0) self.R = array(R)
def train(self): #Split this methods into two parts to be able to quickly output Weight matrix for different values of alpha and teta #Cosine computation #self.computeSim('cos') #Compute cost matrix self.Ctot = array(self.computeCostMatrix()) #Compute afinity matrix self.P = toolBox.transitionProbability(self.UI)
def train(self): '''Different ways of computing the transition probability matrix can be considered''' #TO FIX : Should P be computed from the similarity matrix or directly as transition probability from the graph ? if (self.sim == 'cos'): self.Sim = toolBox.cosineSimilarity(self.UI) self.P = toolBox.AtoP(self.Sim) if (self.sim == 'cp'): self.Sim = toolBox.cosineSimilarity(self.UI) self.P = toolBox.AtoP(self.Sim) if (self.sim == 'bn'): self.P = toolBox.transitionProbability(self.UI)
def train(self): '''Different ways of computing the transition probability matrix can be considered''' #TO FIX : Should P be computed from the similarity matrix or directly as transition probability from the graph ? if (self.sim == 'cos'): self.Sim = toolBox.cosineSimilarity(self.UI) self.P = toolBox.AtoP(self.Sim) if (self.sim == 'cp'): self.Sim = toolBox.cosineSimilarity(self.UI) self.P = toolBox.AtoP(self.Sim) if (self.sim == 'bn'): self.P = toolBox.transitionProbability(self.UI) self.P = transpose(self.P)
def train(self): print "Start training..." #debug_here() #self.Cost = repeat(reshape(self.ItemPrior, (self.ItemPrior.shape[0],1)), self.ItemPrior.shape[0], axis=0) self.Cost = repeat(reshape(self.ItemPrior/mean(self.ItemPrior), (1,self.ItemPrior.shape[0])), self.ItemPrior.shape[0], axis=0) print self.Cost.shape #debug_here() if (self.sim == 'cos'): self.Sim = toolBox.cosineSimilarity(self.UI) self.Pref = toolBox.AtoP(self.Sim) if (self.sim == 'bn'): self.Pref = toolBox.transitionProbability(self.UI) #self.P = toolBox.BRWWR_Comp(self.Pref, ones(self.Pref.shape), self.theta) self.P = toolBox.BRWWR_Comp(self.Pref, self.Cost, self.theta) #Transpose P to get a correct random walk with restart self.P = transpose(self.P)
def train(self): print "Start training..." #debug_here() #self.Cost = repeat(reshape(self.ItemPrior, (self.ItemPrior.shape[0],1)), self.ItemPrior.shape[0], axis=0) self.Cost = repeat(reshape(self.ItemPrior / mean(self.ItemPrior), (1, self.ItemPrior.shape[0])), self.ItemPrior.shape[0], axis=0) print self.Cost.shape #debug_here() if (self.sim == 'cos'): self.Sim = toolBox.cosineSimilarity(self.UI) self.Pref = toolBox.AtoP(self.Sim) if (self.sim == 'bn'): self.Pref = toolBox.transitionProbability(self.UI) #self.P = toolBox.BRWWR_Comp(self.Pref, ones(self.Pref.shape), self.theta) self.P = toolBox.BRWWR_Comp(self.Pref, self.Cost, self.theta) #Transpose P to get a correct random walk with restart self.P = transpose(self.P)