if distance<minD
min2D=minD;
minD=distance;
else
if distance<min2D
min2D=distance;
end
end
修复这里的bug,因为更新minD后,旧的值应该给min2D,旧的值是第二小的了。
2.
if abs(distanceIJ-minD)<1e-5
Kjih=min([distanceHJ,min2D])-minD;
elseif distanceIJ<sminD
fprintf('Input must be a string\n')
end
由于舍入误差的原因,可能distanceIJ与sminD相等的时候distanceIJ<sminD仍成立。
Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
parent
91ece41bae
commit
d45c8c4eab
58
main.m
58
main.m
|
|
@ -16,7 +16,8 @@ clusterN=10;
|
||||||
% end
|
% end
|
||||||
|
|
||||||
data=rand(Dim,dataN);
|
data=rand(Dim,dataN);
|
||||||
|
data=load('data');
|
||||||
|
data=data.data;
|
||||||
|
|
||||||
SetS=[1;];
|
SetS=[1;];
|
||||||
|
|
||||||
|
|
@ -37,18 +38,21 @@ for clusterI=1:clusterN-1
|
||||||
d=data(:,J);
|
d=data(:,J);
|
||||||
%ѰÕÒ×î¶Ì¾àÀë
|
%ѰÕÒ×î¶Ì¾àÀë
|
||||||
minD=1e20;
|
minD=1e20;
|
||||||
for D=1:length(SetS)%between j and the closest object in S.
|
% for D=1:length(SetS)%between j and the closest object in S.
|
||||||
% if J==cadSetS(D)
|
% % distance=sum((d-data(:,SetS(D))).^2).^.5;
|
||||||
% continue
|
|
||||||
% end
|
|
||||||
distance=sum((d-data(:,SetS(D))).^2).^.5;
|
|
||||||
% distance=metricFun( d,data(:,SetS(D)) );
|
% distance=metricFun( d,data(:,SetS(D)) );
|
||||||
if distance<minD
|
% if distance<minD
|
||||||
minD=distance;
|
% minD=distance;
|
||||||
end
|
% end
|
||||||
end
|
% end
|
||||||
distanceIJ=sum((d-data(:,cddtI)).^2).^.5;
|
|
||||||
% distanceIJ=metricFun( d,data(:,cddtI) );
|
matDistance=repmat(d,1,length(SetS));
|
||||||
|
minD=matDistance-data(:,SetS);
|
||||||
|
minD=diag(minD'*minD);
|
||||||
|
minD=min(minD.^.5);
|
||||||
|
|
||||||
|
% distanceIJ=sum((d-data(:,cddtI)).^2).^.5;
|
||||||
|
distanceIJ=metricFun( d,data(:,cddtI) );
|
||||||
Cij=Cij+max([minD-distanceIJ,0]);
|
Cij=Cij+max([minD-distanceIJ,0]);
|
||||||
end
|
end
|
||||||
maxG(cluster)=Cij;
|
maxG(cluster)=Cij;
|
||||||
|
|
@ -80,10 +84,12 @@ while 1
|
||||||
end
|
end
|
||||||
minD=1e20;
|
minD=1e20;
|
||||||
min2D=minD;
|
min2D=minD;
|
||||||
|
|
||||||
for G=1:length(SetS)%between j and the closest object in S.
|
for G=1:length(SetS)%between j and the closest object in S.
|
||||||
distance=sum((d-data(:,SetS(G))).^2).^.5;
|
% distance=sum((d-data(:,SetS(G))).^2).^.5;
|
||||||
% distance=metricFun( d,data(:,SetS(G)) );
|
distance=metricFun( d,data(:,SetS(G)) );
|
||||||
if distance<minD
|
if distance<minD
|
||||||
|
min2D=minD;
|
||||||
minD=distance;
|
minD=distance;
|
||||||
else
|
else
|
||||||
if distance<min2D
|
if distance<min2D
|
||||||
|
|
@ -92,6 +98,24 @@ while 1
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
smatDistance=repmat(d,1,length(SetS));
|
||||||
|
sminD=smatDistance-data(:,SetS);
|
||||||
|
sminD=diag(sminD'*sminD).^.5;
|
||||||
|
tsminD=sminD;
|
||||||
|
sminD_t=min(sminD);
|
||||||
|
sminD(sminD==sminD_t)=1e20;
|
||||||
|
smin2D=min(sminD);
|
||||||
|
sminD=sminD_t;
|
||||||
|
if abs(sminD-minD)>1e-5 || abs(smin2D-min2D)>1e-5
|
||||||
|
fdf=0;
|
||||||
|
end
|
||||||
|
% minD=sminD;
|
||||||
|
% minD
|
||||||
|
% sminD
|
||||||
|
% min2D=smin2D;
|
||||||
|
|
||||||
|
|
||||||
% distanceIJ=sum((d-data(:,cadUSetS(H))).^2).^.5;%S(I)ÒѾµÈÓÚU(H)
|
% distanceIJ=sum((d-data(:,cadUSetS(H))).^2).^.5;%S(I)ÒѾµÈÓÚU(H)
|
||||||
distanceIJ=metricFun( d,data(:,cadUSetS(H)) );
|
distanceIJ=metricFun( d,data(:,cadUSetS(H)) );
|
||||||
% distanceHJ=sum((d-data(:,cadSetS(I))).^2).^.5;
|
% distanceHJ=sum((d-data(:,cadSetS(I))).^2).^.5;
|
||||||
|
|
@ -99,12 +123,12 @@ while 1
|
||||||
if distanceIJ>minD
|
if distanceIJ>minD
|
||||||
Kjih=min([distanceHJ-minD,0]);
|
Kjih=min([distanceHJ-minD,0]);
|
||||||
end
|
end
|
||||||
if distanceIJ<minD
|
|
||||||
fprintf('Input must be a string\n')
|
|
||||||
end
|
|
||||||
if abs(distanceIJ-minD)<1e-5
|
if abs(distanceIJ-minD)<1e-5
|
||||||
Kjih=min([distanceHJ,min2D])-minD;
|
Kjih=min([distanceHJ,min2D])-minD;
|
||||||
|
elseif distanceIJ<sminD
|
||||||
|
fprintf('Input must be a string\n')
|
||||||
end
|
end
|
||||||
|
|
||||||
sumKjih=sumKjih+Kjih;
|
sumKjih=sumKjih+Kjih;
|
||||||
end
|
end
|
||||||
if sumKjih<minKjih
|
if sumKjih<minKjih
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
function [ output_args ] = metricFun( a,b )
|
function [ output_args ] = metricFun( a,b )
|
||||||
output_args=sum((a-b).^2).^.5;
|
output_args=sum((a-b).^2).^.5;
|
||||||
|
% output_args=(a-b)'*(a-b);
|
||||||
|
% output_args=sum(abs(a-b));
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue