经典的DPC算法在异常值检测方面有局限性,GDPC:Gravitation-based Density Peaks Clustering algorithm这篇论文引入了物理中G引力系数这一概念,使得异常点的检测更为优化。
简单来说,就是用1/F代替了原来决策图中的δ,由于这篇论文中个人认为有些许描述不清(也可能是本人太菜),代码实现搞了好久,特此记录。
for i=1:ND
for j=1:ND
f(i,j)=(dist(i,j)*dist(i,j))/(rho(i)*rho(j));% 1/F论文中用的δ,其实直接用dist比较好
end
end
maxf=max(max(f));
for ii=2:ND
F(ordrho(ii))=maxf;
for jj=1:ii-1
if(f(ordrho(ii),ordrho(jj))<F(ordrho(ii)))
F(ordrho(ii))=f(ordrho(ii),ordrho(jj));
nneigh(ordrho(ii))=ordrho(jj); %近邻不用delta判定,用1/F进行判定
end
end
if(F(ordrho(ii))>0.00005) %这个针对不同情况使用,避免出现特大值使得决策图显示不直观
F(ordrho(ii))=0.00005;
end
end
F(ordrho(1))=max(F(:));