%% Empty the environment variable close all; clear; clc; format compact; %% Load data load data1 c1 % mosaic-leaf load data2 c2 % semi-mosaic-leaf load data3 c3 % round-leaf data(1:241,:)=c1(1:241,:); data(242:530,:)=c2(1:289,:); data(531:801,:)=c3(1:271,:); wine=data(:,1:19); wine_labels=data(:,20); % Training group and testing group train_wine = [wine(1:121,:);wine(242:386,:);wine(531:666,:)]; train_wine_labels = [wine_labels(1:121);wine_labels(242:386);wine_labels(531:666)]; test_wine = [wine(122:241,:);wine(387:530,:);wine(667:801,:)]; test_wine_labels = [wine_labels(122:241);wine_labels(387:530);wine_labels(667:801)]; %% Data preprocessing % The normalization algorithm [mtrain,ntrain] = size(train_wine); [mtest,ntest] = size(test_wine); dataset = [train_wine;test_wine]; [dataset_scale,ps] = mapminmax(dataset',0,1); dataset_scale = dataset_scale'; train_wine = dataset_scale(1:mtrain,:); test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: ); %% The genetic algorithm (GA) algorithm to select the best c&g %{ ga_option.maxgen = 200; ga_option.sizepop = 20; ga_option.cbound = [0,100]; ga_option.gbound = [0,100]; ga_option.v = 5; ga_option.ggap = 0.9; [bestacc,bestc,bestg] = gaSVMcgForClass(train_wine_labels,train_wine,ga_option); disp('best c&g'); str = sprintf( 'Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g',bestacc,bestc,bestg); disp(str); cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),'-t',1]; %% SVM model training model = svmtrain(train_wine_labels,train_wine,cmd); %} %% model training model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1.5 -t 1'); %% prediction [predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model); %% Result analysis figure; hold on; plot(test_wine_labels,'o'); plot(predict_label,'r*'); xlabel('training group','FontSize',12); ylabel('label','FontSize',12); legend('The classification for actual testing group.','The classification for predicted testing group.'); grid on; %% 10 times of cross validation %{ dataNew=data(:,1:end-1); target=data(:,20); [M,N]=size(dataNew); indices=crossvalind('Kfold',dataNew(1:M,N),10); for k=1:10 test=(indices==k); train=~test; train_data=dataNew(train,:); train_target=target(train,:); test_data=dataNew(test,:); test_target=target(test,:); [mtrain,ntrain] = size(train_data); [mtest,ntest] = size(test_data); dataset = [train_data;test_data]; [dataset_scale,ps] = mapminmax(dataset',0,1); dataset_scale = dataset_scale'; train_data = dataset_scale(1:mtrain,:); test_data = dataset_scale( (mtrain+1):(mtrain+mtest),: ); model = svmtrain(train_target, train_data, '-c 2 -g 1.5 -t 1'); [predict_label, accuracy] = svmpredict(test_target, test_data, model); total_index(k)=accuracy(1,1); end Average_Cross_Validation_Accuracy=sum(total_index(:))/10 Best_Cross_Validation_Accuracy=max(total_index(:)) %}