基于改进的支持向量机多分类预测研究

目录

背影

支持向量机SVM的详细原理

SVM的定义

SVM理论

鲸鱼算法的原理及步骤

SVM应用实例,基于改进的支持向量机多分类预测研究

代码

结果分析

展望

背影

传统的支持向量机只能进行多分类,本文调用libsvm工具箱,并用鲸鱼算法改进参数,实现多分类

支持向量机SVM的详细原理

SVM的定义

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。

(1)支持向量机(Support Vector Machine, SVM)是一种对数据进行二分类的广义线性分类器,其分类边界是对学习样本求解的最大间隔超平面。

(2)SVM使用铰链损失函数计算经验风险并在求解系统中加入了正则化项以优化结构风险,是一个具有稀疏性和稳健性的分类器 。

(3)SVM可以通过引入核函数进行非线性分类。

SVM理论

1,线性可分性

2,损失函数

3,核函数


SVM应用实例

鲸鱼算法

鲸鱼算法( Whale Optimization Algorithm )是根据鲸鱼围捕猎物的行为而提出的算法。鲸鱼是一种群居的哺乳动物,在捕猎时它们也会相互合作对猎物进行驱赶和围捕。鲸鱼算法提出时间并不长,也是一个新兴的优化算法,研究应用案例不多。

鲸鱼算法中,每个鲸鱼的位置代表了一个可行解。在鲸鱼群捕猎过程中,每只鲸鱼有两种行为,一种是包围猎物,所有的鲸鱼都向着其他鲸鱼前进;另一种是汽包网,鲸鱼环形游动喷出气泡来驱赶猎物。在每一代的游动

鲸鱼算法的参数

SearchAgents_no=20;%种群数量

Max_iter=50;%寻优代数

lb=0.0001;

ub=100;%范围

WOA-SVM的情感分类预测MATLAB代码

clc

clear

close all

load maydata.mat

input,inputps\]=mapminmax(num1',0,1); \[output,outputns\]=mapminmax(num2',0,1); input=input'; output=output'; nn= randperm(450); % num2 = num2(nn); P_train=input(nn(1:400)😅; P_test=input(nn(401:450)😅; T_train = num2(nn(1:400)😅; T_test = num2(nn(401:450)😅; NUM=2;%寻优参数为2个,核参数与惩罚参数 \[x,\~\]=woa_lssvm(NUM,P_train,T_train,P_test,T_test); woam=x(1);woasig2=x(2);% \[alpha,b\]= trainlssvm(P_train,T_train, woam, woasig2); woa_result= simlssvm(P_test, P_train, alpha, b, woasig2); woa_result=round(woa_result) figure stem((woa_result)); hold on;grid on plot( (T_test), '\*'); legend('期望输出', '实际输出'); title('woa-svm ') hold off; \[woa_result1,mx1\] = sort(woa_result); T_test1= T_test(mx1); figure stem((woa_result1)); hold on;grid on plot( (T_test1), '\*'); legend('期望输出', '实际输出'); title('woa-svm ') hold off; mat = confusionmat(woa_result,T_test); % 各类精度 for i=1:8 disp(\['第',num2str(i),'类精度为',num2str(mat(i,i)/sum(mat(i,:)))\]) end function \[ alpha,b \]= trainlssvm(X, y, gam, sig2) \[ svmrow,svmcolum \]= size(X); KerFunction=\[\]; for i= 1:svmrow for j= 1:svmrow a= 0; for k= 1:svmcolum a=a-(X(i,k)-X(j,k))\^2; end KerFunction(i,j)= exp(a/(sig2\^2)); end end A= KerFunction; for i= 1:svmrow A(i,i)= A(i,i)+1/gam; end m= ones(svmrow,1); b= m'\*inv(A)\*y/(m'*inv(A)*m); alpha= inv(A)*(y-b*m); function yt= simlssvm(Xstar, X, alpha, b, sig2) l= size(alpha,1); \[m,n\]= size(Xstar); for i= 1:m temp= 0; for j= 1:l a=0; for k= 1:n a=a-(Xstar(i,k)-X(j,k))\^2; end temp=temp+alpha(j)\*exp(a/(sig2\^2)); % yt(i)= temp+b; end yt(i,:)=temp+b; end function \[Leader_pos,Convergence_curve\]=woa_lssvm(dim,X1,y1,Xt,yt) %% 参数设置 SearchAgents_no=20;%种群数量 Max_iter=50;%寻优代数 lb=0.0001; ub=100;%范围 %% 初始化 Leader_pos=zeros(1,dim); Leader_score=inf; for i=1:SearchAgents_no Positions(i,:)=rand(1,dim).*(ub-lb)+lb; end Convergence_curve=zeros(1,Max_iter); %% 主循环 for t=1:Max_iter a=2-t* ((2)/Max_iter); a2=-1+t\*((-1)/Max_iter); for i=1:size(Positions,1) r1=rand(); r2=rand(); A=2*a* r1-a; C=2*r2; b=1; l=(a2-1)*rand+1; p = rand(); for j=1:size(Positions,2) if p\<0.5 if abs(A)\>=1 rand_leader_index = floor(SearchAgents_no* rand()+1); X_rand = Positions(rand_leader_index, 😃; D_X_rand=abs(C* X_rand(j)-Positions(i,j)); Positions(i,j)=X_rand(j)-A*D_X_rand; elseif abs(A)\<1 D_Leader=abs(C* Leader_pos(j)-Positions(i,j)); Positions(i,j)=Leader_pos(j)-A*D_Leader; end elseif p\>=0.5 distance2Leader=abs(Leader_pos(j)-Positions(i,j)); Positions(i,j)=distance2Leader* exp(b.\*l).\*cos(l.*2* pi)+Leader_pos(j); end end Positions(i,:)=boundary(Positions(i,:),lb,ub); fit=fitness(Positions(i,:),X1,y1,Xt,yt); % 更新 if fit\

相关推荐
夏日听雨眠2 小时前
linux(线程,线程同步 方法 互斥锁 信号量 条件变量 )
linux·运维·算法
阿Y加油吧2 小时前
两道经典算法题复盘:最长有效括号 & 不同路径
算法
晚风叙码2 小时前
一文吃透二叉树:前中后序遍历+节点数+树高+叶子节点(含完整源码)
数据结构·算法
迦南的迦 亚索的索2 小时前
机器学习_05_k-means算法
算法·机器学习·kmeans
happymaker06262 小时前
LeetCodeHot100——1.两数之和(详细解答)
java·数据结构·学习·算法
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题 第60题】【JVM篇】第20题:垃圾收集算法和垃圾收集器有什么区别?
java·jvm·算法·面试
@ray3212 小时前
LeetCode Hot 100 — C++ 题解
c++·算法·leetcode
大模型最新论文速读2 小时前
利用异步编程的 future 思想,让 LLM Agent 快 1.44 倍
人工智能·深度学习·算法·机器学习·自然语言处理
Bingorl2 小时前
机器学习之线性回归算法
算法·机器学习·线性回归