多变量线性回归——梯度下降MATLAB矩阵实现

参考吴恩达机器学习视频,此为其线性回归作业。
ex1_2
多变量的假设h表示为:
h
代价函数:
代价函数
找出使得代价函数最小的一系列参数。
多变量线性回归的批量梯度下降算法为:
梯度下降1
求导后得到:
求导后
作业:
取出ex1data2.txt中的数据,第一列为房子尺寸,第二列为卧室数量,第三列为房子价格。

clear
clc
data = load('ex1data2.txt'); % read comma separated data
x1 = data(:, 1);  % the size of the house
x2 = data(:, 2);  % the number of bedrooms
yT = data(:, 3);  % the price of the house
y = yT.';
m = length(y); % number of training examples
figure(1) %1
plot3(x1,x2,y, 'rx', 'MarkerSize', 10); % Plot the data
xlabel('the size of the house'); % Set the x axis label
ylabel('the number of bedrooms'); % Set the y axis label
zlabel('the price of the house'); % Set the z axis label
grid on;

三维图1
梯度下降程序:
在x前乘系数,使x在[0,1]范围内

%使x1、x2在[0,1]范围内
x = [ones(1,m); 0.0001*x1.'; 0.1*x2.']; % 加第一列为全1,之后为x1、x2
theta = zeros(3, 1); % initialize fitting parameters

iterations = 1000; %迭代最大次数
alpha = 0.01; %学习率  %改变学习率,结果不一样
s = zeros(iterations, 1);  %代价函数中的累加值
J = zeros(iterations, 1);  %代价函数值

for k = 1:1:iterations 
    p = zeros(3, 1);  %迭代一次,累计清零
    for i = 1:1:m
        s(k) = s(k)+(theta.'*x(:,i)-y(i)).^2; %求J函数的累加
        %求偏导
        p = p+(theta.'*x(:,i)-y(:,i))*x(:,i); %对theta求偏导的累加   
    end         
    J(k) = s(k)/(2*m);  %代价函数
    theta = theta-(alpha/m)*p;  %更新theta参数
    if k>1  %为了下面k-1有索引
        if J(k-1)-J(k)<1e+2   %若误差小于10^2,则停止迭代         
             break;
        end
    end
end

theta  %输出显示theta的值

得到的θ参数矩阵:

theta =
1.0e+05 *

2.7824
1.2992
1.2073

画出代价函数J:

figure(2)  %2
plot(J)  %画出代价函数
ylabel('J(θ)'); % Set the y axis label
xlabel('iterations'); % Set the x axis label
grid on

代价函数

代价函数J的数值过大,需迭代很多次才能减到足够小。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab是一种常用的编程语言,可用于求解复杂的数学问题和模拟大数据集。在多元线性回归的问题中,可以使用Matlab梯度下降法来求解最优解。 多元线性回归是一种统计分析方法,用于建立一个由多个自变量预测一个因变量的模型。在Matlab中,可以使用矩阵运算和向量化计算来实现梯度下降法。 首先,需要确定多元线性回归模型的参数和数据集。这个模型可以用以下公式表示: Y = Xβ + ε 其中,Y是因变量向量,X是自变量矩阵,β是模型参数向量,ε是随机误差向量。 然后,可以使用Matlab中的gradient函数来计算梯度向量和梯度下降步长,以更新模型参数。具体步骤包括: 1.初始化模型参数β和学习率α; 2.计算梯度向量grad和梯度下降步长delta; 3.更新参数β; 4.重复2和3直至达到收敛条件。 Matlab中的代码示例如下: %% 初始化模型参数 beta = randn(size(X,2),1); %% 设置学习率和收敛条件 alpha = 0.01; tol = 1e-5; %% 梯度下降法求解多元线性回归 while true % 计算梯度向量和梯度下降步长 grad = X'*(X*beta-Y); delta = -alpha*grad; % 更新参数 beta = beta + delta; % 判断是否收敛 if norm(delta) < tol break end end 最后,可以使用求解出的模型参数来预测新的因变量值。 综上所述,Matlab梯度下降法是一种有效的多元线性回归求解方法。它可以通过矩阵运算和向量化计算来提高计算效率和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值