⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 area_svm_10.m

📁 使用支持向量机对仿人感知器建模
💻 M
字号:
%%%%%%%%%%%%%%%%%用BP神经网络建模%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear
close all
tic
%%%%%%%%%%%%%%%训练数据集%%%%%%%%%%%%%%%%%%%%%%
%使用点数折算120幅图片的面积,分别作为训练数据和检验数据
%%%%%%%%%%%%输入%%%%%%%%%%%
%输入:从100幅图片读取数据,获得均值、方差、惯量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pic1=[ 'C:\MATLAB7\work\P100\001.bmp';
    'C:\MATLAB7\work\P100\002.bmp';
    'C:\MATLAB7\work\P100\003.bmp';
    'C:\MATLAB7\work\P100\004.bmp';
    'C:\MATLAB7\work\P100\005.bmp';
    'C:\MATLAB7\work\P100\006.bmp';
    'C:\MATLAB7\work\P100\007.bmp';
    'C:\MATLAB7\work\P100\008.bmp';
    'C:\MATLAB7\work\P100\009.bmp';
    'C:\MATLAB7\work\P100\010.bmp';
    'C:\MATLAB7\work\P100\011.bmp';
    'C:\MATLAB7\work\P100\012.bmp';
    'C:\MATLAB7\work\P100\013.bmp';
    'C:\MATLAB7\work\P100\014.bmp';
    'C:\MATLAB7\work\P100\015.bmp';
    'C:\MATLAB7\work\P100\016.bmp';
    'C:\MATLAB7\work\P100\017.bmp';
    'C:\MATLAB7\work\P100\018.bmp';
    'C:\MATLAB7\work\P100\019.bmp';
    'C:\MATLAB7\work\P100\020.bmp';
    'C:\MATLAB7\work\P100\021.bmp';
    'C:\MATLAB7\work\P100\022.bmp';
    'C:\MATLAB7\work\P100\023.bmp';
    'C:\MATLAB7\work\P100\024.bmp';
    'C:\MATLAB7\work\P100\025.bmp';
    'C:\MATLAB7\work\P100\026.bmp';
    'C:\MATLAB7\work\P100\027.bmp';
    'C:\MATLAB7\work\P100\028.bmp';
    'C:\MATLAB7\work\P100\029.bmp';
    'C:\MATLAB7\work\P100\030.bmp';
    'C:\MATLAB7\work\P100\031.bmp';
    'C:\MATLAB7\work\P100\032.bmp';
    'C:\MATLAB7\work\P100\033.bmp';
    'C:\MATLAB7\work\P100\034.bmp';
    'C:\MATLAB7\work\P100\035.bmp';
    'C:\MATLAB7\work\P100\036.bmp';
    'C:\MATLAB7\work\P100\037.bmp';
    'C:\MATLAB7\work\P100\038.bmp';
    'C:\MATLAB7\work\P100\039.bmp';
    'C:\MATLAB7\work\P100\040.bmp';
    'C:\MATLAB7\work\P100\041.bmp';
    'C:\MATLAB7\work\P100\042.bmp';
    'C:\MATLAB7\work\P100\043.bmp';
    'C:\MATLAB7\work\P100\044.bmp';
    'C:\MATLAB7\work\P100\045.bmp';
    'C:\MATLAB7\work\P100\046.bmp';
    'C:\MATLAB7\work\P100\047.bmp';
    'C:\MATLAB7\work\P100\048.bmp';
    'C:\MATLAB7\work\P100\049.bmp';
    'C:\MATLAB7\work\P100\050.bmp';
    'C:\MATLAB7\work\P100\051.bmp';
    'C:\MATLAB7\work\P100\052.bmp';
    'C:\MATLAB7\work\P100\053.bmp';
    'C:\MATLAB7\work\P100\054.bmp';
    'C:\MATLAB7\work\P100\055.bmp';
    'C:\MATLAB7\work\P100\056.bmp';
    'C:\MATLAB7\work\P100\057.bmp';
    'C:\MATLAB7\work\P100\058.bmp';
    'C:\MATLAB7\work\P100\059.bmp';
    'C:\MATLAB7\work\P100\060.bmp';
    'C:\MATLAB7\work\P100\061.bmp';
    'C:\MATLAB7\work\P100\062.bmp';
    'C:\MATLAB7\work\P100\063.bmp';
    'C:\MATLAB7\work\P100\064.bmp';
    'C:\MATLAB7\work\P100\065.bmp';
    'C:\MATLAB7\work\P100\066.bmp';
    'C:\MATLAB7\work\P100\067.bmp';
    'C:\MATLAB7\work\P100\068.bmp';
    'C:\MATLAB7\work\P100\069.bmp';
    'C:\MATLAB7\work\P100\070.bmp';
    'C:\MATLAB7\work\P100\071.bmp';
    'C:\MATLAB7\work\P100\072.bmp';
    'C:\MATLAB7\work\P100\073.bmp';
    'C:\MATLAB7\work\P100\074.bmp';
    'C:\MATLAB7\work\P100\075.bmp';
    'C:\MATLAB7\work\P100\076.bmp';
    'C:\MATLAB7\work\P100\077.bmp';
    'C:\MATLAB7\work\P100\078.bmp';
    'C:\MATLAB7\work\P100\079.bmp';
    'C:\MATLAB7\work\P100\080.bmp';
    'C:\MATLAB7\work\P100\081.bmp';
    'C:\MATLAB7\work\P100\082.bmp';
    'C:\MATLAB7\work\P100\083.bmp';
    'C:\MATLAB7\work\P100\084.bmp';
    'C:\MATLAB7\work\P100\085.bmp';
    'C:\MATLAB7\work\P100\086.bmp';
    'C:\MATLAB7\work\P100\087.bmp';
    'C:\MATLAB7\work\P100\088.bmp';
    'C:\MATLAB7\work\P100\089.bmp';
    'C:\MATLAB7\work\P100\090.bmp';
    'C:\MATLAB7\work\P100\091.bmp';
    'C:\MATLAB7\work\P100\092.bmp';
    'C:\MATLAB7\work\P100\093.bmp';
    'C:\MATLAB7\work\P100\094.bmp';
    'C:\MATLAB7\work\P100\095.bmp';
    'C:\MATLAB7\work\P100\096.bmp';
    'C:\MATLAB7\work\P100\097.bmp';
    'C:\MATLAB7\work\P100\098.bmp';
    'C:\MATLAB7\work\P100\099.bmp';
    'C:\MATLAB7\work\P100\100.bmp'; ]';
