我试图用Python实现Adagrad。为了便于学习,我以矩阵分解为例。我会用Autograd来计算梯度。在
我的主要问题是执行是否良好。在
问题描述
给定一个矩阵a(mxn)有一些缺失项,分解成W和H,分别有大小(mxk)和(kxn)。目标是使用Adagrad学习W和H。对于Autograd实现,我将遵循this guide。在
NB:我非常清楚基于ALS的实现非常适合。我使用Adagrad只是为了学习目的
习惯进口import autograd.numpy as np
import pandas as pd
创建要分解的矩阵
^{pr2}$
屏蔽一个条目A[0, 0] = np.NAN
定义成本函数def cost(W, H):
pred = np.dot(W, H)
mask = ~np.isnan(A)
return np.sqrt(((pred - A)[mask].flatten() ** 2).mean(axis=None))
分解参数rank = 2
learning_rate=0.01
n_steps = 10000
成本梯度与参数W和Hfrom autograd import grad, multigrad
grad_cost= multigrad(cost, argnums=[0,1])
Adagrad主程序(需要检查)shape = A.shape
# Initialising W and H
H = np.abs(np.random.randn(rank, shape[1]))
W = np.abs(np.random.randn(s