首页 文章

生成推荐引擎的测试集

提问于
浏览
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 |                                                                                   |
+---------------------------------------------------------------------------------------------------+

行是用户,列是项 .

现在,我想知道这是否是我的测试集的正确表示 . 我已经获得了一个非零值并使一切都为零 . 因此,我的算法应该将非零值排名为推荐项 .

这是正确的做事方式吗?

任何帮助将非常感激

1 回答

  • 1

    Updated:

    是的,您应该使用一些原始计数创建一个测试集,并查看您的系统是否将这些用户项识别为良好匹配 .

    你应该小心一些事情:

    • 仅为您拥有更多数据的项目或用户设置测试集值;

    • 隐藏训练数据中的那些测试集值;

    • 仅在您拥有数据的用户 - 项目对上训练您的模型,而不是在没有数据的情况下训练您的模型,而不是真正的评级;

    Note: 这篇文章,Collaborative Filtering for Implicit Feedback Datasets,应该帮助你解决这些问题和其他问题 .

相关问题