近紅外光譜快速檢測澱粉品質9(1 / 3)

第七章澱粉摻雜滑石粉的近紅外檢測方法研究 附錄Ⅰ

支持向量機檢測澱粉類別Matlab源程序%清空環境變量

function chapter13

close all;

clear;

clc;

format compact;

%數據的提取

load chapter13_winemat;

% 畫出澱粉光譜圖

figure;

plot(wine,′LineWidth′,2);

title(′澱粉光譜圖(2010-7-7)′,′FontSize′,12);

grid on;

%將第一類的1-14,第二類的29-39做為訓練集

train_wine=[wine(1:14,:);wine(29:39,:)]

%相應的訓練集的標簽也要分離出來

train_wine_labels=[wine_labels(1:14);wine_labels(29:39)];

%將第一類的15-28,第二類的40-49做為測試集

test_wine=[wine(15:28,:);wine(40:49,:)];

%相應的測試集的標簽也要分離出來

test_wine_labels=[wine_labels(15:28,:);wine_labels(40:49,:)];

%數據預處理,將訓練集和測試集歸一化到[0,1]區間

%mapminmax為matlab自帶的映射函數

[train_wine,pstrain]=mapminmax(train_wine′);

%將映射函數的範圍參數分別置為0和1

pstrainymin=0;

pstrainymax=1;

%對訓練集進行[0,1]歸一化

[train_wine,pstrain]=mapminmax(train_wine,pstrain);

%mapminmax為matlab自帶的映射函數

[test_wine,pstest]=mapminmax(test_wine′);

%將映射函數的範圍參數分別置為0和1

pstestymin=0;

pstestymax=1;

%對測試集進行[0,1]歸一化

[test_wine,pstest]=mapminmax(test_wine,pstest);

%畫出原始澱粉光譜圖歸一化後的圖像

figure;

plot(wine,′LineWidth′,2);

title(′原始澱粉光譜圖歸一化後的圖像′,′FontSize′,12);

grid on;

%對訓練集和測試集進行轉置,以符合libsvm工具箱的數據格式要求

train_wine=train_wine′;

test_wine=test_wine′;

%%選擇最佳的SVM參數c&g

%首先進行粗略選擇:c&g的變化範圍是2^(-10),2^(-9),,2^(10)

[bestacc,bestc,bestg]=SVMcgForClass(train_wine_labels,train_wine,-10,10,-10,10);

%打印粗略選擇結果

disp(′打印粗略選擇結果′);

str=sprintf(′Best Cross Validation Accuracy=%g%% Best c=%g Best g=%g′,bestacc,bestc,bestg);

disp(str);

%根據粗略選擇的結果圖再進行精細選擇:c的變化範圍是2^(-3),2^(-15),,2^(10),g的變化範圍是2^(-10),2^(-35),,2^(4),

[bestacc,bestc,bestg]=SVMcgForClass(train_wine_labels,train_wine,-3,10,-10,4,3,05,05,09);

%打印精細選擇結果

disp(′打印精細選擇結果′);

str=sprintf(′Best Cross Validation Accuracy=%g%% Best c=%g Best g= %g′,bestacc,bestc,bestg);

disp(str);

%利用最佳的參數進行SVM網絡訓練