许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  梯度下降算法MATLAB代码实现分享

梯度下降算法MATLAB代码实现分享

阅读数 1
点赞 0
article_banner


前段时间学习机器学习,仓促中写了个MATLAB代码实现梯度下降,放这里存档。

新手写代码,实现很粗糙,但总归是能用了,权当是交作业了。

代码中求偏导是手动计算实现的。

里面的testx和testy分别如下所示

代码如下

% tic

diary 001

clear;

clc;

% C 作为常数项,C1作为成本函数,C2作为求偏导

%%%%%%%%%%变量定义%%%%%%%%

Ax = readtable('testx.xlsx'); % 读取数据

X_raw = table2array(Ax); % 表格转矩阵

Ay = readtable('testy.xlsx'); % 读取数据

y = table2array(Ay); % 表格转矩阵,读取真实值

numRows = length(X_raw); % 获取矩阵 X 的行数,即数据个数

%%%%%%%%%%%数据读取%%%%%%%%%%

w = randn(1, size(X_raw, 2)); % 随机初始化 w

b = randn(1); % 随机初始化 b

%%%%%%%%%%参数初始化%%%%%%%%%

alpha = 0.00001; % 较小的学习率

numIterations = 100000; % 增加迭代次数

% 初始化存储损失值的数组

costHistory = zeros(numIterations, 1);

for iter = 1:numIterations

 % 计算预测值

 y_hat_1 = w.*X_raw;

 y_hat_2 = sum(y_hat_1,2);

 f = y_hat_2 + b;

 

 % 计算成本函数

 Diff_Y = f - y;

 Diff_Y_square = Diff_Y .^2;

 Diff_Y_sum = sum(Diff_Y_square);

 J = (1/(2*numRows)) * Diff_Y_sum;

 

 % 保存当前的损失值

 costHistory(iter) = J;

 

 % 计算偏导数

 temp_w_1 = Diff_Y;

 temp_w_2 = temp_w_1 .* X_raw;

 temp_w_3 = sum(temp_w_2);

 df_dw = (1/numRows) * temp_w_3;

 

 temp_b_1 = Diff_Y;

 temp_b_2 = sum(temp_b_1);

 df_db = (1/numRows) * temp_b_2;

 

 % 更新参数

 w = w - alpha * df_dw;

 b = b - alpha * df_db;

 

%   % 打印当前迭代的信息(可选)

%   if mod(iter, 100) == 0

%     fprintf('Iteration %d - Cost: %f\n', iter, J);

%   end

end

% 最终的参数和成本函数值

disp('Final parameters:');

disp(['w: ', num2str(w)]);

disp(['b: ', num2str(b)]);

disp(['alpha: ', num2str(alpha)]);

disp(['Final cost: ', num2str(J)]);

% 绘制成本函数曲线

figure;

plot(1:numIterations, costHistory, 'LineWidth', 2);

xlabel('Iteration');

ylabel('Cost');

title('Cost Function over Iterations');

grid on;

%toc


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空