2016-04-06 13 views
1

私は、暗黙的なフィードバックに基づく推奨によって推奨システムを実装しようとしています。したがって、私はタプル(ユーザ、アイテム、カウント)を使用してユーザアイテムマトリックスを作成しています。推奨エンジンメトリック

私は、Insightのデータ科学のブログにこれは本当に素敵な例を使用して、私の推薦システムを実装しました:http://insightdatascience.com/blog/explicit_matrix_factorization.html

しかし、映画のレンズセットに比べて、私のデータセットが非常に希薄です。この例では、データセットの6.3%が満たされていますが、その数値は私の0.30%になります。したがって、私のデータセットには多くの未知の値があります。私は約2900ユーザーと5000アイテムを持っています。

私はモデルを訓練しており、トレーニングMSEは降りることを拒否しています。私はparamtersを最適化しようとしましたが、役に立たない。私は以下の質問をしました:

(1)MSEは信頼できる基準ではありませんか?私はこの議論を行った:https://www.quora.com/How-do-you-measure-and-evaluate-the-quality-of-recommendation-engines

しかし、A/Bテストは私にとっては選択肢ではない。機械学習モデルでの私の経験は、トレーニングMSEがある時点で動かなくなった場合、かなり悪いことだと教えてくれました。(理由はたくさんあります)

私は正しく評価していませんか?

(2)コールドスタートの問題?私はユーザベクトルとアイテムベクトルをこのように初期化しています:

self.user_vectors = np.random.normal(size=(self.num_users,self.num_factors)) 

self.item_vectors = np.random.normal(size=(self.num_items,self.num_factors)) 

ここで変更できるものはありますか?

私は次に何をするのか混乱しています。行列の希薄さは非常に高く、私のアルゴリズムが多数のゼロの値を予測していることはわかっています。私は自分のMSEを一定に保っていると確信しています。

どのような考えや方向性が本当にありがとう!

おかげ

+0

**カウント数はあなたのデータセットに何を表しますか?ユーザーが映画を視聴した回数 –

+0

カウントとは、ユーザーが映画を視聴した回数を指します。 –

答えて

1

は、(1) MovieLensデータセットは、学術的なデータセットであり、彼らは現実の推奨システムデータセットから、それは非常に違うデータセットを生成する方法の明確な選択肢があります。上のデータセットのREADME著者は指定:

Each user has rated at least 20 movies. 

だから、彼らの低RMSEは、この特性を持つユーザーにのみ適用されます。

私は2つのメトリックを示唆している:あなたがテストしている(利用者、映画)のペアを予測するかどうかを確認し、電車とテストセットにデータを分割し、テストセットを使用して予測を比較

  1. をセット;
  2. ユーザーと映画平均の平均などのベースラインと比較してください。

(2)私はあなたがコールドスタートの問題について少し混乱していると思う: それはユーザーや映画についてのデータを持っていない推薦システム(RS)に影響を与える問題です。たとえば、誰も映画を見たことがない場合、誰がそれを楽しむかについて信頼できる予測をすることはできません。ユーザーと同じ方法で、映画を見ていない人はあなたが好きな映画を予測できません。

この問題を解決する1つの方法は、映画の特性(性別、年齢、ユーザーとジャンルの国、映画の日付と言語)に基づいて、映画とユーザーとの間の類似度を作成することです。これにより、最も類似したユーザーとムービーに基づいておすすめを行うことができます。これらのタイプのRSはハイブリッドであると言われています。

推奨論文:

+0

助けてくれてありがとう!私は訓練とテストの分割についてどうすればいいのだろうと思っていました。一般的に、私は80/20のスプリットを行い、私のモデル(ランダムフォレスト、ロジスティック回帰など)はトレーニングセットの特徴を学習し、テストセットを予測します。 –

+0

しかし、私のアルゴリズムはユーザとアイテムベクトルを最適化しているので、ここでは少し違っています。これらは同じサイズの行列でしか使用できません –

+0

「x」個の非ゼロカウントを選び、同じサイズのテストセットを作成するようなことをしてください。ここで何が行われているのと同様の何か:https://gist.github.com/EthanRosenthal/68362b45ad6ca586199d –