%-----------------------计算300*300矩阵全为1时点阵的最大惯量---------------------

Mx=0
 for n=1:300
   Mx=Mx+n*n;
end
    max=Mx*300;
 %----------------------训练数据-----------------------------------   
no=1;
for no=1:100
s=0;
Mx1=0;Mx2=0;My1=0;My2=0;
I=imread(pic1(((no-1)*28+1):no*28));
J=im2bw(I);
    for n=1:300
        for m=1:300
            if J(m,n)==1
            s=s+1;
            c(s)=n;         
            d(s)=m;
            Mx1=Mx1+n*n;   
            My1=My1+m*m; 
            Mx2=Mx2+(300-n)^2;
            My2=My2+(300-m)^2;     
            end
        end
    end
P(1,no)=mean(c);            %像素点Y轴均值
P(2,no)=mean(d);            %像素点X轴均值
P(3,no)=var(c);             %像素点Y轴方差
P(4,no)=var(d);             %像素点X轴方差
P(5,no)=Mx1./max;                 %绕下X轴转动惯量,像素视为单位质量
P(6,no)=My1./max;                 %绕左Y轴转动惯量,像素视为单位质量
P(7,no)=Mx2./max;                %绕上X轴转动惯量,像素视为单位质量
P(8,no)=My2./max;                 %绕右Y轴转动惯量,像素视为单位质量
end
%------------训练数据输入-------------------------------
x1=P(5:8,:)';
%20幅检验图片,从图片读取数据,获得均值、方差、惯量、
pic2=['C:\MATLAB7\work\P100\101.bmp';
    'C:\MATLAB7\work\P100\102.bmp';
    'C:\MATLAB7\work\P100\103.bmp'
    'C:\MATLAB7\work\P100\104.bmp';
    'C:\MATLAB7\work\P100\105.bmp'
    'C:\MATLAB7\work\P100\106.bmp';
    'C:\MATLAB7\work\P100\107.bmp'
    'C:\MATLAB7\work\P100\108.bmp';
    'C:\MATLAB7\work\P100\109.bmp'
    'C:\MATLAB7\work\P100\110.bmp';
    'C:\MATLAB7\work\P100\111.bmp';
    'C:\MATLAB7\work\P100\112.bmp';
    'C:\MATLAB7\work\P100\113.bmp'
    'C:\MATLAB7\work\P100\114.bmp';
    'C:\MATLAB7\work\P100\115.bmp'
    'C:\MATLAB7\work\P100\116.bmp';
    'C:\MATLAB7\work\P100\117.bmp'
    'C:\MATLAB7\work\P100\118.bmp';
    'C:\MATLAB7\work\P100\119.bmp'
    'C:\MATLAB7\work\P100\120.bmp';]';
no=1;
for no=1:20
s=0;
Mx1=0;Mx2=0;My1=0;My2=0;
I=imread(pic2(((no-1)*28+1):no*28));
J=im2bw(I);
    for n=1:300
        for m=1:300
            if J(m,n)==1
            s=s+1;
            c(s)=n;
            d(s)=m;
            Mx1=Mx1+n*n;   
            My1=My1+m*m; 
            Mx2=Mx2+(300-n)^2;
            My2=My2+(300-m)^2;     
            end
        end
    end
