def tps_calc_m1(k): t0 = time.clock() users, items = ld.check_data("ml-100k/u.data") mat_u_i = ld.matrice_user_item("ml-100k/u.data", users, items) mat_cm = ld.remplissage_moyenne_mixte(mat_u_i) ta = 0 # time.clock() - t0 tps = [] ks = [] for i in k: t1 = time.clock() m = mmat.simplifier(mat_cm, i) t2 = time.clock() tps += [t2 - t1 + ta] ks += [i] return (ks, tps)
def f1(): """ Affichage des matrices remplies """ # Compte le nombre d'users et d'items users, items = ld.check_data("ml-100k/u.data") # Construction matrice user/items de u.data mat_u_i = ld.matrice_user_item("ml-100k/u.data", users, items) # Différentes approximations par moyennes mat_cu = ld.remplissage_moyenne_user(mat_u_i) mat_cf = ld.remplissage_moyenne_film(mat_u_i) mat_cm = ld.remplissage_moyenne_mixte(mat_u_i) m = mmat.simplifier(mat_cm, 10) # Dessin des graphes plt.imshow(np.dot(m[0], m[1]), interpolation="none", vmin=0, vmax=5, cmap="Reds") plt.title("Suggestion avec k=10 pour le remplissage mixte") plt.axis([0, 1681, 942, 0]) plt.colorbar() plt.xlabel("Film") plt.ylabel("Utilisateur") plt.show()
def f3(ran, mode=0): """ Permet de calculer les MAE (SVD) pour un range de k et d'afficher le graphe """ file_approx = "ml-100k/u1.base" file_test = "ml-100k/u1.test" dim1 = ld.check_data(file_approx) # Dim de base dim2 = ld.check_data(file_test) # Dim de test # Matrice des predictions mui = ld.matrice_user_item(file_approx, dim1[0], dim1[1]) # Matrice user item de la base if mode == 0: mui_r = ld.remplissage_moyenne_user(mui) # remplissage elif mode == 1: mui_r = ld.remplissage_moyenne_film(mui) # remplissage else: mui_r = ld.remplissage_moyenne_mixte(mui) # remplissage Xk, Yk = mmat.simplifier(mui_r, max(ran)) # Matrices des predictions # Matrice du test mui_t = ld.matrice_user_item(file_test, dim1[0], dim1[1]) # Calcul des mae maes = [] print np.array(list(reversed(ran))) for k in reversed(ran): Xk, Yk = mmat.reduire(Xk, Yk, k) # Matrices des predictions maes += [fn.mae(mui_t, Xk, Yk)] print maes print maes return (np.array(list(reversed(ran))), maes)
def mae( file1ap, file2te, k, remplissage = "users") : #Dimension des matrices d1 = ld.check_data(file1ap) #Matrice user-item du test mui_t = ld.matrice_user_item( file2te, d1[0], d1[1] ) #Matrice des suggestions mui_a = ld.matrice_user_item( file1ap, d1[0], d1[1] ) #Mat u-i if remplissage == "users" : muif_a = ld.remplissage_moyenne_user(mui_a) #Remplissage else : muif_a = ld.remplissage_moyenne_film(mui_a) maes = [] for i in xrange(1,k) : dec = mmat.simplifier(muif_a,i) #Decomposition k msug = np.dot( dec[0], np.dot( dec[1], dec[2] )) #Matrice sugs c,s = 0.0,0.0 for i in xrange(d1[1]) : for u in xrange(d1[0]) : if mui_t[u,i] <> 0 : c += 1 s += abs( mui_t[u,i] - msug[u,i] ) maes += [s/c] return maes
def maes( file1ap, file2te, k, remplissage = "users") : #Dimension des matrices d1 = ld.check_data(file1ap) #Matrice user-item du test mui_t = ld.matrice_user_item( file2te, d1[0], d1[1] ) #Matrice des suggestions mui_a = ld.matrice_user_item( file1ap, d1[0], d1[1] ) if remplissage == "users" : muif_a = ld.remplissage_moyenne_user(mui_a) else : muif_a = ld.remplissage_moyenne_film(mui_a) mae = [] v1 = np.mat(np.ones(d1[0])) v2 = np.mat(np.ones(d1[1])) for i in xrange(1,k) : dec_a = mmat.simplifier(muif_a, i) #Calcul décomposition à i m_sug = np.dot(dec_a[0], np.dot(dec_a[1], dec_a[2]) ) #Matrice suggestions #On calcule la mae m = abs(m_sug - mui_t) mae += [np.dot(v1, np.dot(m, v2.T))[0,0]/(d1[0]*d1[1])] return mae
def f2(k): """ Permet de sauvegarder sous forme de pickle les matrices de la decomposition au degré k par SVD """ nfile = "decomp_udata_k" + str(k) # Approximation bas rang avec k = 30 # Compte le nombre d'users et d'items users, items = ld.check_data("ml-100k/u.data") # Construction matrice user/items mat_u_i = ld.matrice_user_item("ml-100k/u.data", users, items) mat_r = ld.remplissage_moyenne_mixte(mat_u_i) X, Y = mmat.simplifier(mat_u_i, k) mmat.save_decomposition(X, Y, nfile) return nfile