1. 程式人生 > >matlab 下交叉驗證與 svm (多分類)模型的使用

matlab 下交叉驗證與 svm (多分類)模型的使用

筆記

下面是程式碼,註釋一般都能看懂的。

%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);