資源簡介
這是多分類的算法,采用一對一的方法,且SVM是利用libsvm工具箱的libtrain和libpredict函數,適合多分類的方法,也可已將這種方法用到別的算法中去
代碼片段和文件信息
?
?
?%%?Load?data
%?*?數據預處理--分兩類情況
data?=?load(‘Iris.txt‘);
%data?=?data.data;
%選擇訓練樣本個數
num_train?=?110;
%構造隨機選擇序列
%length函數:數組長度,即行數和列數中的較大值
%choose?=?randperm(length(data);
?A=size(data1);
choose=randperm(A);%產生所有樣本的隨機序列A*1
train_data?=?data(choose(1:num_train):);%隨機分配的訓練集
%gscatter函數可以按分類或分組來畫離散點,適用于畫多個類別的離散樣本分布圖
%函數中,x和y是向量,是該點的x軸和y軸坐標,因為畫在二維平面上,所以,如果是多維數據,只能從中選取兩特征作為x,y坐標來代表點
%或者使用特定的降維投影函數來得到x,y。?group是類別標志或分組向量
%gscatter(train_data(:1)train_data(:2));
label_train?=?train_data(:end);
test_data?=?data(choose(num_train+1:end):);
label_test?=?test_data(:end);
%%?svm的構建與訓練
%?第二種SVM多分類的方法?一對一?總共有(n*n-1)/2個分類器?,最終讓測試樣本遍歷所有的分類器,投票決定
??num?=?0;
for?i?=?1:3-1?%3類
????%n*n-1)/2個分類器?這個訓練模型是三分類的模型
????for?j?=?i+1:3
????????num?=?num?+?1;
????????%重新歸類?在訓練標簽中確定分別表示的兩類標簽
????????index1?=?find(label_train?==?i);
????????index2?=?find(label_train?==?j);
????????%生成一個訓練樣本數量*1的一個向量
????????label_temp?=?zeros((length(index1)+length(index2))1);
????????%svm需要將分類標簽設置為1與-1
????????label_temp(1:length(index1))?=?1;
????????label_temp(length(index1)
評論
共有 條評論