matlab30个案例分析案例12-SVM神经网络的数据分类预测

合集下载

Matlab神经网络30个案例第1案例代码

Matlab神经网络30个案例第1案例代码

Matlab神经网络30个案例第1案例代码%% 清空环境变量clcclear%% 训练数据预测数据提取及归一化%下载四类语音信号load data1 c1load data2 c2load data3 c3load data4 c4%四个特征信号矩阵合成一个矩阵data(1:500,:)=c1(1:500,:);data(501:1000,:)=c2(1:500,:);data(1001:1500,:)=c3(1:500,:);data(1501:2000,:)=c4(1:500,:);%从1到2000间随机排序k=rand(1,2000);[m,n]=sort(k);%输入输出数据input=data(:,2:25);output1 =data(:,1);%把输出从1维变成4维for i=1:2000switch output1(i)case 1output(i,:)=[1 0 0 0];case 2output(i,:)=[0 1 0 0];case 3output(i,:)=[0 0 1 0];case 4output(i,:)=[0 0 0 1];endend%随机提取1500个样本为训练样本,500个样本为预测样本input_train=input(n(1:1500),:)';output_train=output(n(1:1500),:)';input_test=input(n(1501:2000),:)';output_test=output(n(1501:2000),:)';%输入数据归一化[inputn,inputps]=mapminmax(input_train);%% 网络结构初始化innum=24;midnum=25;outnum=4;%权值初始化w1=rands(midnum,innum);b1=rands(midnum,1);w2=rands(midnum,outnum);b2=rands(outnum,1);w2_1=w2;w2_2=w2_1;w1_1=w1;w1_2=w1_1;b1_1=b1;b1_2=b1_1;b2_1=b2;b2_2=b2_1;%学习率xite=0.1alfa=0.01;%% 网络训练for ii=1:10E(ii)=0;for i=1:1:1500%% 网络预测输出x=inputn(:,i);% 隐含层输出for j=1:1:midnumI(j)=inputn(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));end% 输出层输出yn=w2'*Iout'+b2;%% 权值阀值修正%计算误差e=output_train(:,i)-yn;E(ii)=E(ii)+sum(abs(e));%计算权值变化率dw2=e*Iout;db2=e';for j=1:1:midnumS=1/(1+exp(-I(j)));FI(j)=S*(1-S);endfor k=1:1:innumfor j=1:1:midnumdw1(k,j)=FI(j)*x(k)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+ e(4)*w2(j,4));db1(j)=FI(j)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w 2(j,4));endendw1=w1_1+xite*dw1';b1=b1_1+xite*db1';w2=w2_1+xite*dw2';b2=b2_1+xite*db2';w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;endend%% 语音特征信号分类inputn_test=mapminmax('apply',input_test,inputps); for ii=1:1for i=1:500%1500%隐含层输出for j=1:1:midnumI(j)=inputn_test(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));endfore(:,i)=w2'*Iout'+b2;endend%% 结果分析%根据网络输出找出数据属于哪类for i=1:500output_fore(i)=find(fore(:,i)==max(fore(:,i))); end%BP网络预测误差error=output_fore-output1(n(1501:2000))';%画出预测语音种类和实际语音种类的分类图figure(1) plot(output_fore,'r')hold onplot(output1(n(1501:2000))','b') legend('预测语音类别','实际语音类别') %画出误差图figure(2)plot(error)title('BP网络分类误差','fontsize',12) xlabel('语音信号','fontsize',12) ylabel('分类误差','fontsize',12)%print -dtiff -r600 1-4k=zeros(1,4);%找出判断错误的分类属于哪一类for i=1:500if error(i)~=0[b,c]=max(output_test(:,i));switch ccase 1k(1)=k(1)+1;。

MATLAB-智能算法30个案例分析【精品文档】(完整版)

MATLAB-智能算法30个案例分析【精品文档】(完整版)

MATLAB 智能算法30个案例分析(终极版)1 基于遗传算法的TSP算法(王辉)2 基于遗传算法和非线性规划的函数寻优算法(史峰)3 基于遗传算法的BP神经网络优化算法(王辉)4 设菲尔德大学的MATLAB遗传算法工具箱(王辉)5 基于遗传算法的LQR控制优化算法(胡斐)6 遗传算法工具箱详解及应用(胡斐)7 多种群遗传算法的函数优化算法(王辉)8 基于量子遗传算法的函数寻优算法(王辉)9 多目标Pareto最优解搜索算法(胡斐)10 基于多目标Pareto的二维背包搜索算法(史峰)11 基于免疫算法的柔性车间调度算法(史峰)12 基于免疫算法的运输中心规划算法(史峰)13 基于粒子群算法的函数寻优算法(史峰)14 基于粒子群算法的PID控制优化算法(史峰)15 基于混合粒子群算法的TSP寻优算法(史峰)16 基于动态粒子群算法的动态环境寻优算法(史峰)17 粒子群算法工具箱(史峰)18 基于鱼群算法的函数寻优算法(王辉)19 基于模拟退火算法的TSP算法(王辉)20 基于遗传模拟退火算法的聚类算法(王辉)21 基于模拟退火算法的HEV能量管理策略参数优化(胡斐)22 蚁群算法的优化计算——旅行商问题(TSP)优化(郁磊)23 基于蚁群算法的二维路径规划算法(史峰)24 基于蚁群算法的三维路径规划算法(史峰)25 有导师学习神经网络的回归拟合——基于近红外光谱的汽油辛烷值预测(郁磊)26 有导师学习神经网络的分类——鸢尾花种类识别(郁磊)27 无导师学习神经网络的分类——矿井突水水源判别(郁磊)28 支持向量机的分类——基于乳腺组织电阻抗特性的乳腺癌诊断(郁磊)29 支持向量机的回归拟合——混凝土抗压强度预测(郁磊)30 极限学习机的回归拟合及分类——对比实验研究(郁磊)智能算法是我们在学习中经常遇到的算法,主要包括遗传算法,免疫算法,粒子群算法,神经网络等,智能算法对于很多人来说,既爱又恨,爱是因为熟练的掌握几种智能算法,能够很方便的解决我们的论坛问题,恨是因为智能算法感觉比较“玄乎”,很难理解,更难用它来解决问题。

matlab30个案例分析案例14-SVM神经网络的回归预测分析

matlab30个案例分析案例14-SVM神经网络的回归预测分析

%% SVM神经网络的回归预测分析---上证指数开盘指数预测%%% 清空环境变量function chapter14tic;close all;clear;clc;format compact;%% 数据的提取和预处理% 载入测试数据上证指数(1990.12.19-2009.08.19)% 数据是一个4579*6的double型的矩阵,每一行表示每一天的上证指数% 6列分别表示当天上证指数的开盘指数,指数最高值,指数最低值,收盘指数,当日交易量,当日交易额.load chapter14_sh.mat;% 提取数据[m,n] = size(sh);ts = sh(2:m,1);tsx = sh(1:m-1,:);% 画出原始上证指数的每日开盘数figure;plot(ts,'LineWidth',2);title('上证指数的每日开盘数(1990.12.20-2009.08.19)','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('开盘数','FontSize',12);grid on;% 数据预处理,将原始数据进行归一化ts = ts';tsx = tsx';% mapminmax为matlab自带的映射函数% 对ts进行归一化[TS,TSps] = mapminmax(ts,1,2);% 画出原始上证指数的每日开盘数归一化后的图像figure;plot(TS,'LineWidth',2);title('原始上证指数的每日开盘数归一化后的图像','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('归一化后的开盘数','FontSize',12);grid on;% 对TS进行转置,以符合libsvm工具箱的数据格式要求TS = TS';% mapminmax为matlab自带的映射函数% 对tsx进行归一化[TSX,TSXps] = mapminmax(tsx,1,2);% 对TSX进行转置,以符合libsvm工具箱的数据格式要求TSX = TSX';%% 选择回归预测分析最佳的SVM参数c&g% 首先进行粗略选择:[bestmse,bestc,bestg] = SVMcgForRegress(TS,TSX,-8,8,-8,8);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg); disp(str);% 根据粗略选择的结果图再进行精细选择:[bestmse,bestc,bestg] = SVMcgForRegress(TS,TSX,-4,4,-4,4,3,0.5,0.5,0.05);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg); disp(str);%% 利用回归预测分析最佳的参数进行SVM网络训练cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.01'];model = svmtrain(TS,TSX,cmd);%% SVM网络回归预测[predict,mse] = svmpredict(TS,TSX,model);predict = mapminmax('reverse',predict',TSps);predict = predict';% 打印回归结果str = sprintf( '均方误差MSE = %g 相关系数R = %g%%',mse(2),mse(3)*100);disp(str);%% 结果分析figure;hold on;plot(ts,'-o');plot(predict,'r-^');legend('原始数据','回归预测数据');hold off;title('原始数据和回归预测数据对比','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('开盘数','FontSize',12);grid on;figure;error = predict - ts';plot(error,'rd');title('误差图(predicted data - original data)','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('误差量','FontSize',12);grid on;figure;error = (predict - ts')./ts';plot(error,'rd');title('相对误差图(predicted data - original data)/original data','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('相对误差量','FontSize',12);grid on;snapnow;toc;%% 子函数SVMcgForRegress.mfunction [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)%SVMcg cross validation by faruto%% by faruto%Email:patrick.lee@ QQ:516667408 /faruto BNU%last modified 2010.01.17%Super Moderator @ % 若转载请注明:% faruto and liyang , LIBSVM-farutoUltimateVersion% a toolbox with implements for support vector machines based on libsvm, 2009.% Software available at %% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for% support vector machines, 2001. Software available at% .tw/~cjlin/libsvm% about the parameters of SVMcgif nargin < 10msestep = 0.06;endif nargin < 8cstep = 0.8;gstep = 0.8;endif nargin < 7v = 5;endif nargin < 5gmax = 8;gmin = -8;endif nargin < 3cmax = 8;cmin = -8;end% X:c Y:g cg:acc[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);[m,n] = size(X);cg = zeros(m,n);eps = 10^(-4);bestc = 0;bestg = 0;mse = Inf;basenum = 2;for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) ),' -s 3 -p 0.1'];cg(i,j) = svmtrain(train_label, train, cmd);if cg(i,j) < msemse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endif abs( cg(i,j)-mse )<=eps && bestc > basenum^X(i,j)mse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endendend% to draw the acc with different c & g[cg,ps] = mapminmax(cg,0,1);figure;[C,h] = contour(X,Y,cg,0:msestep:0.5);clabel(C,h,'FontSize',10,'Color','r');xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);firstline = 'SVR参数选择结果图(等高线图)[GridSearchMethod]'; secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...' CVmse=',num2str(mse)];title({firstline;secondline},'Fontsize',12);grid on;figure;meshc(X,Y,cg);% mesh(X,Y,cg);% surf(X,Y,cg);axis([cmin,cmax,gmin,gmax,0,1]);xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);zlabel('MSE','FontSize',12);firstline = 'SVR参数选择结果图(3D视图)[GridSearchMethod]'; secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...' CVmse=',num2str(mse)];title({firstline;secondline},'Fontsize',12);。

SVM神经网络的数据分类预测-意大利葡萄酒种类识别

SVM神经网络的数据分类预测-意大利葡萄酒种类识别

案例背景:
SVM神经网络背景:
SVM的相关理论及工具箱的介绍
......
案例背景:
在葡萄酒制造业中,对于葡萄酒的分类具有很大意义,因为这涉及到不同种类的葡萄酒的存放以及出售价格,采用SVM做为分类器可以有效预测相关葡萄酒的种类,从UCI数据库中得到wine数据记录的是在意大利某一地区同一区域上三种不同品种的葡萄酒的化学成分分析,数据里含有178个样本分别属于三个类别(类别标签已给),每个样本含有13个特征分量(化学成分),将这178个样本50%做为训练样本,另50%做为测试样本,用训练样本对SVM分类器进行训练,用得到的模型对测试样本的进行分类标签预测,最终得到96.6292%的分类准确率. .....
测试数据的可视化图:
模型建立:
Matlab程序实现(预定此书,即可下载该案例完整程序):
该处有完整的Matlab程序代码,以及代码的详细说明•清空环境变量
•数据的提取和预处理
•SVM网络训练
•SVM网络分类预测
•结果分析
结果分析:
该处有详细的运行结果。

svm分类 案例

svm分类 案例

svm分类案例
支持向量机(SVM)是一种强大的分类工具,在许多领域都有广泛的应用。

以下是一个使用SVM进行分类的案例:
案例背景:
假设我们正在处理一个二分类问题,其中有两个类别分别为正面和负面。

我们有一组数据,其中每个数据点都有一些特征,例如年龄、收入、教育程度等。

我们的目标是使用这些特征来预测每个数据点属于哪个类别。

案例步骤:
1. 数据预处理:首先,我们需要对数据进行预处理,包括缺失值填充、异常值处理、特征缩放等。

在这个案例中,我们假设数据已经进行了适当的预处理。

2. 特征选择:接下来,我们需要选择合适的特征来训练SVM分类器。

在这个案例中,我们选择年龄、收入和教育程度作为特征。

3. 训练SVM分类器:使用选择的特征和训练数据集,我们可以训练一个SVM分类器。

在训练过程中,SVM会找到一个超平面,使得两个类别的数据点尽可能分开。

4. 测试SVM分类器:使用测试数据集,我们可以评估SVM分类器的性能。

常见的评估指标包括准确率、精确率、召回率和F1分数等。

5. 优化SVM分类器:如果测试结果不理想,我们可以尝试调整SVM的参
数或使用其他优化方法来提高分类器的性能。

案例总结:
通过这个案例,我们可以看到SVM是一种强大的分类工具,可以用于处理
各种分类问题。

在实际应用中,我们需要注意数据预处理、特征选择和参数调整等方面,以确保分类器的性能和准确性。

MATLAB智能算法30个案例分析

MATLAB智能算法30个案例分析

MATLAB 智能算法30个案例分析第 1章1、案例背景遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。

遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。

在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。

基因组成的串就是染色体,或者叫基因型个体( Individuals)。

一定数量的个体组成了群体(Population)。

群体中个体的数目称为群体大小(Population Size),也叫群体规模。

而各个个体对环境的适应程度叫做适应度( Fitness)。

2、案例目录:1.1理论基础1.1.1遗传算法概述1.编码2.初始群体的生成3.适应度评估4.选择5.交叉6.变异1.1.2设菲尔德遗传算法工具箱1.工具箱简介2.工具箱添加1.2案例背景1.2.1问题描述1.简单一元函数优化2.多元函数优化1.2.2解决思路及步骤1.3 MATLAB程序实现1.3.1工具箱结构1.3.2遗传算法中常用函数1.创建种群函数—crtbp2.适应度计算函数—ranking3.选择函数—select4.交叉算子函数—recombin5.变异算子函数—mut6.选择函数—reins7.实用函数—bs2rv8.实用函数—rep1.3.3遗传算法工具箱应用举例1.简单一元函数优化2.多元函数优化1.4延伸阅读1.5参考文献3、主程序:1.简单一元函数优化:clcclear allclose all%%画出函数图figure(1);hold on;lb=1;ub=2; %函数自变量范围【1,2】ezplot('sin(10*pi*X)/X',[lb,ub]); %画出函数曲线xlabel('自变量/X')ylabel('函数值/Y')%%定义遗传算法参数NIND=40; %个体数目MAXGEN=20; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0.95; %代沟px=0.7; %交叉概率pm=0.01; %变异概率trace=zeros(2,MAXGEN); %寻优结果的初始值FieldD=[PRECI;lb;ub;1;0;1;1]; %区域描述器Chrom=crtbp(NIND,PRECI); %初始种群%%优化gen=0; %代计数器X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换ObjV=sin(10*pi*X)./X; %计算目标函数值while gen<MAXGENFitnV=ranking(ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异X=bs2rv(SelCh,FieldD); %子代个体的十进制转换ObjVSel=sin(10*pi*X)./X; %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群X=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=min(ObjV);trace(1,gen)=X(I); %记下每代的最优值trace(2,gen)=Y; %记下每代的最优值endplot(trace(1,:),trace(2,:),'bo'); %画出每代的最优点grid on;plot(X,ObjV,'b*'); %画出最后一代的种群hold off%%画进化图figure(2);plot(1:MAXGEN,trace(2,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestY=trace(2,end);bestX=trace(1,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])2.多元函数优化clcclear allclose all%%画出函数图figure(1);lbx=-2;ubx=2; %函数自变量 x范围【-2,2】lby=-2;uby=2; %函数自变量 y范围【-2,2】ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50); %画出函数曲线hold on;%%定义遗传算法参数NIND=40; %个体数目MAXGEN=50; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0.95; %代沟px=0.7; %交叉概率pm=0.01; %变异概率trace=zeros(3,MAXGEN); %寻优结果的初始值FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器Chrom=crtbp(NIND,PRECI*2); %初始种群%%优化gen=0; %代计数器XY=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换X=XY(:,1);Y=XY(:,2);ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y); %计算目标函数值while gen<MAXGENFitnV=ranking(-ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异XY=bs2rv(SelCh,FieldD); %子代个体的十进制转换X=XY(:,1);Y=XY(:,2);ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y); %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群XY=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=max(ObjV);trace(1:2,gen)=XY(I,:); %记下每代的最优值trace(3,gen)=Y; %记下每代的最优值endplot3(trace(1,:),trace(2,:),trace(3,:),'bo'); %画出每代的最优点grid on;plot3(XY(:,1),XY(:,2),ObjV,'bo'); %画出最后一代的种群hold off%%画进化图figure(2);plot(1:MAXGEN,trace(3,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestZ=trace(3,end);bestX=trace(1,end);bestY=trace(2,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ), '\n'])第 2章基于遗传算法和非线性规划的函数寻优算法1.1案例背景1.1.1非线性规划方法非线性规划是 20世纪 50年代才开始形成的一门新兴学科。

matlab智能算法30个案例分析

matlab智能算法30个案例分析

matlab智能算法30个案例分析Matlab智能算法30个案例分析。

Matlab作为一种强大的数学软件,拥有丰富的算法库和强大的编程能力,能够实现各种复杂的智能算法。

本文将针对Matlab智能算法进行30个案例分析,帮助读者深入了解Matlab在智能算法领域的应用和实践。

1. 遗传算法。

遗传算法是一种模拟自然选择和遗传机制的优化算法,能够有效解决复杂的优化问题。

在Matlab中,可以利用遗传算法工具箱快速实现各种优化问题的求解,例如函数最小化、参数优化等。

2. 神经网络。

神经网络是一种模拟人脑神经元网络的计算模型,能够实现复杂的非线性映射和模式识别。

Matlab提供了丰富的神经网络工具箱,可以用于神经网络的建模、训练和应用,例如分类、回归、聚类等任务。

3. 模糊逻辑。

模糊逻辑是一种处理不确定性和模糊信息的逻辑推理方法,能够有效处理模糊规则和模糊数据。

Matlab中的模糊逻辑工具箱提供了丰富的模糊推理方法和工具,可以用于模糊控制、模糊识别等领域。

4. 粒子群算法。

粒子群算法是一种模拟鸟群觅食行为的优化算法,能够有效处理多维优化问题。

在Matlab中,可以利用粒子群算法工具箱快速实现各种优化问题的求解,例如函数最小化、参数优化等。

5. 蚁群算法。

蚁群算法是一种模拟蚂蚁觅食行为的优化算法,能够有效处理离散优化问题和组合优化问题。

Matlab中的蚁群算法工具箱提供了丰富的蚁群优化方法和工具,可以用于解决各种组合优化问题。

6. 遗传规划算法。

遗传规划算法是一种结合遗传算法和规划算法的优化方法,能够有效处理复杂的规划问题。

在Matlab中,可以利用遗传规划算法工具箱快速实现各种规划问题的求解,例如路径规划、资源分配等。

7. 人工免疫算法。

人工免疫算法是一种模拟免疫系统的优化算法,能够有效处理多峰优化问题和动态优化问题。

在Matlab中,可以利用人工免疫算法工具箱快速实现各种复杂的优化问题的求解。

8. 蜂群算法。

matlab30个案例分析案例13-SVM神经网络中的参数优化

matlab30个案例分析案例13-SVM神经网络中的参数优化

%% SVM神经网络中的参数优化---如何更好的提升分类器的性能%% 清空环境变量function chapter13_GAclose all;clear;clc;format compact;%% 数据提取% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量load chapter13_wine.mat;% 画出测试数据的box可视化图figure;boxplot(wine,'orientation','horizontal','labels',categories);title('wine数据的box可视化图','FontSize',12);xlabel('属性值','FontSize',12);grid on;% 画出测试数据的分维可视化图figuresubplot(3,5,1);hold onfor run = 1:178plot(run,wine_labels(run),'*');endxlabel('样本','FontSize',10);ylabel('类别标签','FontSize',10);title('class','FontSize',10);for run = 2:14subplot(3,5,run);hold on;str = ['attrib ',num2str(run-1)];for i = 1:178plot(i,wine(i,run-1),'*');endxlabel('样本','FontSize',10);ylabel('属性值','FontSize',10);title(str,'FontSize',10);end% 选定训练集和测试集% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];% 相应的训练集的标签也要分离出来train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];% 相应的测试集的标签也要分离出来test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];%% 数据预处理% 数据预处理,将训练集和测试集归一化到[0,1]区间[mtrain,ntrain] = size(train_wine);[mtest,ntest] = size(test_wine);dataset = [train_wine;test_wine];% mapminmax为MATLAB自带的归一化函数[dataset_scale,ps] = mapminmax(dataset',0,1);dataset_scale = dataset_scale';train_wine = dataset_scale(1:mtrain,:);test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );%% 选择GA最佳的SVM参数c&g% GA的参数选项初始化ga_option.maxgen = 200;ga_option.sizepop = 20;ga_option.cbound = [0,100];ga_option.gbound = [0,100];ga_option.v = 5;ga_option.ggap = 0.9;[bestacc,bestc,bestg] = gaSVMcgForClass(train_wine_labels,train_wine,ga_option);% 打印选择结果disp('打印选择结果');str = sprintf( 'Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g',bestacc,bestc,bestg);disp(str);%% 利用最佳的参数进行SVM网络训练cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];model = svmtrain(train_wine_labels,train_wine,cmd);%% SVM网络预测[predict_label,accuracy] = svmpredict(test_wine_labels,test_wine,model);% 打印测试集分类准确率total = length(test_wine_labels);right = sum(predict_label == test_wine_labels);disp('打印测试集分类准确率');str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total);disp(str);%% 结果分析% 测试集的实际分类和预测分类图figure;hold on;plot(test_wine_labels,'o');plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');title('测试集的实际分类和预测分类图','FontSize',12);grid on;snapnow;%% 子函数gaSVMcgForClass.mfunction [BestCVaccuracy,Bestc,Bestg,ga_option] = gaSVMcgForClass(train_label,train_data,ga_option)% gaSVMcgForClass%% by faruto%Email:patrick.lee@ QQ:516667408 /faruto BNU%last modified 2010.01.17%Super Moderator @ % 若转载请注明:% faruto and liyang , LIBSVM-farutoUltimateVersion% a toolbox with implements for support vector machines based on libsvm, 2009.% Software available at %% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for% support vector machines, 2001. Software available at% .tw/~cjlin/libsvm% 参数初始化if nargin == 2ga_option = struct('maxgen',200,'sizepop',20,'ggap',0.9,...'cbound',[0,100],'gbound',[0,1000],'v',5);end% maxgen:最大的进化代数,默认为200,一般取值范围为[100,500]% sizepop:种群最大数量,默认为20,一般取值范围为[20,100]% cbound = [cmin,cmax],参数c的变化范围,默认为(0,100]% gbound = [gmin,gmax],参数g的变化范围,默认为[0,1000]% v:SVM Cross Validation参数,默认为5%MAXGEN = ga_option.maxgen;NIND = ga_option.sizepop;NVAR = 2;PRECI = 20;GGAP = ga_option.ggap;trace = zeros(MAXGEN,2);FieldID = ...[rep([PRECI],[1,NVAR]);[ga_option.cbound(1),ga_option.gbound(1);ga_option.cbound(2),ga_opti on.gbound(2)]; ...[1,1;0,0;0,1;1,1]];Chrom = crtbp(NIND,NVAR*PRECI);gen = 1;v = ga_option.v;BestCVaccuracy = 0;Bestc = 0;Bestg = 0;%cg = bs2rv(Chrom,FieldID);for nind = 1:NINDcmd = ['-v ',num2str(v),' -c ',num2str(cg(nind,1)),' -g ',num2str(cg(nind,2))];ObjV(nind,1) = svmtrain(train_label,train_data,cmd);end[BestCVaccuracy,I] = max(ObjV);Bestc = cg(I,1);Bestg = cg(I,2);for gen = 1:MAXGENFitnV = ranking(-ObjV);SelCh = select('sus',Chrom,FitnV,GGAP);SelCh = recombin('xovsp',SelCh,0.7);SelCh = mut(SelCh);cg = bs2rv(SelCh,FieldID);for nind = 1:size(SelCh,1)cmd = ['-v ',num2str(v),' -c ',num2str(cg(nind,1)),' -g ',num2str(cg(nind,2))];ObjVSel(nind,1) = svmtrain(train_label,train_data,cmd);end[Chrom,ObjV] = reins(Chrom,SelCh,1,1,ObjV,ObjVSel);if max(ObjV) <= 50continue;end[NewBestCVaccuracy,I] = max(ObjV);cg_temp = bs2rv(Chrom,FieldID);temp_NewBestCVaccuracy = NewBestCVaccuracy;if NewBestCVaccuracy > BestCVaccuracyBestCVaccuracy = NewBestCVaccuracy;Bestc = cg_temp(I,1);Bestg = cg_temp(I,2);endif abs( NewBestCVaccuracy-BestCVaccuracy ) <= 10^(-2) && ...cg_temp(I,1) < BestcBestCVaccuracy = NewBestCVaccuracy;Bestc = cg_temp(I,1);Bestg = cg_temp(I,2);endtrace(gen,1) = max(ObjV);trace(gen,2) = sum(ObjV)/length(ObjV);end%figure;hold on;trace = round(trace*10000)/10000;plot(trace(1:gen,1),'r*-','LineWidth',1.5);plot(trace(1:gen,2),'o-','LineWidth',1.5);legend('最佳适应度','平均适应度',3);xlabel('进化代数','FontSize',12);ylabel('适应度','FontSize',12);axis([0 gen 0 100]);grid on;axis auto;line1 = '适应度曲线Accuracy[GAmethod]';line2 = ['(终止代数=', ...num2str(gen),',种群数量pop=', ...num2str(NIND),')'];line3 = ['Best c=',num2str(Bestc),' g=',num2str(Bestg), ...' CVAccuracy=',num2str(BestCVaccuracy),'%'];title({line1;line2;line3},'FontSize',12);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%% SVM神经网络的数据分类预测----意大利葡萄酒种类识别
%% 清空环境变量
close all;
clear;
clc;
format compact;
%% 数据提取
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
load chapter12_wine.mat;
% 画出测试数据的box可视化图
figure;
boxplot(wine,'orientation','horizontal','labels',categories);
title('wine数据的box可视化图','FontSize',12);
xlabel('属性值','FontSize',12);
grid on;
% 画出测试数据的分维可视化图
figure
subplot(3,5,1);
hold on
for run = 1:178
plot(run,wine_labels(run),'*');
end
xlabel('样本','FontSize',10);
ylabel('类别标签','FontSize',10);
title('class','FontSize',10);
for run = 2:14
subplot(3,5,run);
hold on;
str = ['attrib ',num2str(run-1)];
for i = 1:178
plot(i,wine(i,run-1),'*');
end
xlabel('样本','FontSize',10);
ylabel('属性值','FontSize',10);
title(str,'FontSize',10);
end
% 选定训练集和测试集
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];
% 相应的训练集的标签也要分离出来
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)]; % 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
% 相应的测试集的标签也要分离出来
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
%% 数据预处理
% 数据预处理,将训练集和测试集归一化到[0,1]区间
[mtrain,ntrain] = size(train_wine);
[mtest,ntest] = size(test_wine);
dataset = [train_wine;test_wine];
% mapminmax为MATLAB自带的归一化函数
[dataset_scale,ps] = mapminmax(dataset',0,1);
dataset_scale = dataset_scale';
train_wine = dataset_scale(1:mtrain,:);
test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );
%% SVM网络训练
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
%% SVM网络预测
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
%% 结果分析
% 测试集的实际分类和预测分类图
% 通过图可以看出只有一个测试样本是被错分的
figure;
hold on;
plot(test_wine_labels,'o');
plot(predict_label,'r*');
xlabel('测试集样本','FontSize',12);
ylabel('类别标签','FontSize',12);
legend('实际测试集分类','预测测试集分类');
title('测试集的实际分类和预测分类图','FontSize',12);
grid on;。

相关文档
最新文档