|
function [ classfication ] = SVM2_2( train,test )
%使用matlab自帶的關(guān)于花的數(shù)據(jù)進(jìn)行二分類實(shí)驗(yàn)(150*4),其中,每一行代表一朵花,
%共有150行(朵),每一朵包含4個(gè)屬性值(特征),即4列。且每1-50,51-100,101-150行的數(shù)據(jù)為同一類,分別為setosa青風(fēng)藤類,versicolor云芝類,virginica錦葵類
%實(shí)驗(yàn)中為了使用svmtrain(只處理二分類問題)因此,將數(shù)據(jù)分為兩類,51-100為一類,1-50和101-150共為一類
%實(shí)驗(yàn)先選用2個(gè)特征值,再選用全部四個(gè)特征值來進(jìn)行訓(xùn)練模型,最后比較特征數(shù)不同的情況下分類精度的情況。
load fisheriris %下載數(shù)據(jù)包含:meas(150*4花特征數(shù)據(jù))
%和species(150*1 花的類屬性數(shù)據(jù))
meas=meas(:,1:2); %選取出數(shù)據(jù)前100行,前2列
train=[(meas(51:90,:));(meas(101:140,:))]; %選取數(shù)據(jù)中每類對應(yīng)的前40個(gè)作為訓(xùn)練數(shù)據(jù)
test=[(meas(91:100,:));(meas(141:150,:))];%選取數(shù)據(jù)中每類對應(yīng)的后10個(gè)作為測試數(shù)據(jù)
group=[(species(51:90));(species(101:140))];%選取類別標(biāo)識前40個(gè)數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)
%使用訓(xùn)練數(shù)據(jù),進(jìn)行SVM模型訓(xùn)練
svmModel = svmtrain(train,group,'kernel_function','rbf','showplot',true);
%使用測試數(shù)據(jù),測試分類效果
classfication = svmclassify(svmModel,test,'showplot',true);
%正確的分類情況為groupTest,實(shí)驗(yàn)測試獲得的分類情況為classfication
groupTest=[(species(91:100));(species(141:150))];
%計(jì)算分類精度
count=0;
for i=(1:20)
if strcmp(classfication(i),groupTest(i))
count=count+1;
end
end
fprintf('分類精度為:%f\n' ,count/20);
end
|
|