【matlab】回归预测——智能优化算法支持向量机

news/2024/7/8 7:45:24 标签: matlab, 支持向量机, 回归

目录

引言

原理

应用

优势

总结

SVR安装

灰狼优化算法

代码实现


引言

原理

  1. 核心思想
    • SVR的目标是找到一个函数,该函数能够最小化预测误差,并在拟合过程中保持一定的间隔,使得大部分数据点都落在这个间隔之内。
    • 与SVM类似,SVR也是通过寻找数据集中的支持向量来构建模型,这些支持向量是训练集中与预测函数边界最接近的点。
  2. 间隔与边界
    • 在SVR中,定义了一个边界,由一个中心线和两个平行的边界线组成。这些边界线之间的距离称为间隔,由用户预先设定。
    • SVR的目标是找到一个函数,使得大部分数据点都落在间隔内,并且使得落在间隔之外的数据点的预测误差最小化。
  3. 数学模型
    • SVR的数学模型可以表示为:y(x)=w⋅ϕ(x)+b,其中y(x)表示预测值,x表示输入特征,w表示权重向量,ϕ(x)表示特征映射函数(核函数),b表示偏置项。
    • SVR的目标是找到最佳的w和b,使得误差最小化。这可以通过解决一个优化问题来实现,该优化问题包括最小化预测误差和最大化间隔。

应用

SVR在许多领域都有广泛的应用,包括但不限于:

  1. 金融预测:用于预测股票价格、汇率、利率等金融指标。
  2. 能源管理:预测电力负荷、能源消耗等,帮助实现能源的有效管理和优化。
  3. 环境科学:预测气候变化、污染物浓度等,为环境保护和治理提供决策支持。
  4. 生物医学:预测疾病发病率、药物疗效等,为医疗诊断和治疗提供辅助。

优势

SVR相比于其他回归方法具有以下优势:

  1. 适用于小样本数据:SVR在处理小样本数据时具有较好的泛化能力,能够避免过拟合问题。
  2. 处理非线性关系:通过引入核函数,SVR可以处理非线性关系的数据,具有较强的非线性映射能力。
  3. 鲁棒性强:SVR对噪声和异常值具有较好的鲁棒性,能够减少这些因素对模型性能的影响。
  4. 高效性:SVR的训练过程相对较快,适用于大规模数据的处理。

总结

支持向量机回归(SVR)是一种强大的回归分析方法,它通过寻找支持向量来构建模型,并能够在拟合过程中保持一定的间隔。SVR具有适用于小样本数据、处理非线性关系、鲁棒性强和高效性等优点,在多个领域都有广泛的应用。

支持向量回归(SVR)的详细介绍以及推导算法-CSDN博客

SVR安装

运行前需要安装下面任何一个,本文以linearSVR为例

线性分类器(LinearSVR)https://www.csie.ntu.edu.tw/~cjlin/liblinear/#document

libSVM控件(eSVR)https://www.csie.ntu.edu.tw/~cjlin/libsvm/

1. 将下载解压的东西放在你的matlab的toolbox中

2.在主页的设置路径中添加libsvm及子文件

 3.将当前路径设置到libsvm-3.24/matlab 后,在命令行窗口运行mex -setup

4.编译完成即可正常使用

详细步骤可参考;https://www.cnblogs.com/ggg-327931457/p/9694516.html

下载好的LinearSVRlibSVM还有MinGW -w64 编译器放在网盘链接供大家下载

http://链接:https://pan.baidu.com/s/12101I4Y508G2KlE-1cqWoQ?pwd=l87c 提取码:l87c

灰狼优化算法

灰狼优化算法由Mirjalili等于2014年提出,它模拟了灰狼的群体协作狩猎行为,通过模拟灰狼的等级制度和狩猎策略,实现优化问题的求解。该算法具有结构简单、参数少、易于实现等特点,并且能够在局部寻优与全局搜索之间实现平衡,因此在求解精度和收敛速度方面表现出良好的性能。

灰狼优化算法主要基于以下三个基本步骤来实现优化:

包围猎物:灰狼在狩猎过程中会逐渐接近并包围猎物。在算法中,通过模拟这一行为,使搜索代理(即算法中的“狼”)能够逐步缩小搜索范围,逼近最优解。

追捕猎物:在自然界中,灰狼通过协同狩猎来追捕猎物。在算法中,通过模拟灰狼之间的等级制度和协同狩猎行为,使搜索代理能够相互协作,共同搜索最优解。

