数学建模按赛题划分常用代码
?
?
?
?
基于SVM神經網絡的葡萄酒種類識別部分代碼
%% 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:178plot(run,wine_labels(run),'*'); end xlabel('樣本','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),: ); %% 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;?基于LVQ神經網絡的乳腺腫瘤診斷分類 部分代碼
%% LVQ神經網絡的分類——乳腺腫瘤診斷%% 清空環境變量 clear all clc warning off %% 導入數據 load data.mat a=randperm(569); Train=data(a(1:500),:); Test=data(a(501:end),:); % 訓練數據 P_train=Train(:,3:end)'; Tc_train=Train(:,2)'; T_train=ind2vec(Tc_train); % 測試數據 P_test=Test(:,3:end)'; Tc_test=Test(:,2)'; %% K-fold交叉驗證確定最佳神經元個數 k_fold=5; Indices=crossvalind('Kfold',size(P_train,2),k_fold); error_min=10e10; best_number=1; best_input=[]; best_output=[]; best_train_set_index=[]; best_validation_set_index=[]; h=waitbar(0,'正在尋找最佳神經元個數.....'); for i=1:k_fold% 驗證集標號validation_set_index=(Indices==i);% 訓練集標號train_set_index=~validation_set_index;% 驗證集validation_set_input=P_train(:,validation_set_index);validation_set_output=T_train(:,validation_set_index);% 訓練集train_set_input=P_train(:,train_set_index);train_set_output=T_train(:,train_set_index);for number=10:30count_B_train=length(find(Tc_train(:,train_set_index)==1));count_M_train=length(find(Tc_train(:,train_set_index)==2));rate_B=count_B_train/length(find(train_set_index==1));rate_M=count_M_train/length(find(train_set_index==1));net=newlvq(minmax(train_set_input),number,[rate_B rate_M]);% 設置網絡參數net.trainParam.epochs=1000;net.trainParam.show=10;net.trainParam.lr=0.1;net.trainParam.goal=0.1;% 訓練網絡net=train(net,train_set_input,train_set_output);waitbar(((i-1)*21+number)/114,h);%% 仿真測試T_sim=sim(net,validation_set_input);Tc_sim=vec2ind(T_sim);error=length(find(Tc_sim~=Tc_train(:,validation_set_index)));if error<error_minerror_min=error;best_number=number;best_input=train_set_input;best_output=train_set_output;best_train_set_index=train_set_index;best_validation_set_index=validation_set_index;endend end disp(['經過交叉驗證,得到的最佳神經元個數為:' num2str(best_number)]); close(h); %% 創建網絡 count_B_train=length(find(Tc_train(:,best_train_set_index)==1)); count_M_train=length(find(Tc_train(:,best_train_set_index)==2)); rate_B=count_B_train/length(find(train_set_index==1)); rate_M=count_M_train/length(find(train_set_index==1)); net=newlvq(minmax(best_input),best_number,[rate_B rate_M]); % 設置網絡參數 net.trainParam.epochs=1000; net.trainParam.show=10; net.trainParam.lr=0.1; net.trainParam.goal=0.1; %% 訓練網絡 net=train(net,best_input,best_output); %% 仿真測試 T_sim=sim(net,P_test); Tc_sim=vec2ind(T_sim); result=[Tc_sim;Tc_test] %% 結果顯示 total_B=length(find(data(:,2)==1)); total_M=length(find(data(:,2)==2)); count_B_validation=length(find(Tc_train(:,best_validation_set_index)==1)); count_M_validation=length(find(Tc_train(:,best_validation_set_index)==2)); number_B=length(find(Tc_test==1)); number_M=length(find(Tc_test==2)); number_B_sim=length(find(Tc_sim==1 & Tc_test==1)); number_M_sim=length(find(Tc_sim==2 &Tc_test==2)); disp(['病例總數:' num2str(569)...' 良性:' num2str(total_B)...' 惡性:' num2str(total_M)]); disp(['訓練集病例總數:' num2str(length(find(best_train_set_index==1)))...' 良性:' num2str(count_B_train)...' 惡性:' num2str(count_M_train)]); disp(['驗證集病例總數:' num2str(length(find(best_validation_set_index==1)))...' 良性:' num2str(count_B_validation)...' 惡性:' num2str(count_M_validation)]); disp(['測試集病例總數:' num2str(69)...' 良性:' num2str(number_B)...' 惡性:' num2str(number_M)]); disp(['良性乳腺腫瘤確診:' num2str(number_B_sim)...' 誤診:' num2str(number_B-number_B_sim)...' 確診率p1=' num2str(number_B_sim/number_B*100) '%']); disp(['惡性乳腺腫瘤確診:' num2str(number_M_sim)...' 誤診:' num2str(number_M-number_M_sim)...' 確診率p2=' num2str(number_M_sim/number_M*100) '%']);?經過交叉驗證,得到的最佳神經元個數為:11
 result =
 ? 列 1 至 15
 ? ? ?1 ? ? 1 ? ? 2 ? ? 2 ? ? 2 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 1 ? ? 1
 ? ? ?1 ? ? 1 ? ? 2 ? ? 1 ? ? 2 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 2 ? ? 1
 ? 列 16 至 30
 ? ? ?1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 1 ? ? 2 ? ? 1
 ? ? ?1 ? ? 1 ? ? 2 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 2 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 2
 ? 列 31 至 45
 ? ? ?1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 2 ? ? 1 ? ? 2
 ? ? ?2 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 2 ? ? 1 ? ? 2
 ? 列 46 至 60
 ? ? ?2 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 2
 ? ? ?2 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 2 ? ? 1 ? ? 2 ? ? 2 ? ? 2 ? ? 2
 ? 列 61 至 69
 ? ? ?1 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1
 ? ? ?1 ? ? 1 ? ? 1 ? ? 1 ? ? 1 ? ? 2 ? ? 1 ? ? 1 ? ? 1
 病例總數:569 ?良性:357 ?惡性:212
 訓練集病例總數:400 ?良性:256 ?惡性:144
 驗證集病例總數:100 ?良性:60 ?惡性:40
 測試集病例總數:69 ?良性:41 ?惡性:28
 良性乳腺腫瘤確診:39 ?誤診:2 ?確診率p1=95.122%
 惡性乳腺腫瘤確診:21 ?誤診:7 ?確診率p2=75%
基于模糊神經網絡的嘉陵江水質評價代碼
%% 清空環境變量 clc clear%% 參數初始化 xite=0.001; alfa=0.05;%網絡節點 I=6; %輸入節點數 M=12; %隱含節點數 O=1; %輸出節點數%系數初始化 p0=0.3*ones(M,1);p0_1=p0;p0_2=p0_1; p1=0.3*ones(M,1);p1_1=p1;p1_2=p1_1; p2=0.3*ones(M,1);p2_1=p2;p2_2=p2_1; p3=0.3*ones(M,1);p3_1=p3;p3_2=p3_1; p4=0.3*ones(M,1);p4_1=p4;p4_2=p4_1; p5=0.3*ones(M,1);p5_1=p5;p5_2=p5_1; p6=0.3*ones(M,1);p6_1=p6;p6_2=p6_1;%參數初始化 c=1+rands(M,I);c_1=c;c_2=c_1; b=1+rands(M,I);b_1=b;b_2=b_1;maxgen=100; %進化次數%網絡測試數據,并對數據歸一化 load data1 input_train output_train input_test output_test%選連樣本輸入輸出數據歸一化 [inputn,inputps]=mapminmax(input_train); [outputn,outputps]=mapminmax(output_train); [n,m]=size(input_train);%% 網絡訓練 %循環開始,進化網絡 for iii=1:maxgeniiifor k=1:m x=inputn(:,k);%輸出層結算for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endend%模糊規則計算for i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i);end addw=sum(w);for i=1:Myi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6);endaddyw=yi*w';%網絡預測計算yn(k)=addyw/addw;e(k)=outputn(k)-yn(k);%計算p的變化值d_p=zeros(M,1);d_p=xite*e(k)*w./addw;d_p=d_p';%計算b變化值d_b=0*b_1;for i=1:Mfor j=1:Id_b(i,j)=xite*e(k)*(yi(i)*addw-addyw)*(x(j)-c(i,j))^2*w(i)/(b(i,j)^2*addw^2);endend %更新c變化值for i=1:Mfor j=1:Id_c(i,j)=xite*e(k)*(yi(i)*addw-addyw)*2*(x(j)-c(i,j))*w(i)/(b(i,j)*addw^2);endendp0=p0_1+ d_p+alfa*(p0_1-p0_2);p1=p1_1+ d_p*x(1)+alfa*(p1_1-p1_2);p2=p2_1+ d_p*x(2)+alfa*(p2_1-p2_2);p3=p3_1+ d_p*x(3)+alfa*(p3_1-p3_2);p4=p4_1+ d_p*x(4)+alfa*(p4_1-p4_2);p5=p5_1+ d_p*x(5)+alfa*(p5_1-p5_2);p6=p6_1+ d_p*x(6)+alfa*(p6_1-p6_2);b=b_1+d_b+alfa*(b_1-b_2); c=c_1+d_c+alfa*(c_1-c_2);p0_2=p0_1;p0_1=p0;p1_2=p1_1;p1_1=p1;p2_2=p2_1;p2_1=p2;p3_2=p3_1;p3_1=p3;p4_2=p4_1;p4_1=p4;p5_2=p5_1;p5_1=p5;p6_2=p6_1;p6_1=p6;c_2=c_1;c_1=c; b_2=b_1;b_1=b;end E(iii)=sum(abs(e));endfigure(1); plot(outputn,'r') hold on plot(yn,'b') hold on plot(outputn-yn,'g'); legend('實際輸出','預測輸出','誤差','fontsize',12) title('訓練數據預測','fontsize',12) xlabel('樣本序號','fontsize',12) ylabel('水質等級','fontsize',12)%% 網絡預測 %數據歸一化 inputn_test=mapminmax('apply',input_test,inputps); [n,m]=size(inputn_test) for k=1:mx=inputn_test(:,k);%計算輸出中間層for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endendfor i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i);endaddw=0;for i=1:M addw=addw+w(i);endfor i=1:M yi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6); endaddyw=0; for i=1:M addyw=addyw+yi(i)*w(i); end%計算輸出yc(k)=addyw/addw; end%預測結果反歸一化 test_simu=mapminmax('reverse',yc,outputps); %作圖 figure(2) plot(output_test,'r') hold on plot(test_simu,'b') hold on plot(test_simu-output_test,'g') legend('實際輸出','預測輸出','誤差','fontsize',12) title('測試數據預測','fontsize',12) xlabel('樣本序號','fontsize',12) ylabel('水質等級','fontsize',12)%% 嘉陵江實際水質預測 load data2 hgsc gjhy dxg %-----------------------------------紅工水廠----------------------------------- zssz=hgsc; %數據歸一化 inputn_test =mapminmax('apply',zssz,inputps); [n,m]=size(zssz);for k=1:1:mx=inputn_test(:,k);%計算輸出中間層for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endendfor i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i);endaddw=0;for i=1:M addw=addw+w(i);endfor i=1:M yi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6); endaddyw=0; for i=1:M addyw=addyw+yi(i)*w(i); end%計算輸出szzb(k)=addyw/addw; end szzbz1=mapminmax('reverse',szzb,outputps);for i=1:mif szzbz1(i)<=1.5szpj1(i)=1;elseif szzbz1(i)>1.5&&szzbz1(i)<=2.5szpj1(i)=2;elseif szzbz1(i)>2.5&&szzbz1(i)<=3.5szpj1(i)=3;elseif szzbz1(i)>3.5&&szzbz1(i)<=4.5szpj1(i)=4;elseszpj1(i)=5;end end % %-----------------------------------高家花園----------------------------------- zssz=gjhy; inputn_test =mapminmax('apply',zssz,inputps); [n,m]=size(zssz);for k=1:1:mx=inputn_test(:,k);%計算輸出中間層for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endendfor i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i);endaddw=0;for i=1:M addw=addw+w(i);endfor i=1:M yi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6); endaddyw=0; for i=1:M addyw=addyw+yi(i)*w(i); end%計算輸出szzb(k)=addyw/addw; end szzbz2=mapminmax('reverse',szzb,outputps);for i=1:mif szzbz2(i)<=1.5szpj2(i)=1;elseif szzbz2(i)>1.5&&szzbz2(i)<=2.5szpj2(i)=2;elseif szzbz2(i)>2.5&&szzbz2(i)<=3.5szpj2(i)=3;elseif szzbz2(i)>3.5&&szzbz2(i)<=4.5szpj2(i)=4;elseszpj2(i)=5;end end % %-----------------------------------大溪溝水廠----------------------------------- zssz=dxg; inputn_test =mapminmax('apply',zssz,inputps); [n,m]=size(zssz);for k=1:1:mx=inputn_test(:,k);%計算輸出中間層for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endendfor i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i);endaddw=0;for i=1:M addw=addw+w(i);endfor i=1:M yi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6); endaddyw=0; for i=1:M addyw=addyw+yi(i)*w(i); end%計算輸出szzb(k)=addyw/addw; end szzbz3=mapminmax('reverse',szzb,outputps);for i=1:mif szzbz3(i)<=1.5szpj3(i)=1;elseif szzbz3(i)>1.5&&szzbz3(i)<=2.5szpj3(i)=2;elseif szzbz3(i)>2.5&&szzbz3(i)<=3.5szpj3(i)=3;elseif szzbz3(i)>3.5&&szzbz3(i)<=4.5szpj3(i)=4;elseszpj3(i)=5;end endfigure(3) plot(szzbz1,'o-r') hold on plot(szzbz2,'*-g') hold on plot(szzbz3,'*:b') xlabel('時間','fontsize',12) ylabel('預測水質','fontsize',12) legend('紅工水廠','高家花園水廠','大溪溝水廠','fontsize',12)?
?
總結
以上是生活随笔為你收集整理的数学建模按赛题划分常用代码的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Unhandled exception:
 - 下一篇: 第一个Spark程序