为推荐引擎生成测试集

Generating test set for recommendation engine

我正在研究基于隐式反馈的推荐引擎。我正在使用这个 link : 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 上 - 这样做的原因是因为假设你的 0 代表你没有数据的对,而不是真实收视率;

注意:这篇文章 Collaborative Filtering for Implicit Feedback Datasets 应该可以帮助您解决这些问题和其他问题。