clear all;
clc;
close all;
%载入特征向量
load tezheng_gaoxing.txt;
load tezheng_kongju.txt;
load tezheng_beishang.txt;
load tezheng_fennu.txt;
for i=1:60 %60个数据样本
xintezheng_gaoxing(i,1:33)=tezheng_gaoxing(i,1:33); %33个特征
xintezheng_gaoxing(i,[3 5 14 16 25 27])=0; %截取3,5,14,16,25,27为需要的表情点
xintezheng_gaoxing(i,34)=1; %类别特征号
end
for i=1:60
xintezheng_kongju(i,1:33)=tezheng_kongju(i,1:33);
xintezheng_kongju(i,[3 5 14 16 25 27])=0;
xintezheng_kongju(i,34)=2;
end
for i=1:60
xintezheng_beishang(i,1:33)=tezheng_beishang(i,1:33);
xintezheng_beishang(i,[3 5 14 16 25 27])=0;
xintezheng_beishang(i,34)=3;
end
for i=1:60
xintezheng_fennu(i,1:33)=tezheng_fennu(i,1:33);
xintezheng_fennu(i,[3 5 14 16 25 27])=0;
xintezheng_fennu(i,34)=4;
end
irisy=[ xintezheng_gaoxing(i,34),xintezheng_kongju(i,34),xintezheng_beishang(i,34),xintezheng_fennu(i,34)];
irisy=irisy';
tezheng_hunhe(1:50,:)=xintezheng_gaoxing(1:50,:);
tezheng_hunhe(51:100,:)=xintezheng_kongju(1:50,:);
tezheng_hunhe(101:150,:)=xintezheng_beishang(1:50,:);
tezheng_hunhe(151:200,:)=xintezheng_fennu(1:50,:);
tezheng_hunhe(201:210,:)=xintezheng_gaoxing(51:60,:);
tezheng_hunhe(211:220,:)=xintezheng_kongju(51:60,:);
tezheng_hunhe(221:230,:)=xintezheng_beishang(51:60,:);
tezheng_hunhe(231:240,:)=xintezheng_fennu(51:60,:);
irisData=tezheng_hunhe;
%irisData是读入数据
kernel = 'rbf';
c = [1 10 100 1000 10000];
sigma = 1 : 0.5: 3;
[C, Sigma] = meshgrid(c, sigma); %让c与sigma中的量形成网格点
C = C(:);
Sigma = Sigma(:);
Err = zeros(size(C));
n = length(Err);
Xtest = irisData(201:240,1:33);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%First train Isis-setosa(1) and Isis-versicolor(2) using grid search.
X = irisData(1:100, 1 : 33);
Y = irisData(1:100, 34);
Y(Y==1) = 1;
Y(Y==2) = -1;
Xtrain = X;
for i = 1 : n
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[~, ~, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
end
[~, i] = min(Err);
%Compute the minimum one again, using the optimal C and Sigma.
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[~, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
[Y12, Z] = yxcSVMclassifer(Xtrain, Xtest, Y, alphaStar, bStar, kernel, Sigma(i));
Y12(Y12==1) = 1;
Y12(Y12==-1) = 2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Then train Isis-versicolor(2) and Isis-virginica(3) using grid search.
X = irisData(51 : 150, 1 : 33);
Y = irisData(51 : 150, 34);
Y(find(Y==2)) = 1;
Y(find(Y==3)) = -1;
Xtrain = X;
for i = 1 : n
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
end
[mErr, i] = min(Err);
%Compute the minimum one again, using the optimal C and Sigma.
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
[Y23, Z] = yxcSVMclassifer(Xtrain, Xtest, Y, alphaStar, bStar, kernel, Sigma(i));
Y23(find(Y23==1)) = 2;
Y23(find(Y23==-1)) = 3;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Last train Isis-setosa(3) and Isis-virginica(4) using grid search.
X = irisData([101:200], 1 : 33);
Y = irisData([101:200], 34);
Y(find(Y==3)) = 1;
Y(find(Y==4)) = -1;
Xtrain = X;
for i = 1 : n
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
end
[mErr, i] = min(Err);
%Compute the minimum one again, using the optimal C and Sigma.
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
% Test all data on the Isis-versicolor(2) and Isis-virginica(3) data set.
[Y34, Z] = yxcSVMclassifer(Xtrain, Xtest, Y, alphaStar, bStar, kernel, Sigma(i));
Y34(find(Y34==1)) = 3;
Y34(find(Y34==-1)) = 4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%First train Isis-setosa(1) and Isis-versicolor(3) using grid search.
X = irisData([1:50 101:150], 1:33);
Y = irisData([1:50 101:150], 34);
Y(find(Y==1)) = 1;
Y(find(Y==3)) = -1;
Xtrain = X;
for i = 1 : n
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
end
[mErr, i] = min(Err);
%Compute the minimum one again, using the optimal C and Sigma.
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
[Y13, Z] = yxcSVMclassifer(Xtrain, Xtest, Y, alphaStar, bStar, kernel, Sigma(i));
Y13(find(Y13==1)) = 1;
Y13(find(Y13==-1)) = 3;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Then train Isis-versicolor(2) and Isis-virginica(4) using grid search.
X = irisData([51 : 100 151:200], 1 : 33);
Y = irisData([51 : 100 151:200], 34);
Y(find(Y==2)) = 1;
Y(find(Y==4)) = -1;
Xtrain = X;
for i = 1 : n
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[~, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
end
[mErr, i] = min(Err);
%Compute the minimum one again, using the optimal C and Sigma.
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
[Y24, Z] = yxcSVMclassifer(Xtrain, Xtest, Y, alphaStar, bStar, kernel, Sigma(i));
Y24(find(Y24==1)) = 2;
Y24(find(Y24==-1)) = 4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Last train Isis-setosa(1) and Isis-virginica(4) using grid search.
X = irisData([1:50 151 : 200], 1 : 33);
Y = irisData([1:50 151 : 200], 34);
Y(find(Y==1)) = 1;
Y(find(Y==4)) = -1;
Xtrain = X;
for i = 1 : n
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[~, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
end
[mErr, i] = min(Err);
%Compute the minimum one again, using the optimal C and Sigma.
[alphaStar, bStar, SVIndex] = yxcSVMtrain(X, Y, C(i), kernel, Sigma(i));
[YClassified, Z, Err(i)] = yxcSVMclassifer(Xtrain, Xtrain, Y, alphaStar, bStar, kernel, Sigma(i));
% Test all data on the Isis-versicolor(2) and Isis-virginica(3) data set.
[Y14, Z] = yxcSVMclassifer(Xtrain, Xtest, Y, alphaStar, bStar, kernel, Sigma(i));
Y14(Y14==1) = 1;
Y14(Y14==-1) = 4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%We use a little trick to find out which class the points belong to
Y1234 = sort([Y12 Y23 Y34 Y13 Y24 Y14], 2); %对数组的第2维进行升序排列
yy12=(Y1234([1:20],3))';
yy34=(Y1234([21:40],4))';
YY1234=[yy12,yy34];
YY1234=YY1234';
% Plot the classified data.
iY1 = find(Y1234 == 1);
iY2 = find(Y1234 == 2);
iY3 = find(Y1234 == 3);
iY4 = find(Y1234 == 4);
% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % %%%%%找出判断错误的点%%%%%%%%%%%%%%%%
count=0;
for i=1:length(irisy)
if irisy(i)~=YY1234(i)
count=count+1;
end
end
% %%%%%错误率