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

该博客分享了一段来自b站吴恩达机器学习课程的视频,内容涉及单变量线性回归的梯度下降算法。博主通过MATLAB代码展示了如何设置假设函数、计算代价函数以及更新模型参数的过程,最终得到拟合数据的直线。虽然代码可以优化,但博主旨在初学者角度分享学习过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

其结果如图:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值