我正在实现矩阵分解来预测评论者对电影的评分。数据集取自MovieLen (http://grouplens.org/datasets/movielens/)。这是一个经过充分研究的推荐问题,所以我只是出于学习目的而实现了这种矩阵分解方法。
我将成本函数建模为训练数据集中预测评级和实际评级之间的均方根误差。我使用scipy.optimize.minimize函数(我使用共轭梯度下降)来分解电影评分矩阵,但是这个优化工具即使对于只有100K项的数据集也太慢了。我计划将我的算法扩展到2000万项的数据集。
我一直在寻找随机梯度下降的基于Python的解决方案,但我在scikit-learn上找到的随机梯度下降不允许我使用自定义的成本和梯度函数。
我可以实现我自己的随机梯度下降,但我正在检查你们是否已经有这样做的工具。
基本上,我想知道是否有类似这样的API:
optimize.minimize(my_cost_function,
my_input_param,
jac=my_gradient_function,
...)谢谢!联合国
发布于 2015-05-06 11:12:01
这是如此简单的实现(至少是香草方法),我不认为它周围有一个“框架”。这只是
my_input_param += alpha * my_gradient_function也许你想看看theano,它将为你做一些区分。然而,根据你想要做的事情,这可能有点过头了。
发布于 2015-05-18 03:57:03
我一直在尝试在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))
如果有任何/所有这些都不正确,请(任何人)纠正我。这是我自己正在努力学习的东西,如果我走错了方向,我会很感激的。
https://stackoverflow.com/questions/30066093
复制相似问题