标签: matrix-factorization

Apache Spark ALS协同过滤结果.它们没有意义

我想尝试Spark使用MLlib进行协同过滤,如本教程中所述:https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html 该算法基于"协作过滤"一文对于隐式反馈数据集",进行矩阵分解.

使用1000万个Movielens数据集,一切都正常运行.数据集分为80%培训10%测试和10%验证.

  • RMSE基线:1.060505464225402
  • RMSE(train)= 0.7697248827452756
  • 对于训练的模型,RMSE(验证)= 0.8057135933012889,等级= 24,λ= 0.1,迭代次数= 10.
  • 最佳模型将基线提高了23.94%.

虽然具有不同的训练参数,但这些值与教程类似.

我尝试了几次运行算法,总是得到对我没有任何意义的建议.即使只评价儿童电影,我也会得到以下结果:

对于评级:

  • 个人评价:玩具总动员(1995)评级:4.0
  • 个人评价:Jungle Book,The(1994)评级:5.0
  • 个人评价:Lion King,The(1994)评级:5.0
  • 个人评价:Mary Poppins(1964)评级:4.0
  • 个人评价:爱丽丝梦游仙境(1951)评级:5.0

结果:

推荐给你的电影:

  1. Oharu的生活,(Saikaku ichidai onna)(1952)
  2. 更多(1998)
  3. 谁在那边唱歌?(又名谁在那里唱歌)(Ko to tamo peva)(1980)
  4. 星期日和西布莱(Dimanches de Ville d'Avray,Les)(1962)
  5. 蓝光,(Das Blaue Licht)(1932)
  6. Harvey Milk的时代,(1984)
  7. 请投票给我(2007)
  8. 种植树木的人,(Homme qui plantait des arbres,L')(1987)
  9. Shawshank Redemption,The(1994)
  10. 只有昨天(Omohide poro poro)(1991)

除了昨天以外似乎没有任何意义.

如果有人知道如何解释这些结果或获得更好的结果,我将非常感谢您分享您的知识.

最好的祝福

编辑:

如我所建议的那样,我训练了另

  • 基线错误:1.0587417035872992
  • RMSE(火车)= 0.7679883378412548
  • 对于以rank = 100,lambda = 0.1和numIter = 10训练的模型,RMSE(验证)= 0.8070339258049574.

不同的个人评分:

  • 个人评价:星球大战:第六集 - 绝地归来(1983)评级:5.0
  • 个人评价:Mission:Impossible(1996)评级:4.0
  • 个人评价:Die Hard:复仇(1995)评级:4.0
  • 个人评价:Batman Forever(1995)评级:5.0 …

machine-learning collaborative-filtering matrix-factorization apache-spark

5
推荐指数
1
解决办法
5000
查看次数

如何在python中并行for循环?

更新1.0开始

看来打电话的时候

for i, Wi in enumerate(W.T):
    idx.append(i)
    result.append(pool.apply_async(ALS_Y, (X, Wi, Q, lambda_, n_factors, i,)))
Run Code Online (Sandbox Code Playgroud)

传递给函数的参数ALS_Y/ALS_X不是引用,它复制了参数.所以,当XY非常large matrixes,例如,在我的情况下,它是6000*40左右(并且它是a for-loop,让我们假设迭代次数是50 000,所以......) ,它超出了记忆的极限.
然后我尝试使用全局参数,只是将索引作为参数传递给函数,

import multiprocessing
import time
import numpy as np

def func(idx):
    global a
    a[idx] += 1



if __name__ == "__main__":
    a=range(10)
    for j in xrange(2):
        pool = multiprocessing.Pool(processes=8)
        result = []
        for i in xrange(10):
            result.append(pool.apply_async(func, (i, )))
        pool.close()
        pool.join()
        print a
        print "Sub-process(es) done."
Run Code Online (Sandbox Code Playgroud)

它输出:`

[0, …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing gpu matrix matrix-factorization

5
推荐指数
0
解决办法
532
查看次数

如何在python scikit NMF中处理缺失值

我正在尝试使用python scikit-learn在我的数据集上应用NMF.我的数据集包含0个值和缺失值.但scikit-learn不允许数据矩阵中的NaN值.有些帖子说用零替换缺失值.

我的问题是:

  • 如果我用零替换缺失值,算法如何告诉缺失值和实际零值?

  • 是否有任何其他NMF实现可以处理缺失值?

  • 或者,如果有任何其他矩阵分解算法可以做缺失值预测?

python recommendation-engine svd scikit-learn matrix-factorization

5
推荐指数
1
解决办法
1505
查看次数

编写一个可跟踪的R函数,模仿LAPACK的dgetrf进行LU分解

R核心中没有LU分解功能.尽管这种分解是一个步骤solve,但它并未明确地作为独立功能提供.我们可以为此写一个R函数吗?它需要模仿LAPACK例程dgetrf.Matrixpackage有一个很好的lu函数,但如果我们可以编写一个可追踪的 R函数会更好

  • 将矩阵分解到某个列/行并返回中间结果;
  • 继续从中间结果到另一列/行或到结尾的因子分解.

此功能对于教育和调试目的都很有用.教育的好处是显而易见的,因为我们可以逐列说明分解/高斯消除.对于调试使用,这里有两个例子.

R和Python中LU分解之间的结果不一致时,人们会问为什么R和Python中的LU分解会产生不同的结果.我们可以清楚地看到,两个软件都返回相同的第一个枢轴和第二个枢轴,但不是第三个.因此,当分解进行到第3行/列时,必定会有一些有趣的东西.如果我们能够检索调查的临时结果,那将是件好事.

我可以稳定地反转与R中许多小值范德蒙矩阵?对于这种类型的矩阵,LU分解是不稳定的.在我的回答中,给出了一个3 x 3矩阵的例子.我希望solve产生错误抱怨U[3, 3] = 0,但运行solve几次我发现solve有时候会成功.因此,对于数值研究,我想知道当分解进行到第二列/行时会发生什么.

由于该函数是用纯R代码编写的,因此对于中等到大的矩阵,预计它会很慢.但是性能不是问题,因为教育和调试我们只使用一个小矩阵.


dgetrf的一点介绍

LAPACK的dgetrf用行旋转计算LU分解:A = PLU.退出分解时,

  • L是一个单位下三角矩阵,存储在下三角部分A;
  • U是一个上三角矩阵,存储在上三角部分A;
  • P 是行置换矩阵,存储为单独的置换索引向量.

除非枢轴正好为零(不达到某个公差),否则应进行分解.


我从什么开始

使用行旋转和"暂停/继续"选项编写LU分解并不具有挑战性:

LU <- function (A) {

  ## check dimension
  n <- dim(A)
  if (n[1] != n[2]) stop("'A' must be a square matrix")
  n <- n[1] …
Run Code Online (Sandbox Code Playgroud)

r function matrix matrix-factorization

5
推荐指数
1
解决办法
2104
查看次数

具有海量数据矩阵分解的推荐系统可提供MemoryError

我有三个数据库模型(来自Django),可以用作构建推荐系统的输入:

  • 用户列表-有userIdusernameemail
  • 电影列表-有movieIdmovieTitleTopics
  • 保存列表-使用userIdmovieIdtimestamp当前推荐系统将比在线找到的通常方法更简单一点,因为没有评级得分,只是用户已经保存了某个电影,并且该模型包含了所有内容。电影保存

我仍然应该能够使用矩阵分解(MF)来构建推荐系统,即使某个项目的等级只是10(已保存或未保存)的形式。

为了使用所有的MF算法,发现无论是scipysurprise,我要创建一个pandas数据帧和数据透视这使得所有的用户id将是行(索引)和所有 movieIds将成为列。

用于执行此操作的代码段代码为:

# usersSet and moviesSet contain only ids of users or movies

zeros = numpy.zeros(shape=(len(usersSet), len(moviesSet)), dtype=numpy.int8)

saves_df = pandas.DataFrame(zeros, index=list(usersSet), columns=list(moviesSet))

for save in savesFromDb.iterator(chunk_size=50000):
    userId = save['user__id']
    movieId = save['movie__id']

    saves_df.at[userId, movieId] = 1
Run Code Online (Sandbox Code Playgroud)

到目前为止的问题:

  • 使用 …

python recommendation-engine scipy pandas matrix-factorization

5
推荐指数
1
解决办法
129
查看次数

是否有良好的库可以快速进行非负矩阵分解(NMF)?

我有一个稀疏矩阵,其形状为570000*3000.我试图尼玛做NMF(使用默认的NMF方法,并设定max_iter至65岁).但是,我发现nimfa很慢.有人用更快的库来做NMF吗?

c++ python pca matrix-factorization nmf

4
推荐指数
1
解决办法
3363
查看次数

评估LightFM推荐模型

我一直在玩lightfm已经有一段时间了,发现它对于产生推荐非常有用.但是,我想知道两个主要问题.

  1. 如果建议的排名很重要,评估LightFM模型,我应该更多地依赖precision@k或其他提供的评估指标,如AUC score?我应该在什么情况下专注于改进我precision@k与其他指标的比较?或者他们高度相关?这意味着如果我设法提高我的precision@k分数,其他指标将会跟随,我是否正确?

  2. 如果使用WARP损失函数训练的模型得分为0.089,您将如何解释precision@5?AFAIK,Precision at 5告诉我前5个结果中有多少比例为正/相关.这意味着precision@5如果我的预测不能达到前5 ,我会得到0 或者如果我在前5中只有一个预测正确,我会得到0.2但是我不能解释0.0xx意味着什么precision@n

谢谢

python recommendation-engine machine-learning matrix-factorization

4
推荐指数
1
解决办法
2212
查看次数

Very Large and Very Sparse Non Negative Matrix factorization

我有一个非常大且稀疏的矩阵(531K x 315K),总单元数约为1670亿。非零值仅为1s。非零值的总数约为45K。是否有有效的NMF软件包来解决我的问题?我知道有几个软件包,它们仅适用于较小的数据矩阵。任何想法都可以。提前致谢。

python sparse-matrix bigdata matrix-factorization nmf

3
推荐指数
1
解决办法
2033
查看次数

ichol作为cholinc替代品:nonpositive pivot

在Matlab 2012中,该cholinc命令被标记为已过时.警告消息说它将被替换为ichol.直到现在我才使用cholinc(A,droptol),通常是droptol=1E-15.在我尝试使用的新版本中ichol(A,struct('droptol',droptol,'type','ict')),大部分时间都可以使用,但有时我会收到警告信息

Error using ichol
Encountered nonpositive pivot.
Run Code Online (Sandbox Code Playgroud)

这是一个根本问题(即问题cholinc是否已经但没有报告)或者是否有办法以ichol前所未有的方式行事cholinc

matlab linear-algebra matrix-factorization

1
推荐指数
1
解决办法
4566
查看次数

在TensorFlow中使用coo_matrix

我在TensorFlow中进行矩阵分解,我想使用来自Spicy.sparse的coo_matrix,因为它使用更少的内存,并且可以很容易地将我的所有数据放入我的矩阵中来训练数据.

是否可以使用coo_matrix来初始化张量流中的变量?

或者我是否必须使用sess.run()和feed_dict创建会话并将我获得的数据提供给tensorflow.

我希望你理解我的问题和我的问题否则评论,我会尝试解决它.

sparse-matrix matrix-factorization tensorflow

1
推荐指数
1
解决办法
3412
查看次数