【问题标题】:Matrix Factorization In Matlab using Stochastic Gradient DescentMatlab中使用随机梯度下降的矩阵分解
【发布时间】:2013-10-13 08:22:19
【问题描述】:

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

问题是,对于分解 R 我不能使用 Matlab 分解方法,所以我必须研究目标函数,以最小化 sum-of-squared-errors 以提高分解精度:
详情如下:


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

感谢您的帮助!

【问题讨论】:

  • 随机梯度下降实际上在 U' 的每一行和 V 的每一列上计算 F 的导数,我无法理解矩阵列或行的导数!!! :((
  • 确认一下,Matlab 的nnmf 不适合您?我相信它使用某种形式的随机搜索。
  • @horcher, nnmf 对我不起作用,因为它不接受 NaN 或 R 矩阵中缺少的条目。实际上我必须自己实现矩阵分解。
  • 嗨@oMiD,我也在寻找一种使用矩阵分解来估算缺失值的方法。就我而言,我使用的是二进制矩阵,因此无法将这些缺失值替换为 0。您能否向我解释一下您是如何替换输入矩阵中的缺失值并在分解后将其取回的?谢谢。

标签: matlab math mathematical-optimization gradient-descent matrix-factorization


【解决方案1】:

最后我在this page 的帮助下想通了 :)
我分几个步骤解释这种方法:

  1. 创建U[k*m]和V[k*n]并任意填充

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

  3. 如下进行梯度下降:

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

  4. 用最小 F 取 U 和 V,计算 transpose(U)*V 和 结果估计为 R(a步长学习率

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2017-02-18
    • 2019-04-15
    • 2016-09-25
    • 2016-06-13
    • 2018-12-10
    • 2013-05-25
    • 2021-12-18
    • 2021-02-20
    相关资源
    最近更新 更多