本文介绍: 本文简单介绍了机器学习中非常重要的一些概率论和线性代数知识。最后通过一组数据计算实现了线性回归的最小二乘计算和ML梯度下降迭代计算。

=[1x11x21xn]T

使用matlab计算解析解
%% 使用最小二乘法计算数据的线性回归最优解

clear all;
clc;

x = [75, 71, 83, 74, 73, 67, 79, 73, 88, 80, 81, 78, 73, 68, 71]';
y = [183, 175, 187, 185, 176, 176, 185, 191, 195 ,185, 174, 180, 178, 170, 184]';

X =[ones(15, 1), x]; %生成x的转置扩充数据

X_T = transpose(X);  %转置
a_start = inv(X_T * X)*X_T*y; % inv计算矩阵的拟,得到线性估计的参数a和b,这里是解析解

x_draw = 65:0.1:90;
scatter(X(:, 2), y, 80, "r");   % 原始数据的散点图
hold on;
plot(x_draw, a_start(2)*x_draw+a_start(1)); % 解析解的线性回归结果
grid on;

在这里插入图片描述
上图是最小二乘法的最优计算结果。

使用matlab通过梯度下降迭代计算解
%% 使用ML的梯度下降法迭代计算参数
clear all;
clc;

x = [75, 71, 83, 74, 73, 67, 79, 73, 88, 80, 81, 78, 73, 68, 71]';
y = [183, 175, 187, 185, 176, 176, 185, 191, 195 ,185, 174, 180, 178, 170, 184]';

%% 解析解
X =[ones(15, 1), x]; %生成x的转置扩充数据

X_T = transpose(X);  %转置
a_start = inv(X_T * X)*X_T*y; % inv计算矩阵的拟,得到线性估计的参数a和b,这里是解析解

x_draw = 65:0.1:90;
scatter(X(:, 2), y, 80, "r");   % 原始数据的散点图
hold on;
plot(x_draw, a_start(2)*x_draw+a_start(1)); % 解析解的线性回归结果
grid on;

%% 梯度下降回归解
%     1、定义参数,初始化矩阵
 %    2、while 循环 y = y - lr * x'
 ab_start = [100 ; 2];   % 设置一个初始值
 
 % 学习率
 learning_reate = 0.00002; 
 %learning_reate = [0.001 0; 0 0.00001]; % 使用二阶学习率适应原始数据的倍率
    
 % 迭代
 for i = 1:100000
       ab_start = ab_start - learning_reate * X_T *( -y +X* ab_start);  % 计算代价函数对参数矩阵的梯度,用原参数减学习率乘梯度
 end

在这里插入图片描述
此时可以看出ab_start 作为迭代计算得到的结果已经拟合于解析解算的结果了。

原文地址:https://blog.csdn.net/weixin_47407066/article/details/135794305

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_63275.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注