我想尝试Spark使用MLlib进行协同过滤,如本教程中所述:https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html 该算法基于"协作过滤"一文对于隐式反馈数据集",进行矩阵分解.
使用1000万个Movielens数据集,一切都正常运行.数据集分为80%培训10%测试和10%验证.
虽然具有不同的训练参数,但这些值与教程类似.
我尝试了几次运行算法,总是得到对我没有任何意义的建议.即使只评价儿童电影,我也会得到以下结果:
对于评级:
结果:
推荐给你的电影:
除了昨天以外似乎没有任何意义.
如果有人知道如何解释这些结果或获得更好的结果,我将非常感谢您分享您的知识.
最好的祝福
编辑:
如我所建议的那样,我训练了另
不同的个人评分:
machine-learning collaborative-filtering matrix-factorization apache-spark
看来打电话的时候
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不是引用,它复制了参数.所以,当X或Y非常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 scikit-learn在我的数据集上应用NMF.我的数据集包含0个值和缺失值.但scikit-learn不允许数据矩阵中的NaN值.有些帖子说用零替换缺失值.
我的问题是:
如果我用零替换缺失值,算法如何告诉缺失值和实际零值?
是否有任何其他NMF实现可以处理缺失值?
或者,如果有任何其他矩阵分解算法可以做缺失值预测?
python recommendation-engine svd scikit-learn matrix-factorization
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) 我有三个数据库模型(来自Django),可以用作构建推荐系统的输入:
userId,username,email等movieId,movieTitle,Topics等userId,movieId和timestamp(当前推荐系统将比在线找到的通常方法更简单一点,因为没有评级得分,只是用户已经保存了某个电影,并且该模型包含了所有内容。电影保存)我仍然应该能够使用矩阵分解(MF)来构建推荐系统,即使某个项目的等级只是1和0(已保存或未保存)的形式。
为了使用所有的MF算法,发现无论是scipy或surprise,我要创建一个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
我有一个稀疏矩阵,其形状为570000*3000.我试图尼玛做NMF(使用默认的NMF方法,并设定max_iter至65岁).但是,我发现nimfa很慢.有人用更快的库来做NMF吗?
我一直在玩lightfm已经有一段时间了,发现它对于产生推荐非常有用.但是,我想知道两个主要问题.
如果建议的排名很重要,评估LightFM模型,我应该更多地依赖precision@k或其他提供的评估指标,如AUC score?我应该在什么情况下专注于改进我precision@k与其他指标的比较?或者他们高度相关?这意味着如果我设法提高我的precision@k分数,其他指标将会跟随,我是否正确?
如果使用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
我有一个非常大且稀疏的矩阵(531K x 315K),总单元数约为1670亿。非零值仅为1s。非零值的总数约为45K。是否有有效的NMF软件包来解决我的问题?我知道有几个软件包,它们仅适用于较小的数据矩阵。任何想法都可以。提前致谢。
在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?
我在TensorFlow中进行矩阵分解,我想使用来自Spicy.sparse的coo_matrix,因为它使用更少的内存,并且可以很容易地将我的所有数据放入我的矩阵中来训练数据.
是否可以使用coo_matrix来初始化张量流中的变量?
或者我是否必须使用sess.run()和feed_dict创建会话并将我获得的数据提供给tensorflow.
我希望你理解我的问题和我的问题否则评论,我会尝试解决它.