matlab Lasso回归

Lasso回归

clc,clear;
close all;
data=[1.54  1.61 1.62 1.66 1.71 1.72 1.73 1.86 1.92  2 2.21 2.29  2.34 2.38 2.42 2.44  2.57 2.64 2.71 2.85  2.93 3.01 3.14 3.22  3.34 3.49 3.55 3.79  3.99 4.12
    20.1 20.1 20.3 20.4 20.4 20.5 20.6 20.7 20.9 21.1 21.3 21.5 21.7 21.9 22 22.2 22.4 22.5 22.7 22.7 22.8 22.9 23.4 23.7 24.4 24.9 25.3 27.4 28.4 29.1
    5.17 5.14 5.13 5.10  5.08 5.03 5.01 4.99  4.93 4.91 4.89 4.81  4.77 4.75 4.62 4.56  4.5  4.48 4.46 4.31 4.28  4.19 4.12 3.99 3.91  3.84 3.75 3.64 3.51  3.5]';
m=size(data,1);
x=[ones(m,1),data(:,1:2)];%前两列为自变量,再添加一列常数项
y=data(:,3);%最后一列为因变量
runnums  = 200000;%迭代的步数
eps = 0.0001;%调整步长
Res = StageWise(x, y, eps, runnums);
y1=x*Res(end,:)';
%根据Res画 参数收敛
figure
hold on 
xAxis = 1:runnums;
plot(xAxis, Res(:,1),'r');
plot(xAxis, Res(:,2),'b');
plot(xAxis, Res(:,3),'k');
legend('x1参数','x2参数','x3参数')
%拟合
figure
hold on 
plot(y,'b');
plot(y1,'r');
legend('原数据','拟合数据')

逐步回归

%逐步回归
function [ Res ] = StageWise( x, y, eps, runtime)
    [m,n] = size(x);%数据集的大小
    Res = zeros(runtime, n);%最终的结果
    w = zeros(n,1);
    wMax = zeros(n,1);
    for i = 1:runtime
        ws = w';%输出每一次计算出来的权重
        lowestError = inf;%定义最小值
        for j = 1:n
            for sign = -1:2:1
                wTest = w;%初始化
                wTest(j) = wTest(j)+eps*sign;%只改变一维变量
                yTest = x*wTest;
                %求误差
                rssE = RegressError(y, yTest);
                if rssE < lowestError%如果好,就替换
                    lowestError = rssE;
                    wMax = wTest;
                end
            end
        end
        w = wMax;
        Res(i,:) = w;
    end
end

求误差平方和

function [ error ] = RegressError( y, yTest )
    yDis = y-yTest;%误差
    [m,n] = size(yDis);
    %求平方
    for i = 1:m
        yDis(i) = yDis(i)^2;
    end
    error = sum(yDis);%求列和
end
  • 8
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值