梯度下降算法不收敛

时间:2016-10-23 17:36:21

标签: recommendation-engine gradient-descent collaborative-filtering

我正在尝试为社会推荐系统实施算法。该算法使用用户的全局信誉和相似度矩阵来预测用户给予项目的评级。我正在使用矩阵分解来查找用户和项目的潜在因素的值。我正在使用梯度下降算法。我的学习率= 0.0001,没有潜在因素= 10。

每次迭代后的成本函数值不遵循任何模式,即每次迭代后得到成本函数的随机值。

可能的原因是什么?

这是算法

function [U,V,J] = algorithm(I,C,A,F,sim,n,m)

[U,V,k,delta,x1,x2]=parameters(n,m);

J=zeros(100,1);
count=1;

ntemp=zeros(n,k);
mtemp=zeros(m,k);

Jprev=Inf;
Jcurr=costFunc(U,V,I,C,A,sim,F,n,m,x1,x2);
J(count)=Jcurr;
count=count+1;

temp0=zeros(1,k);
temp1=zeros(1,k);

while(count<=100)

%Jprev-Jcurr>(10^(-6))   %convergence condition

for i=1:n
    for j=1:m
        temp0=temp0+(I(i,j)*C(i)*((U(i,:)*V(j,:)')-A(i,j)))*V(j,:);
    end
    for p=1:n
        if F(i,p)==1
            temp1=temp1+sim(i,p)*(U(i,:)-U(p,:));
        end
    end
    ntemp(i,:)=U(i,:)-delta*(temp0+(U(i,:)*x1)+(temp1*x2));
end

temp0=zeros(1,k);
temp1=zeros(1,k);

for i=1:m
    for j=1:n
        temp0=temp0+(I(j,i)*C(j)*((U(j,:)*V(i,:)')-A(j,i)))*U(j,:);
    end
    mtemp(i,:)=V(i,:)-delta*(temp0+(x1*V(i,:)));
end

U=ntemp;
V=mtemp;

Jprev=Jcurr;
Jcurr=costFunc(U,V,I,C,A,sim,F,n,m,x1,x2);

J(count)=Jcurr;
count=count+1;

end

end

这是成本函数

function [temp0,temp1,J] = costFunc(U,V,I,C,A,sim,F,n,m,x1,x2)

J=0;
temp0=0;
temp1=0;

for i=1:n
    for j=1:m
        temp1=temp1+I(i,j)*C(i)*((A(i,j)-U(i,:)*V(j,:)')^2);
    end
end

for i=1:n
    for j=i:n
        if F(i,j)==1
            temp0=temp0+sim(i,j)*norm(U(i,:)-U(j,:),'fro');
        end
    end
end

J=temp1+x2*temp0+x1*(norm(U,'fro')+norm(V,'fro'));

J=J/2;

end

这是参数函数

function [U,V,k,delta,x1,x2] = parameters(n,m)

k=10;            %no of latent factors
U=rand(n,k);     %user latent factor matrix
V=rand(m,k);     %item latent factor matrix
delta=0.00001;   %learning rate
x1=0.001;        %regularization parameter
x2=0.001;        %regularization parameter for similarity

end

0 个答案:

没有答案