Matlab中基于随机梯度下降的矩阵分解

Matlab中基于随机梯度下降的矩阵分解,matlab,math,mathematical-optimization,gradient-descent,matrix-factorization,Matlab,Math,Mathematical Optimization,Gradient Descent,Matrix Factorization,我必须将MatrixR[mn]分解为两个低秩矩阵(U[Km]和V[K*n]),我这样做是为了通过U和V预测R的缺失值。 问题是,对于分解R,我不能使用Matlab分解方法,因此我必须研究目标函数,以最小化误差平方和,从而提高分解精度: 详情如下: 我在这篇文章中的问题是如何在Matlab中最小化函数F,使用方法将R分解为U和V矩阵 谢谢你的帮助 最后我在的帮助下想出了:) 我将分几个步骤解释该方法: 创建U[k*m]和V[k*n]并任意填充它们 在Ui和Vj上计算目标函数的导数 按如下步骤

我必须将
Matrix
R[mn]分解为两个低秩矩阵(U[Km]和V[K*n]),我这样做是为了通过U和V预测R的缺失值。

问题是,对于分解R,我不能使用
Matlab
分解方法,因此我必须研究目标函数,以最小化
误差平方和,从而提高分解精度:
详情如下:


我在这篇文章中的问题是如何在
Matlab
最小化函数F,使用方法将R分解为U和V矩阵


谢谢你的帮助

最后我在的帮助下想出了:)
我将分几个步骤解释该方法:

  • 创建U[k*m]和V[k*n]并任意填充它们

  • 在Ui和Vj上计算目标函数的导数

  • 按如下步骤进行梯度下降:

    而(您的条件满足(优化误差函数F)) { Ui=Ui+a(U'i); Vj=Vj+a(V'j); 使用Ui和Vj的新值评估F; }

  • 取最小值F,取U和V,计算转置(U)*V和 结果是估计的R(a步长学习率


  • “随机梯度下降”实际上是在U'的每一行和V的每一列上计算F的导数,我无法理解矩阵列或行的导数!!!:((为了证实,Matlab不适合你?我相信它使用某种形式的随机搜索。@horcher,不适合我,因为它不接受NaN或R矩阵中缺少的条目。实际上我必须自己实现矩阵分解。嗨@oMiD,我也在寻找一种使用矩阵分解来插补缺少的值的方法。在我的例子中,我我使用的是二进制矩阵,因此无法用0替换缺少的值。请您向我解释一下,您是如何替换输入矩阵中缺少的值并在分解后重新获得这些值的?谢谢。