Python 矩阵分解评估

问题描述

我知道这是一个很简单的问题,但我没有明白。

我执行了代码 in here 并且它运行正常

import numpy

def matrix_factorization(R,P,Q,K,steps=5000,alpha=0.0002,beta=0.02):
    '''
    R: rating matrix
    P: |U| * K (User features matrix)
    Q: |D| * K (Item features matrix)
    K: latent features
    steps: iterations
    alpha: learning rate
    beta: regularization parameter'''
    Q = Q.T

    for step in range(steps):
        for i in range(len(R)):
            for j in range(len(R[i])):
                if R[i][j] > 0:
                    # calculate error
                    eij = R[i][j] - numpy.dot(P[i,:],Q[:,j])

                    for k in range(K):
                        # calculate gradient with a and beta parameter
                        P[i][k] = P[i][k] + alpha * (2 * eij * Q[k][j] - beta * P[i][k])
                        Q[k][j] = Q[k][j] + alpha * (2 * eij * P[i][k] - beta * Q[k][j])

        eR = numpy.dot(P,Q)

        e = 0

        for i in range(len(R)):

            for j in range(len(R[i])):

                if R[i][j] > 0:

                    e = e + pow(R[i][j] - numpy.dot(P[i,j]),2)

                    for k in range(K):

                        e = e + (beta/2) * (pow(P[i][k],2) + pow(Q[k][j],2))
        # 0.001: local minimum
        if e < 0.001:

            break

    return P,Q.T

R = [
     [5,3,1],[4,[1,1,5],4],[0,5,]

R = numpy.array(R)

N = len(R)
M = len(R[0])
K = 2

P = numpy.random.rand(N,K)
Q = numpy.random.rand(M,K)

nP,nQ = matrix_factorization(R,K)
nR = numpy.dot(nP,nQ.T)
print(nR)

我知道矩阵分解模型背后的数学原理。我不明白的一点是测试部分。

让我用一个例子来解释。

我给 R 矩阵如下:

用户 - 电影矩阵:(输入)

R = [
     [5,]

根据矩阵分解模型,我的输出如下

矩阵分解的输出

array([[5.05061059,2.76932235,6.00910081,0.99918217],[3.9246345,2.15333139,4.77284691,0.9999652 ],[1.12424323,0.64611747,3.53300274,4.96832669],[0.94119495,0.53978842,2.87426388,3.9788853 ],[2.71213676,1.50889704,4.83895101,4.0215367 ]])

问题

好的,学习了接近原始矩阵的值。这个矩阵对我有什么作用??

矩阵分解将如何计算当前用户对新电影的评分?或新用户对现有电影的评价?

在协同过滤中,我们计算用户对之前没有看过的电影打分的概率,并根据它做出推荐。我们如何在矩阵分解中做同样的直觉?

解决方法

正如您所说,我们可以看到,对于现有评级,我们的近似值非常接近 R 矩阵的真实值,并且我们还得到了一些未知值(零值)的“预测”。

在您发送的教程中,您可以很容易地看到 U1 和 U2 的评分相似,并且他们对 D1 和 D2 的评分都很高,而其余用户则更喜欢 D3、D4 和 D5。 enter image description here

您使用的算法可以根据不同的特征 (K) 关联用户 (P) 和项目 (Q),并且预测也遵循这些关联。

例如,我们可以看到 U4 在 D3 上的预测评分为 4.59,因为 U4 和 U5 对 D4 的评分都很高,其他用户和项目的评分也是如此。这就是生成的矩阵值与原始矩阵如此接近的原因。我希望这能解决问题!

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...