matlab Lasso回归

matlab Lasso回归Lasso回归clc,clear;closeall;data=[1.541.611.621.661.711.721.731.861.9222.212.292.342.382.422.442.572.642.712.852.933.013.143.223.343.493.553.793.994.1220.120.120.320.420.420.520.620.720.921.121.321.521

大家好,又见面了,我是你们的朋友全栈君。

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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142850.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据的使用方法,主要有哪些?「建议收藏」

    大数据的使用方法,主要有哪些?「建议收藏」我们正处于福雷斯特研究公司所描述的“用户时代”,这个时代中驱动业务决策的不再是公司,而是用户。基于这个原因,深度理解用户的重要性已经远胜以往,因此许多机构开始使用大数据技术来挖掘用户信息。在这个时代,企图收获成功(甚至是求生存)的在线业务必须切实的理解顾客的体验和行为,因此海量数据的收集及挖掘能力成了这些机构的必备手段。当下,有许多机构的分析仍处于数据的收集上,组织能力的缺乏和技术的限制让这些收…

    2022年5月5日
    38
  • python获取图片像素矩阵_python图像特征提取进行分类

    python获取图片像素矩阵_python图像特征提取进行分类importnumpyasnpfromPILimportImageim=Image.open(‘test.jpg’)im2=np.array(im)

    2022年9月12日
    0
  • 用C++实现五子棋人机对战小游戏

    用C++实现五子棋人机对战小游戏如何用C++实现五子棋小游戏呢?五子棋可谓是家喻户晓了,在科技如此发达的今天,我们能不能用电脑实现五子棋人机对弈呢?答案当然是可以的首先,思考一下我们需要完成哪些步骤1、打印棋盘(使用二维数组即可)2、判断胜负(可以考虑深搜,但是暴力似乎能让代码更简洁)3、思考下一部棋该怎么走先从最简单的一部开始:打印棋盘voidout(){for(inti=0;i<=24;i++){for(intj=0;j<=24;j++){if(

    2022年6月16日
    60
  • 天气太冷不想出被窝?来DIY一个离线语音控制器[通俗易懂]

    天气太冷不想出被窝?来DIY一个离线语音控制器[通俗易懂]天气太冷不想出被窝?来DIY一个离线语音控制器点击上方“Embeded小飞哥”,选择“置顶/星标公众号”干货福利,第一时间送达!成就一番伟业的唯一途径就是热爱自己的事业。如果你还没能找到让自己热爱的事业,继续寻找,不要放弃。跟随自己的心,总有一天你会找到的。——乔布斯  你去关灯,你去,你去,。。我去。。小伙伴们有没有在天气寒冷时候,想去关灯,却离不开心爱的被窝的经历呢,有的话,跟着小飞哥一起来DIY一个离线语音控制器,有了它,我们

    2022年6月23日
    21
  • nacicat15激活码_通用破解码

    nacicat15激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    95
  • gluster源码浅析

    gluster源码浅析gluster的volume是由一系列的translator组成的,translator就像输入输出流的堆栈式结构一样,由一个translator调用另一个translator,每个translator在运行时作为shared-object,根据不同的文件操作调用不同的函数.每个translator一般需要定义xlator_fops、xlator_cbks、init、fini、volume…

    2025年6月8日
    0

发表回复

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

关注全栈程序员社区公众号