我正在实现矩阵分解以预测审阅者的电影评级。该数据集取自Movielen(http://grouplens.org/datasets/movielens/)。这是一个认真的推荐问题,因此我只是为了我的学习目的实施此矩阵分解方法。
i在训练数据集中的预测等级和实际评分之间将成本函数模拟为根平方的错误。我使用scipy.optimize.minimize函数(我使用共轭梯度下降)来考虑电影评分矩阵,但是即使仅对于具有100K项目的数据集,此优化工具也太慢了。我计划用2000万个项目扩展数据集的算法。
我一直在寻找一种基于Python的解决方案以进行随机下降,但是我在Scikit-Learn上发现的随机梯度下降不允许我使用自定义成本和梯度功能。
我可以实现自己的随机梯度下降,但是我正在与你们一起检查是否已经有一个工具。
基本上,我想知道是否有类似的API:
optimize.minimize(my_cost_function,
my_input_param,
jac=my_gradient_function,
...)
谢谢!un
这是如此简单(至少是香草方法),以至于我认为周围没有"框架"。只是
my_input_param += alpha * my_gradient_function
也许您想看看Theano,但是它会为您带来差异化。不过,根据您想做的事情,它可能有点过高。
我一直在尝试在R中做类似的事情,但是具有不同的自定义成本功能。
我理解,关键是找到梯度,看看哪种方式将您带入本地最低限度。
具有线性回归(y = mx + c
)和最小二乘功能,我们的成本功能是 (mx + c - y)^2
与M有关的部分导数是 2m(mX + c - y)
m = theta
为我们提供theta <- theta - learning_rate * t(X) %*% (X %*% theta - y) / length(y)
我不确定这一点,但是我认为对于线性回归和sqrt(mx + c - y)
的成本函数,梯度步骤是与M有关的部分导数,我相信这是 m/(2*sqrt(mX + c - y))
如果所有这些都是不正确的,请(任何人)纠正我。这是我试图学习自己的东西,很高兴知道我是否朝着完全错误的方向前进。