【优化算法】孪生支持向量机(TWSVM)【含Matlab源码 1257期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【优化算法】孪生支持向量机(TWSVM)【含Matlab源码 1257期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、孪生支持向量机(TWSVM)简介
对于一个标准的支持向量分类问题,其基本思想就是在正负两类样本之间寻求一个最优超平面。在支持向量机中,通过求解一个二次规划问题可获得两个平行的超平面,而 SVM 的最优超平面可以通过最大化两个平行超平面之间的距离获得,SVM 的分类示意图如图 4-1 所示。
孪生支持向量机(Twin support vector machines,TWSVM)是在传统支持向量机基础上发展起来的一种新的机器学习方法。TWSVM 与 SVM 根本区别在于 TWSVM 通过解决两组小型二次规划(Quadratic programming,QP)解决二分类问题,而 SVM 则通过求解一组大型 QP 解决所有的分类问题,因此 TWSVM 的工作速度比标准 SVM 快 4 倍。
三、部分源代码
% 线性孪生支持向量机二类分类算法close all
clear
clc
%--------------导入数据-------------------%
load N_p % 正类点数据,特征信息存放在行里面
load N_n % 负类点数据,特征信息存放在行里面
%-----------------------------------------%%% 第一步:数据预处理
%-------- 由原来的数据产生80%的训练数据和20%的预测数据------------%
n_p=size(N_p,1); % 正类样本个数
n_n=size(N_n,1); % 负类样本个数
n1=randperm(n_p); % 对1到n的n个正整数进行随机不重复的排列,形成一个1行n列的矩阵
n2=randperm(n_n);
f_p=floor(4*n_p/5); % 取80%的数据作为训练集,其余20%作为预测集
f_n=floor(4*n_n/5);
data_train_p=N_p(n1(1:f_p),:); % 正类训练数据
data_train_n=N_n(n2(1:f_n),:); % 负类训练数据
data_train=[data_train_p;data_train_n]; % 训练数据集(含正负类)
Y_train=[ones(f_p,1);-ones(f_n,1)]; % 训练数据标签集 data_predict_p=N_p(n1(f_p+1:end),:); % 正类预测数据
data_predict_n=N_n(n2(f_n+1:end),:); % 负类预测数据
data_predict=[data_predict_p;data_predict_n]; % 预测数据集(含正负类)
Y_predict=[ones(n_p-f_p,1);-ones(n_n-f_n,1)]; % 预测数据标签集
%----------------------------------------------------------------%
%----------相关参数初始化----------%c1min=-2; c1max=2; %孪生支持向量机参数
c2min=-2; c2max=2;
best_c1=0; best_c2=0;
aac=rand(10,1);
bestAccuracy=0;
%--------------------------------%%% 第二步:数据训练寻找最优参数c1,c2
% 将c1和c2划分网格进行搜索
indices = crossvalind('Kfold',Y_train,10);
tic;
for c1=2^(c1min):1:2^(c1max)for c2=2^(c2min):1:2^(c2max)%采用K-CV方法,将data大致平均分为K组for run= 1:10test=(indices == run); train=~test; train_data=data_train(train,:); % 训练数据集(含正类负类点集) train_data_label=Y_train(train,:); % 训练集标签(含正类负类点集) test_data=data_train(test,:); % 预测数据集(含正类负类点集) test_data_label=Y_train(test,:); % 预测集标签(含正类负类点集) groupA=ismember(train_data_label,1); % 分出正类点的位置 groupB=ismember(train_data_label,-1); % 分出负类点的位置 A=train_data(groupA,:); % 正类训练数据 B=train_data(groupB,:); % 负类训练数据 %训练数据[v1,v2]=twinsvm_lin_train(A,B,c1,c2); %用训练所得孪生分类器进行分类[accuracy]=twinsvm_lin_predict(v1,v2,test_data,test_data_label);%下面用验证集进行验证,并记录此时的准确率acc(run)=accuracy;endcv=sum(aac)/10;if (cv>bestAccuracy)bestAccuracy=cv;best_c1=c1;best_c2=c2;end end
end
disp('准确率及最优参数');
str = sprintf( 'Best Cross Validation Accuracy = %g%% ;Best c1 = %g ; Best c2 = %g;',bestAccuracy*100,best_c1,best_c2);
disp(str);
t_train=toc%---------------------------------------------------------------------%%% 第三步:通过最优参数,对80%的数据训练,产生分类面,利用20%的预测数据进行准确率计算
k=0;
c1=best_c1;
c2=best_c2;tic;
[v1,v2,IB,JA]=twinsvm_lin_train(data_train_p,data_train_n,c1,c2);
[aac]=twinsvm_lin_predict(v1,v2,data_predict,Y_predict);
t_predict=toc
disp('预测准确率结果');
str = sprintf( 'Accuracy =%g%% ',aac*100);
disp(str);%% 第四步:绘图
tic;
% -------------绘制训练点----------------%
plot(data_train_p(:,1),data_train_p(:,2),'c+',data_train_n(:,1),data_train_n(:,2),'mx');
title('线性孪生支持向量机')
hold on
grid on
% ------------绘制预测点-----------------%
plot(data_predict_p(1,:),data_predict_p(2,:),'g>',data_predict_n(1,:),data_predict_n(2,:),'r<');
% -----------绘制支持向量----------------%
plot(data_train_n(IB,1),data_train_n(IB,2),'ko',data_train_p(JA,1),data_train_p(JA,2),'ko'); %??????
% ---------绘制分类面的图像--------------%
plotpc(v1(1:2,:)',v1(3))
plotpc(v2(1:2,:)',v2(3))
legend('正类训练点','负类训练点','正类预测点','负类预测点','支持向量');
t_picture=toc
hold off
%% 双支持向量分类机训练函数
function [v1,v2,IB,JA]=twinsvm_lin_train(A,B,c1,c2)
%%OUTPUT: 线性孪生支持向量机的训练函数
% IB、JA分别是用来寻找支持向量所对应的下标
%%INPUT: A、B分别为正类训练数据和负类训练数据
% c1、c2是孪生支持向量机中参数
lower=1e-5;
q=size(A,1);S=size(B,1);
e1=ones(q,1);e2=ones(S,1); % 计算H,G
H=[A,e1];
G=[B,e2];
Q=G*inv(H'*H+0.05*eye(size(H'*H,1)))*G'; % S*S
Q1=inv(H'*H+0.05*eye(size(H'*H,1)))*G'; % l1*S
% 产生矩阵f
f=-e2;
% 变量限制% 产生初始点x0
x0=zeros(S,1);
% 求最优解x
[x,fval,exitflag]=quadprog(Q,f,[],[],[],[],lb,ub,x0);
v1=-Q1*x;
% 根据孪生支持向量机的要求,寻找支持向量下标(B类数据的下标)
[m,n]=size(x);
IB=rand(m,n);
run=max(m,n);
for i=1:runif (x(i)>lower&&x(i)<c1)IB(i)=1;elseIB(i)=0;end
end
IB=find(IB>0);% 计算H,G
G=[A,e1];
H=[B,e2];
Q=G*inv(H'*H+0.05*eye(size(H'*H,1)))*G';
Q1=inv(H'*H+0.05*eye(size(H'*H,1)))*G';
% 产生矩阵f
f=-e1;
% 变量限制
lb=zeros(q,1);
ub=c2*ones(q,1);
% 产生初始点x0
x0=zeros(q,1);
% 求最优解x
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.
【优化算法】孪生支持向量机(TWSVM)【含Matlab源码 1257期】相关推荐
- 【ELM分类】基于matlab遗传算法优化ELM神经网络数据分类【含Matlab源码 2138期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[ELM分类]基于matlab遗传算法优化ELM神经网络数据分类[含Matlab源码 2138期] 点击上面蓝色字体,直接付费下载,即可. ...
- 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...
- 【图像重建】基于matlab布雷格曼迭代算法集合ART算法CT图像重建【含Matlab源码 1905期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像重建]基于matlab布雷格曼迭代算法集合ART算法CT图像重建[含Matlab源码 1905期] 获取代码方式2: 通过订阅紫极神光 ...
- 【AFSA TSP】基于matlab人工鱼群算法求解旅行商问题【含Matlab源码 422期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab人工鱼群算法求解旅行商问题[含Matlab源码 422期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...
- 【BA TSP】基于matlab蜜蜂算法求解旅行商问题【含matlab源码 1248期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蜜蜂算法求解旅行商问题[含matlab源码 1248期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...
- 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...
- 【LSSVM分类】基于matlab遗传算法优化LSSVM烟叶识别【含Matlab源码 1944期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[ELM分类]基于matlab鲸鱼算法优化核极限学习机数据分类[含Matlab源码 2012期] 获取代码方式2: 付费专栏Matlab智 ...
- 【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】
⛄一.粒子群算法简介 1 标准粒子群优化(PSO)算法 PSO算法根据对环境的适应度将群体中的个体移动到好的区域,将每个个体看作是D维搜索空间中的一个粒子,根据粒子本身的飞行经验和群体中其他同伴的飞行 ...
- 【优化求解】基于matlab蚁群算法配电网故障定位【含Matlab源码 165期】
⛄一.蚁群算法简介 1 引言 在自然界中各种生物群体显现出来的智能近几十年来得到了学者们的广泛关注,学者们通过对简单生物体的群体行为进行模拟,进而提出了群智能算法.其中, 模拟蚁群觅食过程的蚁群优化算 ...
- 【LSSVM数据预测】基于matlab灰狼算法优化LSSVM数据预测【含Matlab源码 433期】
⛄一.灰狼算法优化LSSVM简介 灰狼优化算法是一种新型的群体智能优化算法,它是通过模拟狼群的种群地位.跟踪猎物.包围猎物和攻击猎物而设计出来的.假设搜索空间是D维,那么第k个个体的位置可以表示为xk ...
最新文章
- druid连接池配置数据库密码加密
- 配置集群Nginx+Memcached+Tomcat集群配置
- 首先记录异常的根本原因
- 解决 error: Your local changes to the following files would be overwritten by merge:XXXX
- object htmldivelement什么意思_深入探究 Function amp; Object 鸡蛋问题
- 图像处理-二值形态学运算
- 华为云ROMA,联接企业应用的现在与未来
- linux scp命令_太麻烦!使用 Linux scp 命令下载文件到 Windows 桌面
- 分析arm linux启动打印信息
- java 异常捕捉 ( try catch finally ) 清晰解释
- (一)数据挖掘概念与技术——韩家炜
- 通过Cadence学拉扎维的第2天-mos的IV曲线、体效应
- iOS录音方法实用详解(配Demo下载)
- maya中英文对照_求玛雅的全部中英文对照
- 江苏高考时间2021成绩查询,小高考时间2021具体时间江苏-江苏小高考成绩查询公布时间及网站...
- 梦幻西游手游经验任务链计算机,梦幻西游手游任务链技巧攻略详解
- 【Spring常见错误】java.lang.NoClassDefFoundError: redis/clients/jedis/UnifiedJedis
- 解密:LL与LR解析 1(译)
- Python 在windows上跑图色脚本?简单又好玩,自己编写一个自动化脚本
- 读书笔记17 《靠谱》大石哲之