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 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