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