Test(1,no)=mean(c);
Test(2,no)=mean(d);
Test(3,no)=var(c);
Test(4,no)=var(d);
Test(5,no)=Mx1./max;
Test(6,no)=My1./max;
Test(7,no)=Mx2./max;                 %绕上X轴转动惯量,像素视为单位质量
Test(8,no)=My2./max;                  %绕右Y轴转动惯量,像素视为单位质量
end
%---------------检验数据输入---------------------
x2=Test(5:8,:)';

%%%%%%%%%%%%%输出%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%使用Area_Data.m根据点阵计算的结果
y=[
3.8785;15.5690 ;10.5605 ;2.3925 ;8.5760 ;6.0365 ;8.2845 ;1.2300 ;5.0855 ;8.5445 ;
3.0070 ;3.0790 ;5.0460 ;15.1520 ;9.9100 ;17.6115 ;6.8840 ;11.4680 ;2.1380 ;3.3205 ;
9.5190 ;13.7530 ;12.7340 ;1.2465 ;4.1470 ;10.1145 ;11.3810 ;1.0190 ;9.1170 ;6.5460 ;
5.0015 ;6.1565 ;10.0865 ;9.7325 ;5.5665 ;8.4145 ;11.3025 ;5.2890 ;12.2515 ;13.5975 ;
4.9555 ;5.1910 ;15.8195 ;3.4720 ;5.5170 ;5.8765 ;5.0405 ;14.8825 ;7.1685 ;5.8930 ;
3.8790 ;6.3315 ;11.3385 ;2.0855 ;5.8650 ;5.8760 ;6.1700 ;6.6885 ;11.7990 ;6.4535 ;
6.4125 ;2.6555 ;3.7590 ;7.9085 ;15.5610 ;9.6575 ;7.8655 ;11.6010 ;9.1260 ;6.9520 ;
11.7660 ;3.7490 ;5.4710 ;4.1285 ;5.9525 ;15.9515 ;6.4270 ;5.9715 ;7.2215 ;4.4615 ;
10.8385 ;8.4400 ;7.4265 ;5.9630 ;5.5080 ;9.5415 ;5.6260 ;4.4400 ;11.1845 ;3.1685 ;
8.5340 ;3.5985 ;3.5750 ;7.8225 ;6.7555 ;4.0710 ;7.9500 ;8.3080 ;8.2970 ;7.4920 ;
];
%%%%%%%%%检验数据的输出%%%%%%%%%%%%%%%%%%%%%%%%%
%前20个为使用Area_Data.m根据点阵计算的结果
%后20个数据为训练1次的结果作为校验数据使用

ytest=  [
    3.682;2.4225;7.0905;3.569;2.751;4.263;3.2985;2.7705;4.176;2.7155;
    5.4485;5.631;4.7405;3.913;3.853;2.5235;3.85;6.764;7.935;3.303;
    
    ];
%%%%%%-----------------SVM支持向量机-------------------------
%参数设置
C = 10; 
lambda = 1e-2; 
for eno=1:50
   eps(eno)=eno/100;
end
for eno=1:50
epsilon =eps(eno);
verbose=1;
nbclass=5;
kernel='gaussian';
%kernel='poly';
%kernel='polyhomog';
%kernel='htrbf';
%kernel='wavelet';
%kernel='frame';
kerneloption=1;

%支持向量机拟合
[xsup,ysup,w,w0] = svmreg(x1,y,C,epsilon,kernel,kerneloption,lambda,verbose);
Y1 = svmval(x1,xsup,w,w0,kernel,kerneloption);%训练数据的输出
Y2 = svmval(x2,xsup,w,w0,kernel,kerneloption);%检验数据的输出
%Error1=y-Y1
%Error2=ytest-Y2
ERR1(eno)=sumsqr(y-Y1);                      %训练数据的误差平方和
ERR2(eno)=sumsqr(ytest-Y2);                  %检验数据的误差平方和
%Error1_rel=Error1./y
%Error2_rel=Error2./ytest
end

%仿真输出图
figure(1)
subplot(2,1,1); 
%plot(100*Error1_rel,'k');
plot(ERR1,'k');
ylabel('训练数据误差平方和');
xlabel('不灵敏区ε×100');

subplot(2,1,2); 
%plot(100*Error2_rel,'k')
plot(ERR2,'k')
ylabel('检验数据误差平方和');
xlabel('不灵敏区ε×100');

%plot(i,100*Error1_rel,'k');
%j=1:20;
%title('训练误差百分数');

%figure(2)
%plot(j,100*Error2_rel,'k');
%title('检验误差百分数');


%figure(4)
%plot(j,ytest,'b',j,Y2,'r*')
%toc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -