iris數(shù)據(jù)集
本文所用數(shù)據(jù)集??????iris分類數(shù)據(jù)集文章來源地址http://www.zghlxwxcb.cn/news/detail-614461.html
1.數(shù)據(jù)預(yù)處理
%% 1.數(shù)據(jù)預(yù)處理
oridata=readtable('Iris.xls','Sheet','Sheet1');
X=table2array(oridata(:,(1:4))); % X轉(zhuǎn)化為array類型
Y=table2array(oridata(:,5)); % Y因為包含中文字符,默認會轉(zhuǎn)化為cell類型
allSample_Num=length(Y); %樣本數(shù)量
% 中文分類變量轉(zhuǎn)換為數(shù)字分類變量 確保這里Y是cell類型
for ii = 1:numel(Y)
if strcmp(Y{ii}, 'Iris-setosa')
Y{ii} = 1;
elseif strcmp(Y{ii}, 'Iris-versicolor')
Y{ii} = 2;
elseif strcmp(Y{ii}, 'Iris-virginica')
Y{ii} = 3;
end
end
Y=cell2mat(Y); % 將Y轉(zhuǎn)換為array類型
2.設(shè)置test和train
test_Ratio=0.2; % 測試集比例
c = cvpartition(allSample_Num, 'HoldOut', test_Ratio); % 通過交叉驗證的劃分對象進行隨機劃分
trainIdx=training(c); % logistics數(shù)組,值1表示被選取
testIdx=test(c); % sum(testIdx) == allSample_Num*0.2
X_train=X(trainIdx,:)'; % why轉(zhuǎn)置?——適應(yīng)netff函數(shù)和mapminmax函數(shù)的輸入要求(行-特征、列-樣本)
X_test=X(testIdx,:)';
Y_train=Y(trainIdx,:)';
Y_test=Y(testIdx,:)';
3.數(shù)據(jù)歸一化
%% 3.數(shù)據(jù)歸一化
[X_train_std, X_train_stdps]=mapminmax(X_train,-1,1); % X_train歸一化
% [Y_train_std, Y_train_stdps]=mapminmax(Y_train);
X_test_std=mapminmax('apply',X_test,X_train_stdps); % X_test采用和X_train一樣的歸一化方式
Y_train_OneHot=ind2vec(Y_train); % ind2vec 轉(zhuǎn)為獨熱編碼
Y_test_OneHot=ind2vec(Y_test);
4.設(shè)定net參數(shù)
MSE=1e+10; % 最優(yōu)均方誤差,初始化一個極大值
hid_Num=0; % 最優(yōu)hidden層數(shù)目,初始化為0
transF_func={'tansig','purelin'}; % hidden層和out層的激活函數(shù)
btf_func='trainlm'; % 反向傳播:學(xué)習(xí)參數(shù)的方法(梯度下降)
lr=0.01; % 學(xué)習(xí)率
epochs=500; % 訓(xùn)練次數(shù)
goal=0.001; % 收斂誤差(均方誤差)
5.構(gòu)建、訓(xùn)練net
net=newff(X_train_std, Y_train_OneHot, 4, transF_func, btf_func);
net.trainParam.lr=lr;
net.trainParam.epochs=epochs;
net.trainParam.goal=goal;
net.trainparam.show = 50 ;% 顯示中間結(jié)果的周期
net=train(net, X_train_std, Y_train_OneHot);
6.結(jié)果測試
res_Train=sim(net,X_train_std); % 3×120,每個樣本的各類別概率
res_Test=sim(net,X_test_std); % 3×30,每個樣本的各類別概率
res_Train=vec2ind(res_Train); % 1×120,反歸一化,找到分類概率最大的所在分類
res_Test=vec2ind(res_Test); % 1×30,反歸一化,找到分類概率最大的所在分類
acu_Train=sum(res_Train==Y_train)/allSample_Num*100 % train準確率
acu_Test=sum(res_Test==Y_test)/(allSample_Num*test_Ratio)*100 % test準確率
總結(jié)
- maxminmap歸一化函數(shù)和netff函數(shù)的輸入矩陣都是==”行特征,列樣本“==的格式,注意轉(zhuǎn)置
- BP實現(xiàn)分類時,Y為分類變量,預(yù)處理時需要將其轉(zhuǎn)換成獨熱編碼,sim后將得到的類別概率轉(zhuǎn)換成分類數(shù)值,可通過以下函數(shù)實現(xiàn):
ind2vec:1×120 --> 3×120(轉(zhuǎn)成獨熱編碼,稀疏矩陣)
vec2ind:3×120 --> 1×120 (取每一列概率分布值的max) - 多次訓(xùn)練時,應(yīng)保證隨機選取樣本不變(不要一次運行所有代碼)
文章來源:http://www.zghlxwxcb.cn/news/detail-614461.html
到了這里,關(guān)于matlab BP神經(jīng)網(wǎng)絡(luò)對iris數(shù)據(jù)集進行分類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!