?? train_set.asv
字號:
%%%%%%%%%%%%%%%%%%%%%%%%%% Training %%%%%%%%%%%%%%%%%%%%%%%%%%
function [Training]=Train_Set(TrainSet)
% 1.計算各類樣本均值向量: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;
% 2.計算樣本類內離散度矩陣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;
% 3.計算投影直線的斜率Training.W
Training.W=(Training.M1-Training.M2)*inv(Training.Sw);
% 4.計算閾值Training.y
%先計算均值ma1,ma2
y=[1:TrainSet.n];
ma1=0;
ma2=0;
N1=TrainSet.n1;
N2=TrainSet.n2;
for i=1:TrainSet.n
y(i)=Training.W*X(:,i);%投影
if TrainSet.CN(i)==1
ma1=ma1+y(i);
else
ma2=ma2+y(i);
end
end
ma1=ma1/N1;
ma2=ma2/N2;
% 方法一:Training.y1=(m1+m2)/2
Training.y1=(ma1+ma2)/2;
%方法二:Training.y2=[(ma1+ma2)/2-ln(Pc1/Pc2)/(N1+N2-2)]
Pc1=N1/(N1+N2);
Pc2=N2/(N1+N2);
Training.y2=[(ma1+ma2)/2-log(Pc1/Pc2)/(N1+N2-2)];
% 方法三: Training.y3=(N1*ma1+N2*ma2)/(N1+N2)
Training.y3=(N1*ma1+N2*ma2)/(N1+N2);
% 方法四:取兩類邊界點的中點為y4
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.y4=(maxy(2)+miny(1))/2;
else
Training.y4=(maxy(1)+miny(2))/2;
end
%%%%%%%%%%%%%%%%%%%%%%%% Training End %%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -