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
|
||||
|
||||
data=rand(Dim,dataN);
|
||||
|
||||
data=load('data');
|
||||
data=data.data;
|
||||
|
||||
SetS=[1;];
|
||||
|
||||
|
|
@ -37,18 +38,21 @@ for clusterI=1:clusterN-1
|
|||
d=data(:,J);
|
||||
%ѰÕÒ×î¶Ì¾àÀë
|
||||
minD=1e20;
|
||||
for D=1:length(SetS)%between j and the closest object in S.
|
||||
% if J==cadSetS(D)
|
||||
% continue
|
||||
% end
|
||||
distance=sum((d-data(:,SetS(D))).^2).^.5;
|
||||
% for D=1:length(SetS)%between j and the closest object in S.
|
||||
% % distance=sum((d-data(:,SetS(D))).^2).^.5;
|
||||
% distance=metricFun( d,data(:,SetS(D)) );
|
||||
if distance<minD
|
||||
minD=distance;
|
||||
end
|
||||
end
|
||||
distanceIJ=sum((d-data(:,cddtI)).^2).^.5;
|
||||
% distanceIJ=metricFun( d,data(:,cddtI) );
|
||||
% if distance<minD
|
||||
% minD=distance;
|
||||
% end
|
||||
% end
|
||||
|
||||
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]);
|
||||
end
|
||||
maxG(cluster)=Cij;
|
||||
|
|
@ -80,10 +84,12 @@ while 1
|
|||
end
|
||||
minD=1e20;
|
||||
min2D=minD;
|
||||
|
||||
for G=1:length(SetS)%between j and the closest object in S.
|
||||
distance=sum((d-data(:,SetS(G))).^2).^.5;
|
||||
% distance=metricFun( d,data(:,SetS(G)) );
|
||||
% distance=sum((d-data(:,SetS(G))).^2).^.5;
|
||||
distance=metricFun( d,data(:,SetS(G)) );
|
||||
if distance<minD
|
||||
min2D=minD;
|
||||
minD=distance;
|
||||
else
|
||||
if distance<min2D
|
||||
|
|
@ -92,6 +98,24 @@ while 1
|
|||
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=metricFun( d,data(:,cadUSetS(H)) );
|
||||
% distanceHJ=sum((d-data(:,cadSetS(I))).^2).^.5;
|
||||
|
|
@ -99,12 +123,12 @@ while 1
|
|||
if distanceIJ>minD
|
||||
Kjih=min([distanceHJ-minD,0]);
|
||||
end
|
||||
if distanceIJ<minD
|
||||
fprintf('Input must be a string\n')
|
||||
end
|
||||
if abs(distanceIJ-minD)<1e-5
|
||||
Kjih=min([distanceHJ,min2D])-minD;
|
||||
elseif distanceIJ<sminD
|
||||
fprintf('Input must be a string\n')
|
||||
end
|
||||
|
||||
sumKjih=sumKjih+Kjih;
|
||||
end
|
||||
if sumKjih<minKjih
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
function [ output_args ] = metricFun( a,b )
|
||||
output_args=sum((a-b).^2).^.5;
|
||||
% output_args=(a-b)'*(a-b);
|
||||
% output_args=sum(abs(a-b));
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue