gpt4 book ai didi

java - Mahout 如何存储用户首选项以实现快速相似性计算?它是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:53 28 4
gpt4 key购买 nike

我正在为一个学校项目编写一个小型推荐系统,我应该在其中根据用户行为寻找项目之间的相似性。我已经尝试过 Mahout,真正令人印象深刻的是即使在非常大的数据集上,它也能够极快地计算两个用户或项目之间的相似性。我搜索了 Mahout in Action 一书,但没有找到确切的答案。作者展示了所用类的名称,而不是机制。因此,我尝试遵循相同的数据表示,但是在计算两个项目之间的相似度时,它非常耗时。我有两个 int 每个用户的首选项数组,还有另外两个得分数组。

我使用散列来确定 userPreference 数组之间的交集并快速计算欧几里德相似度,如下面的代码所示,但没有任何成功。我需要帮助:(

Item item1 = (dataModel).getItem(item1_ID);
Item item2 = (dataModel).getItem(item2_ID);
int[] i1_users = item1.getUsersId();
int[] i2_users = item2.getUsersId();
float[] i1_scores = item1.getScore();
float[] i2_scores = item2.getScore();
IntFloatOpenHashMap tempHash = new IntFloatOpenHashMap();
for (int i= 0; i < i1_u.length; ++i)
tempHash.put(i1_users[i], i1_scores[i]);

for (int i = 0; i < i2_users.length; i++)
{
if (tempHash.containsKey(i2_users[i])) {
diff = tempHash.get(i2_users[i]) - i2_scores[i];
dist += diff * diff;
}
}
// return Math.sqrt(dist);

最佳答案

无论您尝试根据偏好值计算什么(项目相似度或用户相似度),您都可以提高代码速度。您的代码的时间复杂度为 O(N^2),但 Mahout 的时间复杂度为 O(N)。

你可以检查实现:

基本上您可以并行迭代两个用户 ID 数组,并且您还可以避免创建 tempHash。您在空间和时间方面都获得了 yield 。希望对您有所帮助。

关于java - Mahout 如何存储用户首选项以实现快速相似性计算?它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677251/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com