📄 train_set.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%% Training %%%%%%%%%%%%%%%%%%%%%%%%%%
function [Training]=Train_Set(TrainSet)
% 计算各类样本均值向量:Training.M1,Training.M2
Training.M1=[1:TrainSet.tn]*0;
Training.M2=[1:TrainSet.tn]*0;
X=TrainSet.X';
for i=1:TrainSet.n
if TrainSet.CN(i)==1
Training.M1=Training.M1+X(:,i)';
else
Training.M2=Training.M2+X(:,i)';
end
end
Training.M1=Training.M1/TrainSet.n1;
Training.M2=Training.M2/TrainSet.n2;
% 计算样本类内离散度矩阵Si 和 总类内离散度矩阵Training.Sw
S1=zeros(TrainSet.tn);
S2=zeros(TrainSet.tn);
for i=1:TrainSet.n
if TrainSet.CN(i)==1
S1=S1+(X(:,i)'-Training.M1)'*(X(:,i)'-Training.M1);
else
S2=S2+(X(:,i)'-Training.M2)'*(X(:,i)'-Training.M2);
end
end
Training.Sw=S1+S2;
% 计算投影直线的斜率Training.W
Training.W=(Training.M1-Training.M2)*inv(Training.Sw);
% 计算阈值Training.y
y=[1:TrainSet.n];
% 方法一:Training.y1=(m1+m2)/2
m1=0;
m2=0;
for i=1:TrainSet.n
y(i)=Training.W*X(:,i);
if TrainSet.CN(i)==1
m1=m1+y(i);
else
m2=m2+y(i);
end
end
m1=m1/TrainSet.n1;
m2=m2/TrainSet.n2;
Training.y1=(m1+m2)/2;
% 方法二:取全体样本的均值点为y2
Training.y2=(m1*TrainSet.n1+m2*TrainSet.n2)/TrainSet.n;
% 方法三:取两类边界点的中点为y3
maxy=[realmax*-1,realmax*-1];
miny=[realmax,realmax];
for i=1:TrainSet.n
if TrainSet.CN(i)==1
maxy(1)=max(maxy(1),y(i));
miny(1)=min(miny(1),y(i));
else
maxy(2)=max(maxy(2),y(i));
miny(2)=min(miny(2),y(i));
end
end
if maxy(1)-miny(2)>maxy(2)-miny(1)
Training.y3=(maxy(2)+miny(1))/2;
else
Training.y3=(maxy(1)+miny(2))/2;
end
% 方法四:取两类边界点的比例中点为y4
n1=0;
n2=0;
if maxy(1)-miny(2)>maxy(2)-miny(1)
for i=1:TrainSet.n
if TrainSet.CN(i)==1 & y(i)-Training.y3<0
n1=n1+1;
elseif TrainSet.CN(i)==-1 & y(i)-Training.y3>0
n2=n2+1;
end
end
if n1~=0 & n2~=0
Training.y4=(maxy(2)*n2+miny(1)*n1)/(n1+n2);
else
Training.y4=(maxy(2)+miny(1))/2;
end
else
for i=1:TrainSet.n
if TrainSet.CN(i)==1 & y(i)>Training.y3
n1=n1+1;
elseif TrainSet.CN(i)==-1 & y(i)<Training.y3
n2=n2+1;
end
end
if n1~=0 & n2~=0
Training.y4=(miny(2)*n2+maxy(1)*n1)/(n1+n2);
else
Training.y4=(maxy(1)+miny(2))/2;
end
end
%%%%%%%%%%%%%%%%%%%%%%%% Training End %%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -