首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于SVD的商品推荐系统

基于SVD的商品推荐系统
EN

Data Science用户
提问于 2015-02-07 14:21:42
回答 1查看 916关注 0票数 5

我有一个项目-项目相似性矩阵。例如(矩阵是对称的,而且要大得多):

代码语言:javascript
复制
1.00 0.88 0.96 0.99 
0.88 1.00 0.99 0.96 
0.96 0.99 1.00 0.86 
0.99 0.96 0.86 1.00 

我需要实现推荐,对于一组项目,推荐一组新的项目。

我在考虑用SVD将项目简化为n维空间,比如说50维空间,所以每个项目都用一个向量50个数表示,而两个项目之间的相似性是用两个50维向量之间的余弦相似度来计算的。

对于一个基本的项目集(可能会变得相当大),我希望我可以计算它们的向量的平均值,并使用它进行搜索。

这是个好主意吗这个程序叫什么?在马乌特能做到吗?

编辑:

到目前为止,这是我的代码:

代码语言:javascript
复制
ItemSimilarity similarity = new LogLikelihoodSimilarity(model);
Matrix m = new DenseMatrix(NUM_ITEMS, NUM_ITEMS);
// copy similarities to a matrix
for (int i = 0; i < NUM_ITEMS; i++) {
        double[] similar = similarity.itemSimilarities(i, range(NUM_ITEMS));
        for (int j = 0; j < NUM_ITEMS; j++) {
            m.setQuick(i, j, similar[j]);
    }
}
Matrix v = new SingularValueDecomposition(m).getV();
Matrix reduced = v.viewPart(0, NUM_ITEMS, 0, 50);

问题是,对于NUM_ITEMS > 30,SVD要花费很长时间。我不知道我正在使用的数据或SVD实现是否有问题。矩阵m是对称的,这会是个问题吗?我尝试谷歌“降级矩阵mahout”,但没有结果。为了让SVD更快地工作,我应该如何预处理它?未来我需要NUM_ITEMS在20.000到40.000之间.这是SVD的合理尺寸吗?

编辑2:

问题是矩阵包含了一些NaN值,这就是为什么SVD要花费无限的时间。在用0.0代替这些之后,它可以很好地工作在1000 x 1000矩阵上。我的建议很有魅力。我仍然需要计算20倍多的行和列的SVD。如果有人知道什么是最简单的方法来计算20.000 x 20.000稠密矩阵的(近似) SVD,可能是通过一些云并行服务(?),请告诉我。

PS。谢谢你帮忙!

EN

回答 1

Data Science用户

发布于 2015-02-08 03:29:06

我需要实现推荐,对于一组项目,推荐一组新的项目。这是个好主意吗

你查过关联规则挖掘了吗?如果你是开放的其他程序,这是第一次出现在我的脑海中的推荐人基于一组项目。对于那些不熟悉的人来说,这是一种简单的方法,让零售商店确定"75%的顾客购买了A,B也买了C“。在这些标志中,[医]阿尔戈是直截了当的,易于实现,并可能得到您所需的东西。

票数 3
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/5079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档