matlab 下交叉驗證與 svm (多分類)模型的使用
阿新 • • 發佈:2019-02-08
筆記
下面是程式碼,註釋一般都能看懂的。
%datas為讀入的資料集 labels為讀入的標籤 %規範化資料 [datas_normal] = premnmx(datas) ; %交叉驗證 k =10;%預將資料分成十份 sum_accuracy_svm = 0; [m,n] = size(datas_normal); %交叉驗證,使用十折交叉驗證 Kfold %indices為 n 行一列資料,表示每個訓練樣本屬於k份資料的哪一份 indices = crossvalind('Kfold',m,k); for i = 1:k test_indic = (indices == i); train_indic = ~test_indic; train_datas = datas_normal(train_indic,:);%找出訓練資料與標籤 train_labels = labels(train_indic,:); test_datas = datas_normal(test_indic,:);%找出測試資料與標籤 test_labels = labels(test_indic,:); % 開始svm多分類訓練,fitcsvm用於二分類,fitcecoc用於多分類, classifer = fitcecoc(train_datas,train_labels);%訓練模型 predict_label = predict(classifer, test_datas);%測試 accuracy_svm = length(find(predict_label == test_labels))/length(test_labels)%準確率 sum_accuracy_svm = sum_accuracy_svm + accuracy_svm; end %求平均準確率 mean_accuracy_svm = sum_accuracy_svm / k; disp('平均準確率:'); disp( mean_accuracy_svm);