3

我正在研究基於隱式反饋的推薦引擎。我正在使用此鏈接:http://insightdatascience.com/blog/explicit_matrix_factorization.html#movielens爲推薦引擎生成測試集

這使用ALS(交替最小二乘)來計算用戶和項目向量。因爲,我的數據集不能按時間分區。我隨機從用戶那裏獲得'x'個評分並將它們放入測試集中。這是我的訓練用戶項目矩陣的一個可重現的例子。

 

col1 col2  col3 col4 col5 col6 col7  col8 col9 col10 col1 col12 col13 
+---------------------------------------------------------------------------------------------------+ 
| 1  0  0  3  10  0  0   3  0  0  1  0  0 |                     | 
| 0  0  0  5  0  0  1   8  0  0  1  0  0 |                     | 
| 0  0  0  6  7  1  0   2  0  0  1  0  0 |                     | 
+---------------------------------------------------------------------------------------------------+ 
 
I then create a test set using this piece of code 
    test_ratings = np.random.choice(counts[user,:].nonzero()[0],size=1,replace=True) 
     train[user,test_ratings] = 0 
     test[user,test_ratings] = counts[user,test_ratings] 
     assert(np.all((train * test) == 0)) 

這給了我:

 
col1 col2  col3 col4 col5 col6 col7  col8 col9 col10 col1 col12 col13 
+---------------------------------------------------------------------------------------------------+ 
| 0  0  0  0  0  0  0   3  0  0  0  0  0 |                     | 
| 0  0  0  0  0  0  1   0  0  0  0  0  0 |                     | 
| 0  0  0  6  0  0  0   0  0  0  0  0  0 |                     | 
+---------------------------------------------------------------------------------------------------+ 

這裏行是用戶和列的項目。

現在,我想知道這是否是我的測試集的正確表示。我已經拿起一個非零值,並把所有東西都歸零。所以,我的算法應該將非零值作爲推薦項目進行排序。

這是關於事情的正確方法嗎?

任何幫助將非常感激

+0

有人可以幫我嗎?我是否正確地做事? –

回答

1

更新時間:

是的,你應該創建一個測試與一些你原來計數的設置,看看你的系統識別那些用戶項目作爲一個很好的匹配。

你應該小心一些事情:

  • 只放對,你有 多個數據項或用戶的測試集值;
  • 隱藏訓練數據中的測試集值;
  • 僅在您有數據的用戶項目對上訓練您的模型,而不是在0上 - 原因是因爲假設您的0代表您沒有數據的對,而不是真正的評分;

注:這papper,Collaborative Filtering for Implicit Feedback Datasets,應該可以幫助您與這些和其他問題。

+1

感謝您的回覆!你正在得到巨大的幫助。但是,這是一個帶有隱式反饋的推薦引擎。所以,這些值是計數而不是評級。 MSE會是一個糟糕的指標,對吧? –

+0

是的,你是對的。你應該預測你的系統是否推薦該項目。我會更新答案。 –

+0

謝謝。你的第三點要求在存在數據的用戶項目對上訓練。大多數數據集非常稀疏。這是否影響預測? –