攻击猎物:当猎物停止移动时,灰狼会发起攻击,完成狩猎过程。在算法中,这一过程对应于搜索代理收敛到最优解的过程。

具体参考灰狼优化算法(Grey Wolf Optimizer,GWO)-CSDN博客

% Grey Wolf Optimizer
function [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems

Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems

Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems

%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);

Convergence_curve=zeros(1,Max_iter);

l=0;% Loop counter

% Main loop
while l<Max_iter
    for i=1:size(Positions,1)  
        
       % Return back the search agents that go beyond the boundaries of the search space
        Flag4ub=Positions(i,:)>ub;
        Flag4lb=Positions(i,:)<lb;
        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               
        
        % Calculate objective function for each search agent
        fitness=fobj(Positions(i,:));
        
        % Update Alpha, Beta, and Delta
        if fitness<Alpha_score 
            Alpha_score=fitness; % Update alpha
            Alpha_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness<Beta_score 
            Beta_score=fitness; % Update beta
            Beta_pos=Positions(i,:);
        end
        
        if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score 
            Delta_score=fitness; % Update delta
            Delta_pos=Positions(i,:);
        end
    end
    
    
    a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0
    
    % Update the Position of search agents including omegas
    for i=1:size(Positions,1)
        for j=1:size(Positions,2)     
                       
            r1=rand(); % r1 is a random number in [0,1]
            r2=rand(); % r2 is a random number in [0,1]
            
            A1=2*a*r1-a; % Equation (3.3)
            C1=2*r2; % Equation (3.4)
            
            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
                       
            r1=rand();
            r2=rand();
            
            A2=2*a*r1-a; % Equation (3.3)
            C2=2*r2; % Equation (3.4)
            
            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
            X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       
            
            r1=rand();
            r2=rand(); 
            
            A3=2*a*r1-a; % Equation (3.3)
            C3=2*r2; % Equation (3.4)
            
            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             
            
            Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
            
        end
    end
    l=l+1;    
    Convergence_curve(l)=Alpha_score;
    % 保存每次迭代的最优适应度值
    Best_scores = Convergence_curve;

    % 计算平均值、标准差和最差值
    average_objective = mean(Best_scores);
    std_deviation = std(Best_scores);
    worst_score = max(Best_scores);

    % 打印结果
    disp(['Best_scores: ', num2str(Best_scores)]);
    disp(['Average_objective: ', num2str(average_objective)]);
    disp(['Standard_deviation: ', num2str(std_deviation)]);
    disp(['Worst_score: ', num2str(worst_score)]);

end

代码实现

添加到你想使用的智能优化算法到工程路径,即可运行,这里运行的是灰狼算法(GWO)

main函数如下:

clear all 
clc
tic
global test1 test1Label Vtest1 Vtest1Label Atest1 Atest1Label
Best_scoreM = [];
Best_posM = [];
m_accuracy = [];
m_tIter = 10;%循环次数 
for kk=1:1:m_tIter
%%
%读取数据
       aaArrayTest = importdata('.\data.txt');
       aaArrayTest = aaArrayTest(all(~isnan(aaArrayTest),2),:);  
