机器学习之Density Peaks

引入

  密度峰聚类思想简单,以一个小故事作为示例讲解:
  从前有一个恶霸村,村里的人无论谁都想拥有自己的势力范围,为了公平起见,众人定了这样一个规矩:所有的人在村里按照自己的意愿扎堆,在以自身为中心的一定范围内,当然大家的标准是一样的,谁临近的人越多,谁就最有可能成为恶霸头子。
  这时张三说,“方圆一百米内,俺周围有一百个人”。
  李四不服,大怒道:“俺有一百零一!” 重相角逐之下,狗蛋的范围内共有两百人,当之无愧的扛把子。但是,他的妹妹,漂亮狗蛋实力相当,怎么办呢?不伤兄妹和气,猜拳吧,于是类似的情况出现时,大家均纷纷效仿。
  最终,形成了以漂亮狗蛋为核心的恶霸集团。
  久而久之,随着时间的推移,村子壮大,难免出现实力虽不及漂亮狗蛋,但是位于村子偏远踏踏的人,比如赵五。
  他寻思着,“这不得行哟,反正他管不着我,不如我自立门户。”如愿以偿的,他实现了自己的小小梦想,与朱八跑了。
  刚想跑了,漂亮狗蛋拿着刀放他脖子,“你走得再远,也是咋村里的人!” 这一个感动啊!当然不敢动啊。
  “我赵五!”
  “我朱八!永远追随大姐脚下。” 至此…

1.基本概念

1.1势力划分依据:dc

  恶霸村里的每一个人,对应于数据集中的一个个样本点,在同一标准下,即diameter dc距离或者average dc距离下,可以划分自己的势力,这两种距离的计算公式如下:
d c d i a m e t e r = m a x ( ∑ i = 0 i < n − 1 ∑ j = i + 1 n d i s t a n c e ( x i , x j ) ) × d c r a t i o (1-1) dc_{diameter}=max(\sum_{i=0}^{i<n-1}\sum_{j=i+1}^{n}distance(x_i,x_j))×dc_{ratio}\tag{1-1} dcdiameter=max(i=0i<n1j=i+1ndistance(xi,xj))×dcratio(1-1)
d c a v e r a g e = a v e r a g e ( ∑ i = 0 i < n − 1 ∑ j = i + 1 n d i s t a n c e ( x i , x j ) ) × d c r a t i o (1-2) dc_{average}=average(\sum_{i=0}^{i<n-1}\sum_{j=i+1}^{n}distance(x_i,x_j))×dc_{ratio}\tag{1-2} dcaverage=average(i=0i<n1j=i+1ndistance(xi,xj))×dcratio(1-2)  式中, n n n代表实例总数,即村民总数; i i i j j j代表循环变量; d c r a t i o dc_{ratio} dcratio代表取值范围百分比,大小为 0 0 0~ 1 1 1,一般取0.03左右,但是最终需以实验结果为准。

1.2 势力大小(局部密度): ρ i ρ_i ρi

  势力大小 ρ i ρ_i ρi即范围内小弟数量,常用的统计方式如下:
k e r n e l c u t o f f : ρ i = ∑ j = 0 n f ( d i s t a n c e ( x i , x j ) − d c ) (1-3) kernel_{cutoff}:ρ_i=\sum_{j=0}^{n}f(distance(xi,xj)-dc)\tag{1-3} kernelcutoff:ρi=j=0nf(distance(xi,xj)dc)(1-3)  其中
f ( x ) = { 1 , x ≤ 0 0 , 其 他 (1-4) f(x)= \begin{cases} 1,\quad x\leq 0\\ 0, \quad 其他 \end{cases} \tag{1-4} f(x)={1,x00,(1-4)  简单说来:在一定dc范围内,有多少个小弟,该村民的 ρ i ρ_i ρi就是多少。但是不可避免的,会出现两个甚至更多村民具有相同数量的小弟,解决方式有如下:
  1)所有的 ρ i ρ_i ρi按从大到小排列之后,即是相同的小弟数量,也会有一定的先后顺序,值得一提的是, 1 − 3 1-3 13中统计时把村民自身也算了进去,这是为了避免出现没有小弟的尴尬情况,当然,不计算自身也是可行的。
  2)使用高斯核,即如下:
k e r n e l g a u s s i a n : ρ i = ∑ j = 0 n e − ( d i s t a n c e ( x i , x j ) d c ) 2 (1-5) kernel_{gaussian}:ρ_i=\sum_{j=0}^{n}e^{-(\frac{distance(xi,xj)}{dc})^2}\tag{1-5} kernelgaussian:ρi=j=0ne(dcdistance(xi,xj))2(1-5)  高斯核相较于截断核的好处在于,可以极大避免出现相同小弟的情况,且能保证随着单个村民范围的其他村民数量增加时,也会相应的增大。

1.3 寻找直接上属:master

  村子大了起来,漂亮狗蛋也管理不过来。因此需要挑出几个其他的代理boss,挑选的方式如下:
  1)漂亮狗蛋无疑是最强的,所以她的直接上属,即master就是她自己,但是如何与其他人区别呢?就令她与她的master的距离为所有村民中距离的最大值。总之就是谁也比不过她;
  2)对于每一个人的master,先决条件为其master的 ρ i ρ_i ρi要大于自己,又为了方便管理,满足先决条件同时又离自己最近的那根村民就是其master。由此,一条条从属关系就以漂亮狗蛋展开;
  3)村子发展到什么样的规模,就需要找相应数量的代理boss。以总boss数量k举例,如何抉择呢? ρ i ρ_i ρi d i s t a n c e ( x i , x i − m a s t e r ) distance(x_i,x_{i-master}) distance(xi,ximaster)的乘积最大的k个村名就是代理boss,其他的村名在按照其master,层层递进就能知道自己的终极master。

2 算法代码

  网上的算法有很多,这里给出老师写的Java代码:CSDN

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值