2

В настоящее время я работаю с библиотекой Python под названием LightFM. Но у меня возникли проблемы с передачей взаимодействий методу fit(). версияСоздание разреженной матрицы с помощью LightFM и прогнозов печати

Python: 3 Библиотека: http://lyst.github.io/lightfm/docs/lightfm.html

В документации говорится, что я должен сделать разреженную матрицу следующего вида: взаимодействий (np.float32 coo_matrix формы [n_users, n_items]) - матрица

Но я не могу заставить его работать всегда рекомендует то же самое ...

Обновлено: При выполнении ему top_items переменной не сказать следующее не мат который пользователь перебирает, а не какие-либо другие предметы (говядина или салат), поэтому мне кажется, что я делаю что-то неправильно. Он выдает: [ 'Торт' 'Сыр'] каждый раз

Вот мой код:

import numpy as np 
from lightfm.datasets import fetch_movielens 
from lightfm import LightFM 
from scipy.sparse import coo_matrix 
import scipy.sparse as sparse 
import scipy 

// Users, items 
data = [ 
    [1, 0], 
    [2, 1], 
    [3, 2], 
    [4, 3] 
] 

items = np.array(["Cake", "Cheese", "Beef", "Salad"]) 

data = coo_matrix(data) 

#create model 
model = LightFM(loss='warp') 
#train model 
model.fit(data, epochs=30, num_threads=2) 

// Print training data 
print(data) 

def sample_recommendation(model, data, user_ids): 

    #number of users and movies in training data 
    n_users, n_items = data.shape 

    #generate recommendations for each user we input 
    for user_id in user_ids: 

     #movies our model predicts they will like 
     scores = model.predict(user_id, np.arange(n_items)) 

     #rank them in order of most liked to least 
     top_items = items[np.argsort(-scores)] 

     print(top_items) 

sample_recommendation(model, data, [1,2]) 
+0

'не может заставить его работать' - это запрещенная фраза здесь! Вы должны сказать, что не так. Ошибки, неправильные результаты и т. Д. Будьте конкретны относительно того, где возникает проблема. – hpaulj

+0

Эй, @hpaulj, я обновил свой ответ и ответил, что я думаю, что здесь не так. Спасибо :) – aat2703

ответ

1
data = coo_matrix(data) 

, вероятно, не то, что вы хотите; это точная копия data. Не очень редкий.

Что представляет собой data?

Я собираюсь предположить, что вы действительно хотите получить матрицу с большей частью 0s и 1s в координатах, представленных data.

In [20]: data = [ 
    ...:  [1, 0], 
    ...:  [2, 1], 
    ...:  [3, 2], 
    ...:  [4, 3] 
    ...: ] 

, вероятно, не то, что вы хотите:

In [21]: ds = sparse.coo_matrix(data) 
In [22]: ds.A 
Out[22]: 
array([[1, 0], 
     [2, 1], 
     [3, 2], 
     [4, 3]]) 

попробовать еще раз:

In [23]: data=np.array(data) 
In [24]: ds=sparse.coo_matrix((np.ones(4,int),(data[:,0],data[:,1]))) 
In [25]: ds 
Out[25]: 
<5x4 sparse matrix of type '<class 'numpy.int32'>' 
    with 4 stored elements in COOrdinate format> 
In [26]: ds.A 
Out[26]: 
array([[0, 0, 0, 0], 
     [1, 0, 0, 0], 
     [0, 1, 0, 0], 
     [0, 0, 1, 0], 
     [0, 0, 0, 1]]) 

Это более характерно то, что происходит в изучение функций.

+0

Это было именно то, что мне нужно! Мне не хватало разреженных данных между данными для создания реальной матрицы! Спасибо! – aat2703