[机器学习学习笔记]单变量的梯度下降

https://www.bilibili.com/video/BV164411b7dx?p=18

视频课来自b站吴恩达机器学习,第二章单变量的梯度下降代码尝试。

假设函数设为:

原始数据(自己编的):x = [1,2,3,4];y = [1,2,3,4];

matlab代码如下:

function [theta_1,theta_2] = homework_1(x,y) 

alpha = 0.1;
plot(x,y,'b+')
hold on

ka = 0.0001;% 设定的代价值
J = 10;% 初始代价值,多少无所谓
[m,n] = size(x);
theta_1 = 0;
theta_2 = 0;% 初始模型参数theta的值,一般为0,反正最后要算,多少无所谓
while J > ka

    h = theta_1 + theta_2 .* x;% 假设函数
    % 求偏导
    df_1 = zeros(1,n);
    df_2 = zeros(1,n);
    
    for ii = 1:n
        df_1(ii) = (theta_1 + theta_2.*x(ii) - y(ii));  
    end

    for ii = 1:n
        df_2(ii) = (theta_1 + theta_2.*x(ii) - y(ii)) * x(ii);
    end
    
    J_1 = sum1(df_1)/(4);
    J_2 = sum1(df_2)/(4);% 计算偏导
    % 更新参数,必须一起更新
    theta_1 = theta_1 - alpha * J_1;
    theta_2 = theta_2 - alpha * J_2;% 更新参数
    % 计算代价函数
    J0 = zeros(1,4);
    for i = 1:n
    
    J0(i) = (h(i) - y(i))^2;
    
    end
    
    J= sum1(J0)/(2*n);% J为代价,越小代表拟合越接近
    
end
plot(x,h,'g')
end

其结果如图:

[机器学习学习笔记]单变量的梯度下降_第1张图片

 刚开始学,一些语法能够优化也没有优化,大家随便看看就好。

你可能感兴趣的:(机器学习,学习,人工智能,matlab)