Пример #1
0
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()
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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