0

Graphlab では、レコメンデーションを提供できるレコメンダー関数を使用するために、フィットネス データの小さなセットを使用しています。データセットにはユーザー ID の列がありますが、アイテム ID の列はありません。代わりに、さまざまなアイテムが列に配置され、それぞれの評価が各ユーザー ID に対応する行に表示されます。Graphlab レコメンダー メソッドを使用するには、ユーザー ID とアイテム ID が必要です。これが私がしたことです:

v = graphlab.SFrame.read_csv('Data.csv')   
userId = v["user_id"]
itemId = v["x","y","z","x1","y1","z1"] //x,y,z,x1,y1,z1 are activities that are actually the columns in Data and contains corresponding ratings given by user

sf= graphlab.SFrame({'UserId':userId,'ItemId':itemId})
print sf.head(5)

基本的に、データから user_id 列を抽出し、同じデータから抽出された x、y、z などの列を使用して ItemId の列を作成し、これら 2 つの列だけで別の sframe を作成しようとしました。このコードは、予想どおり 2 列の表形式の sframe になりますが、SFrame で引数を渡す順序と同じ順序ではありません。したがって、出力は最初の列として ItemId を示し、次に UserId を示します。これら2つをsframeで渡す順序を変更しようとしましたが、それでも同じ出力が得られます。誰かがその理由を知っていますか? これにより、推奨メソッドを使用すると、次のエラーが発生するため、さらに問題が発生します。列名 user_id が存在しません。

4

1 に答える 1

0

列の順序付けの理由は、Python 辞書を SFrame コンストラクターに渡すためです。Python の辞書は、指定された順序でキーを保持しません。彼らには独自の秩序があります。「UserId」を最初にしたい場合は、 を呼び出すことができますsf.swap_columns('UserId','ItemId')

ただし、列の順序は推奨メソッドには影響しません。正確な名前の列がなく、かつ user_id 列の名前を指定してColumn name 'user_id' does not existいない場合、エラーが表示されます。user_idあなたの場合、あなたはしたいでしょうgraphlab.recommender.create(sf, user_id='UserId', item_id='ItemId')

また、stackレコメンダー メソッドが期待する形式でデータを取得するのに役立つメソッドを確認することもできます。現在の SFramesfには、アイテム ID がキーで評価が値である辞書の列があると思います。私はこれがこの場合にうまくいくと信じています:

sf.stack('ItemId', new_column_name=['ItemId','Rating'])
于 2016-03-29T16:19:55.797 に答える