2

現在、LightFMというPythonライブラリを使って作業しています。しかし、私は、相互作用を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は何を表していますか?

dataで表される座標には、ほとんどが0と1の行列が本当に必要であると推測します。

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

関連する問題