记自己写的聚类算法思想

背景:项目中有用到一些聚类算法,比如DensityPeakCluster,Kmeans等,但是DensityPeakCluster会把簇给连起来,Kmeans又不能定义半径,导致聚类的结果在客户看来无法解释,常常导致两个完全不像的问法聚到了一起,于是自己想了个聚类算法 ,姑且称之为投票算法。

算法思想:

1.每个点都是一个自由思想的选民和被投票人,行为决定顺序如下:第一优先级为自己作为一个团队的核心(中心点),其次,尽量投票给和自己关系较密切(距离小于delta)的人,最后,绝不会投票给自己的仇人(距离大于delta)。

2.第一轮开始,每个选民获取一张选票,会投给和自己关系最密切的人(不能投给自己),然后从获得选票最多的人开始举行成团仪式:只要选票大于最少团员数(rho),则成团,并且所有团员投给其他人的票作废

3.第二轮开始,每个未成团的选民获取两张选票,按顺序投给自己关系最密切的两个人(如果其中有已成团的核心,那么直接进入该团),投完后继续举行成团仪式

4.开始第3-n轮,逻辑和第二轮相同,每次未成团的选民都会较上一轮多出一张选票,直至所有未成团的选民都无票可投(和自己关系较好的人都未成团,并且无法成团)

经验证,这种聚类算法的聚类结果可解释(因为所有的选民到中心点的距离可控),效率比kmeans要慢,但是比DensityPeakCluster要快一些(虽然看着很多轮,但是每一轮都会有不少选民退出下一轮投票)

原文地址:https://www.cnblogs.com/fiftyonesteps/p/15066428.html