梯度下降的matlab实现

运用梯度下降对多参数的数据进行线性拟合的简单实现

%function []=gradient_descent(x,y,a,th)

%梯度下降
clear;
clc;
x=rand(100,4);
y=rand(100,1);
[M,N]=size(x);%N为每一组数据的维数
x0=ones(M,1);%增加一维用于计算常数项的数据x0=1
X=zeros(M,N+1);
X(:,1)=x0;
X(:,2:N+1)=x;
w_old=rand(1,N+1);
pp=w_old;
k=1;
a=0.001;%a为学习的速率,步长
th=0.01;
while 1
    h=w_old*X';
    J=1/2*sum((h'-y).^2);%误差函数,取得极小值/最小值
    w_new=w_old-a*(h-y')*X;
    if  abs(w_new-w_old)<th%J<1%当误差值J小于阈值的时候取为最佳参数
        w_best=w_old;%最佳参数
        break
    end
    w_old=w_new;
end

你可能感兴趣的:(matlab,梯度下降,拟合)