def expectation(self, data, model): """Compute probabilities store in self.model """ mus = model.mu sigma = model.sigma weight = model.weight probabilities = [] rho = np.zeros(len(data)) # rho is probabilities for r in range(len(data)): row = data[r] x_less = np.array(row) - np.array(mus) # the expectation <Zim> * P(x|Zim) rho[r] = multivariate_normal(sigma, x_less, .001) * weight #rho[r] = scipy.stats.multivariate_normal.pdf(data[r], mean=mus, cov=sigma) * weight #model.probabilities = hw3.univariate_normal(data, np.std(data), model.mu, model.weight) print 'RHO' print rho # log likelihood # llh = np.log(rho[i]/sum(rho)) sum_rho = sum(rho) new_rho = [] #return [float(rho[r])/sum_rho * weight for r in range(len(rho))] for r in range(len(rho)): new_rho.append(rho[r]/sum_rho) # * weight) return new_rho
def multivariate_normal(self, covar_matrix, x_less, alpha=1, mus=[]): """ :param d: number of rows in X :param covar_matrix: :param x_less: X - u , u is a vector of mu :return: """ return multivariate_normal(covar_matrix, x_less, alpha=1)