wine數(shù)據(jù)來自于UCI數(shù)據(jù)庫,記錄的是意大利同一地區(qū)3中不同品種的葡萄酒13中化學(xué)成分含量,以期通過科學(xué)的方法,達(dá)到自動(dòng)分類葡萄酒的目的。 本次分類的數(shù)據(jù)共有178個(gè)樣本,每個(gè)樣本有13個(gè)屬性,并提供每個(gè)樣本的正確分類,用于檢驗(yàn)SVM分類的準(zhǔn)確定。 首先我
wine數(shù)據(jù)來自于UCI數(shù)據(jù)庫,記錄的是意大利同一地區(qū)3中不同品種的葡萄酒13中化學(xué)成分含量,以期通過科學(xué)的方法,達(dá)到自動(dòng)分類葡萄酒的目的。
本次分類的數(shù)據(jù)共有178個(gè)樣本,每個(gè)樣本有13個(gè)屬性,并提供每個(gè)樣本的正確分類,用于檢驗(yàn)SVM分類的準(zhǔn)確定。
首先我們畫出數(shù)據(jù)的可視化圖:
% 載入測試數(shù)據(jù)wine,其中包含的數(shù)據(jù)為classnumber = 3,wine:178*13的矩陣,wine_labes:178*1的列向量 load chapter_WineClass.mat; % 畫出測試數(shù)據(jù)的box可視化圖 figure; boxplot(wine,'orientation','horizontal','labels',categories); title('wine數(shù)據(jù)的box可視化圖','FontSize',12); xlabel('屬性值','FontSize',12); grid on; % 畫出測試數(shù)據(jù)的分維可視化圖 figure subplot(3,5,1); hold on for run = 1:178 plot(run,wine_labels(run),'*'); end xlabel('樣本','FontSize',10); ylabel('類別標(biāo)簽','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)
(圖2)
圖1是wine數(shù)據(jù)的box可視化圖,圖2是wine的箱式圖,從圖上我們很難分出每一種葡萄酒是哪種類型。下面我們嘗試用SVM來分類。
數(shù)據(jù)的預(yù)處理
% 選定訓(xùn)練集和測試集 % 將第一類的1-30,第二類的60-95,第三類的131-153做為訓(xùn)練集 train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)]; % 相應(yīng)的訓(xùn)練集的標(biāo)簽也要分離出來 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,:)]; % 相應(yīng)的測試集的標(biāo)簽也要分離出來 test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)]; %% 數(shù)據(jù)預(yù)處理 % 數(shù)據(jù)預(yù)處理,將訓(xùn)練集和測試集歸一化到[0,1]區(qū)間 [mtrain,ntrain] = size(train_wine); [mtest,ntest] = size(test_wine); dataset = [train_wine;test_wine]; % mapminmax為MATLAB自帶的歸一化函數(shù) [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網(wǎng)絡(luò)訓(xùn)練 model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1'); %% SVM網(wǎng)絡(luò)預(yù)測 [predict_label, accuracy,dec_value1] = svmpredict(test_wine_labels, test_wine, model);
%% 結(jié)果分析 % 測試集的實(shí)際分類和預(yù)測分類圖 % 通過圖可以看出只有一個(gè)測試樣本是被錯(cuò)分的 figure; hold on; plot(test_wine_labels,'o'); plot(predict_label,'r*'); xlabel('測試集樣本','FontSize',12); ylabel('類別標(biāo)簽','FontSize',12); legend('實(shí)際測試集分類','預(yù)測測試集分類'); title('測試集的實(shí)際分類和預(yù)測分類圖','FontSize',12); grid on;
利用svm分類的準(zhǔn)確率達(dá)到了98.8764%,在89個(gè)測試樣本中僅有一個(gè)被分類錯(cuò)誤。可見SVM在數(shù)據(jù)分類方面的強(qiáng)大!
END
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com