def main(): D = 4 L = 2 # randomly generate parameter values for testing np.random.seed(28031987) W1 = np.random.randn(D,2*D) b1 = np.random.randn(D) W2 = np.random.randn(2*D,D) b2 = np.random.randn(2*D) Wlabel = np.random.randn(L,D) # flattened arrays W1flat = W1.flatten() W2flat = W2.flatten() Wlabelflat = Wlabel.flatten() allflat = np.append(W1flat,b1) allflat = np.append(allflat,W2flat) allflat = np.append(allflat,b2) allflat = np.append(allflat,Wlabelflat) Np = len(allflat) # hyperparameters eps = 0.00000001 lambda_reg = 0.0 alpha = 0.2 # get the data neg_list,pos_list = format_data() neg_list = neg_list[:1] pos_list = pos_list[:1] vocab = np.random.randn(268810,D) # do k_fold mean,SEM = k_fold(neg_list,pos_list,10,L,alpha,lambda_reg,vocab,normalized=False) exit(0) # calculate finite difference approximation to gradient numgrad = np.zeros(Np) for i in range(Np): print 'P ' + str(i) allflat[i] += eps fxpe = full_j(allflat,D,L,lambda_reg,alpha,neg_list,pos_list, vocab,normalized=False) allflat[i] -= 2.0*eps fxme = full_j(allflat,D,L,lambda_reg,alpha,neg_list,pos_list, vocab,normalized=False) allflat[i] += eps numgrad[i] = (fxpe - fxme)/(2.0*eps) # now use backprop bpgrad = compute_grad(allflat,D,L,lambda_reg,alpha,neg_list,pos_list, vocab,normalized=False) print numgrad print bpgrad print numgrad-bpgrad
def top_matches(prefs, person, n=5): """ Rank movie critics matches for `person` from `perfs`. :param prefs: dict - critics as defined in data.py :param person: str - movie critic's name to compare others to :param n: int - number of movie critics to rank :return: list[tuple(float, str)] - ranking of (score, critic's name) """ svd = dt.train_svd(prefs) result = svd.similar(person, n) return dt.format_data(result)
def get_recommendations(prefs, person): """ Recommend movies to `person` matching others' ratings with his. :param prefs: dict - critics as defined in data.py :param person: str - movie critic's name to advise :return: list[tuple(float, str)] - ranking of (score, film's title) Note that in this function, only movie which user has not rated will be recommended """ n = 3 svd = dt.train_svd(prefs) result = svd.recommend(person, n, only_unknowns=True, is_row=True) return dt.format_data(result)