Matlab梯度下降解决评分矩阵分解

for iter = 1:num_iters

    %梯度下降 用户向量
    for i = 1:m
        %返回有0有1 是逻辑值
       ratedIndex1 = R_training(i,:)~=0 ;
       %U(i,:) * V‘  第i个用户分别对每个电影的评分

       %sumVec1  第i个用户分别对每个电影的评分 减去真实值
       sumVec1 = ratedIndex1 .* (U(i,:) * V‘ - R_training(i,:));
       product1 = sumVec1 * V;
       derivative1 = product1 + lambda_u * U(i,:);
       old_U(i,:) = U(i,:) - theta * derivative1;
    end

    %梯度下降 电影向量
    for j = 1:n
       ratedIndex2 = R_training(:,j)~=0;
       sumVec2 = ratedIndex2 .* (U * V(j,:)‘ - R_training(:,j));
       product2 = sumVec2‘ * U;
       derivative2 = product2 + lambda_v * V(j,:);
       old_V(j,:) = V(j,:) - theta * derivative2;
    end

    U = old_U;
    V = old_V;
    RMSE(i,1) = CompRMSE(train_vec,U,V);
    RMSE(i,2) = CompRMSE(probe_vec,U,V);

end

  

时间: 2024-10-05 05:28:59

Matlab梯度下降解决评分矩阵分解的相关文章

Matlab梯度下降及正规方程实现多变量的线性回归

一.相关概念 1.梯度下降 由于Z= X*theta - y是列向量,所以Z'*Z就是平方和连加,就是2范数:如果Z是矩阵呢,那么Z'*Z的对角线就是Z矩阵每列的2范数. 2.正规方程(Normal Equation) θ = (XTX)-1XTY. 二.代码实现 2104,3,399900 1600,3,329900 2400,3,369000 1416,2,232000 3000,4,539900 1985,4,299900 1534,3,314900 1427,3,198999 1380,

矩阵分解在推荐系统中的应用

矩阵分解是最近几年比较火的算法,经过kddcup和netflix比赛的多人多次检验,矩阵分解可以带来更好的结果,而且可以充分地考虑各种因素的影响,有非常好的扩展性,因为要考虑多种因素的综合作用,往往需要构造cost function来将矩阵分解问题转化为优化问题,根据要考虑的因素为优化问题添加constraints,然后通过迭代的方法进行矩阵分解,原来评分矩阵中的missing vlaue可以通过分解后得到的矩阵求的. 本文将简单介绍下最近学习到的矩阵分解方法. (1)PureSvd 怎么评价这

机器学习入门:线性回归及梯度下降

机器学习入门:线性回归及梯度下降 本文会讲到: (1)线性回归的定义 (2)单变量线性回归 (3)cost function:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)feature scaling:加快梯度下降执行速度的方法 (6)多变量线性回归   Linear Regression 注意一句话:多变量线性回归之前必须要Feature Scaling! 方法:线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个

用Spark学习矩阵分解推荐算法

在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法. 1. Spark推荐算法概述 在Spark MLlib中,推荐算法这块只实现了基于矩阵分解的协同过滤推荐算法.而基于的算法是FunkSVD算法,即将m个用户和n个物品对应的评分矩阵M分解为两个低维的矩阵:$$M_{m \times n}=P_{m \times k}^TQ_{k \times n}$$ 其中k为分解成低维的维数,一般远比m和n小.如果大

Tensorflow--梯度下降解决线性回归

Tensorflow一些常见操作: 代码: # -*- coding: UTF-8 -*- """ 用梯度下降的优化方法来快速解决线性回归问题 """ import numpy as np import matplotlib.pyplot as plt import tensorflow as tf try: xrange = xrange # Python 2 except: xrange = range # Python 3 # 构建数据 p

图计算框架解决矩阵分解

1.矩阵分解是推荐系统常用的手段,经常用来做用户偏好预测.在当下的推荐系统中,我们得到用户对于物品的评分矩阵往往是非常稀疏的,一个有m个用户,n个商品的网站,它所收集到的m*n用户评分矩阵R可能只有不到万分之一的数据非零.矩阵分解算法常用来构造出多个矩阵, 用这些矩阵相乘的结果R’来拟合原来的评分矩阵R,目标是使得到的矩阵R’在R的非零元素那些位置上的值尽量接近R中的元素,同时对于R中非零值进行补全.我们定义R和R’之间的距离,把它作为优化的目标,那么矩阵分解就变成了最优化问题,而这类最优化问题

Mahout分布式运行实例:基于矩阵分解的协同过滤评分系统

Apr 08, 2014  Categories in tutorial tagged with Mahout hadoop 协同过滤  Joe Jiang 前言:之前配置Mahout时测试过一个简单的推荐例子,当时是在Eclipse上运行的,由于集成插件的缘故,所以一切进行的都比较顺利,唯一不足的是那是单机运行的,没有急于分布式系统处理.所以基于测试分布式处理环境的目的,下午找了一个实例来运行,推荐系统原型是一个电影评分的系统. 一.问题描述 对于协同过滤(Collaborative Filt

梯度下降、随机梯度下降、方差减小的梯度下降(matlab实现)

梯度下降代码: function [ theta, J_history ] = GradinentDecent( X, y, theta, alpha, num_iter ) m = length(y); J_history = zeros(20, 1); i = 0; temp = 0; for iter = 1:num_iter     temp = temp +1;     theta = theta - alpha / m * X' * (X*theta - y);     if tem

对评分矩阵进行分解,SVD与LSI

摘自推荐系统 一.SVD奇异值分解 参考 https://www.cnblogs.com/lzllovesyl/p/5243370.html 1.SVD简介 SVD(singular value decomposition).其作用就是将一个复杂的矩阵分解成3个小的矩阵. 原文地址:https://www.cnblogs.com/ylxn/p/10686256.html