%%
%训练集:验证集:测试集=98:1:1
aaSize = size(aaArrayTest,1);
bbSize = size(aaArrayTest,2);
trainSize = floor(aaSize*98/100);
trainSizeVa = floor(aaSize*99/100);
test11=aaArrayTest(1:trainSize,1:bbSize-1);%training data
test1Label1=aaArrayTest(1:trainSize,bbSize);%training label
Atest11=aaArrayTest(trainSize+1:trainSizeVa,1:bbSize-1);%validated data
Atest1Label1=aaArrayTest(trainSize+1:trainSizeVa,bbSize);%validated data
Vtest11=aaArrayTest(trainSizeVa+1:aaSize,1:bbSize-1);%test data 
Vtest1Label1=aaArrayTest(trainSizeVa+1:aaSize,bbSize);%test label
%norm
[test1,minp,maxp,test1Label,mint,maxt] = premnmx(test11',test1Label1');
Atest1 = tramnmx(Atest11',minp,maxp);
Atest1Label = tramnmx(Atest1Label1',mint,maxt);
Vtest1 = tramnmx(Vtest11',minp,maxp);
Vtest1Label = tramnmx(Vtest1Label1',mint,maxt);
Atest1 = Atest1';
Atest1Label = Atest1Label';
test1 = test1';
test1Label = test1Label';
Vtest1 = Vtest1';
Vtest1Label = Vtest1Label';
%%
%使用元启发算法优化SVR超参数
SearchAgents_no=30;
Function_name='F1';
Max_iteration=1; function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
[Best_score,Best_pos,ALO_cg_curve]=GWO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
%%
%验证集测试误差
Best_posM=[Best_posM;Best_pos];%最优位置或变量
Best_scoreM=[Best_scoreM,Best_score];%最优MSE
%测试集测试,训练集统一不变。
[accuracy,predict] = LinearSVR(Best_pos,2);
m_accuracy = [m_accuracy,accuracy];
end
display(['mean MSE of Validation data is \m ', num2str(mean(Best_scoreM))]);
display(['mean MSE of test data is \m ', num2str(mean(m_accuracy))]);
toc %计时


http://www.niftyadmin.cn/n/5536818.html

相关文章

34.哀家要长脑子了!--归并排序

1.787. 归并排序 - AcWing题库 ① 确定分界点 mid l r >> 1 ② 递归排序 左边右边 ③ 合并有序数组 模板&#xff1a; void merge_sort(int q[], int l, int r){if(l > r) return 0;int mid l r >> 1;merge_sort(q, l ,mid), merge_sort(q, mid1, r…

数据分析三剑客-Matplotlib

数据分析三剑客 数据分析三剑客通常指的是在Python数据分析领域中&#xff0c;三个非常重要的工具和库&#xff1a;Pandas、NumPy和Matplotlib。Pandas主要负责数据处理和分析&#xff0c;NumPy专注于数值计算和数学运算&#xff0c;而Matplotlib则负责数据可视化。这三个库相…

[2024]docker-compose实战 (1)前言

前言 本文用来记录使用docker-compose来实战搭建一个多项目的测试环境. 环境中包含nodejs, php, html, redis, MongoDB, mysql. 在本次部署流程中, 尽量保证原镜像的"干净简洁", 尽量不会往镜像中加入各种软件和插件, 所有的配置尽可能的在宿主机映射进去. 项目…

【前端】IntersectionObserver 实现图片懒加载和无限滚动

【前端】IntersectionObserver 实现图片懒加载和无限滚动 在前端开发中&#xff0c;性能优化是一个重要的考量因素。随着现代网页和应用的复杂性增加&#xff0c;确保页面快速加载和流畅运行变得越来越重要。本文将介绍一种强大的工具——IntersectionObserver API&#xff0c…

软件测试面试题:Redis的五种数据结构,以及使用的场景是什么?

字符串&#xff08;Strings&#xff09;&#xff1a;简单直接&#xff0c;就像记事本一样&#xff0c;用来存储和快速访问简单的数据&#xff0c;比如缓存网页或者保存用户会话信息。 列表&#xff08;Lists&#xff09;&#xff1a;有序的数据集合&#xff0c;适合用来存储按…

油猴Safari浏览器插件:Tampermonkey for Mac 下载

Tampermonkey 是一个强大的浏览器扩展&#xff0c;用于运行用户脚本&#xff0c;这些脚本可以自定义和增强网页的功能。它允许用户在网页上执行各种自动化任务&#xff0c;比如自动填写表单、移除广告、改变页面布局等。适用浏览器&#xff1a; Tampermonkey 适用于多数主流浏览…

案例分享:数据集市搭建方案中集成SQLFlow数据血缘分析工具

本文中描述的数据集市搭建方案是一家跨国公司在AWS平台上的具体实践案例。我公司参与其中的数据血缘部分的建设&#xff0c;SQLFlow数据血缘分析工具在该方案中帮助用户实现了数据血缘分析。 用户使用Redshift 数据库仓库进行数据集市开发。从各种数据源提取数据&#xff0c;并…

openwrt 23.05.2 稳定版本 导入树莓派4B

openwrt 23.05.2 稳定版本 导入树莓派4B 强烈建议新手使用稳定版本 这里真的非常感谢这篇博客提供了大量支持&#xff0c;本文有大量篇幅抄袭。 https://blog.csdn.net/qq_44730817/article/details/135258664 编译系统&#xff08;Build system usage&#xff09; 下载源代…