<Agglomerative Fuzzy K-means Clustering Algorithm with Selection of Number of Clusters>凝聚聚类

白话算法流程

1:赋值个挺大的分类数k
2:针对k利用fcm做聚类
3:针对聚类结果利用评估函数求一下
4:k=k-1;
5:重复2~4步
6:直到k=1
7:评估函数里取个最小值,那个时候的k就是我们认为的最理想分类时的取数

评估函数,在这个论文里,是作为一个“惩罚项”的身份出现的。

解决的问题:

  • 不需要提前指定具体分类数目,而是自己根据目标函数,进行求解合适的(最多的)类数。
  • 解决了软硬分割的非凸优化问题,初始中心的随机性选择不会影响后续聚类中心的求解,使聚类过程对初始聚类中心不敏感。算法可以从不同的初始聚类中心集生成更一致的聚类结果

熵:混乱度

       春天到了,希望小学组织100个小学生春游,娃儿们太小不懂事,如果带队老师数量太少,可能照看不过来,瓜娃子没有秩序,乱跑容易出事,这个时候,我们说娃儿们的混乱度是比较大的。为了避免意外发生,学校决定多安排几个老师,争取每个老师能看2~3个孩子,自己负责自己的那几名娃儿,过马路的时候也整整齐齐,我们说这个时候娃儿们的混乱度是比较低的。那如果要想混乱度最低,那每个学生都配备一个老师,一对一的看管,娃儿们绝对跑不了。反之,当只有一个带队老师的时候,他是看不过来这么多娃子的,混乱度是最高的。
       在聚类里,我们说,当聚类中心=样本个数时,混乱度最低,一个萝卜一个坑,也不吵架。当聚类中心个数=1的时候,全场大混乱。如果形象的描述这种混乱度呢?前辈们设定了一个惩罚项:

       首先,$\lambda$ 是个权重(>0),他会自己寻找合适的权重,来对聚类结果进行分析。        我们发现,这个惩罚项算出来始终是负值。因为u的取值在(0,1),那logu一定在(-无穷~0)。        当一个样本离它的中心特别远的时候,特征是如下两点:1它的混乱度还是挺高的,2,隶属度挺低。牵扯这么两个因素,那我怎么同时评判它到底有多混乱(距离中心和其他样本比起来到底差了多少呢)。我们发现, **越小的隶属度,取对数后的绝对值越大**,**第一个样本的混乱度=隶属度 * log隶属度,第二个样本的混乱度=隶属度2*log隶属度,所有样本的混乱度=∑**。

       现在混乱度有了,怎么得到聚类呢?目前还是不能直观的理解:聚类个数和样本混乱度之间的联系。关键在权重 λ \lambda λ上。分析前先把目标函数搬上来

就是在fcm的目标函数后边加了个惩罚项。
       我们观察,P要想最小,他依靠前一项和后一项。如果 λ \lambda λ比较小,那么目标函数就不太依赖于混乱度这个因素了,啥意思呢,那就是指,你再混乱也影响不到我。那就意味着,当类别数巨大无比,更甚者,一个样本给你一个聚类中心时,谁都不混乱了。你爱咋影响咋影响。如果 λ \lambda λ比较大,后一项明显决定目标函数的走向,那后一项一定要最小才好。怎么样叫最小呢,本来后一项就是负的,那最小的意思就是绝对值最大。那也就意味着样本最混乱。啥叫最混乱,上面说了,我就给你一个类中心,那无可救药的乱。都不听使唤了。
       由此可得: λ \lambda λ的取值,影响着聚类中心个数 λ \lambda λ不仅作用于目标函数,它还参与更新中心和隶属度(后续给出更新C和U的函数,里面有 λ \lambda λ),目标函数是靠C和U影响的,C和U的出现,才影响着目标函数,目标函数仅仅是一个评判标准,他只关注结果,对过程是不关注的。)
       问题又来了,到底咋影响的聚类中心的个数呀,个数不是一开始指定的比较大的一个数嘛?(文章开头)。一个很直观的发现,现在关注P,我想让他最小,那当我不断调整 λ \lambda λ的大小的时候,这个时候只能是影响了隶属度U,那顺理成章,C也改变了。那C再改变,它该是k个还是k个,怎么能减少或者增加个数呢?其实个数的确不能减少,但是聚类中心可以重叠呀!这不就变相的减少个数了嘛,本来5个中心,迭代迭代,有3个点重合了,跑一块去了,那俩点不重合。猛的一看,就剩3个中心了。这不就影响聚类中心个数了嘛。
       好了,现在上隶属度U的更新函数:

对吧, $\lambda$的确参与者U的更新。上式的意思就是分子/分母的和,确保一个样本隶属度和为1

       还有个关注点,聚类中心重合了之后怎么办?就重合着不管了吗?这只是目测是3个点,其实k还是5(上例)。简单,把重叠的那个中心删掉,只保留一个。同理,隶属度相应的那一列也删掉,只保留单独的一个就够了。Nice!!!

       说起来原理简单,大体是这样,但是逻辑难理通顺,代码写了半天,最后才跑通。主要还是按文章给的流程图,我简单写写
       1首先,目标函数最小化 ,是按混乱度升高的顺序做的。即: λ \lambda λ递增来处理。那自然而然的是我的中心数目减少,即k递减。Ok
       2 既然k递减,那我先给个比较大的k,一直递减下去,总会遇到一个正确的分类数目k。
       3 k的问题解决了,但是 λ \lambda λ的问题很麻烦,就是它的初值不好定呀,为啥,人家分类数k,你写个20,200,9999都没问题,但是迭代递减呗,总能递减到0。但是! λ \lambda λ不好定,假如我定了个999,巨大无比,即P的第二项占最大占比,要想让它最小,负号里面的值取最大,即混乱无比。那所有聚类中心都重叠成一个了。但是我们的想法是让 λ \lambda λ递增,进而实现聚类中心的个数逐级递减。这家伙上来数量就是一个了,那还递减啥??所以问题的关键在如何找到一个满足我分类数k类样本的 λ \lambda λ。这句话有点长。意思就是说:我先划定了k类,那我求个 λ \lambda λ,要求是: λ \lambda λ引导下的U计算出来的C不能出现重叠,即互不影响的k个聚类中心。
那只能迭代求了。程序里我写的很简约。代码优化了下,没有丝毫冗余
在这里插入图片描述

横坐标: λ \lambda λ 纵坐标:k

       随着 λ \lambda λ的增加,类别数递减,明显,减到3类的时候,尽管 λ \lambda λ还在增大,但是类别数暂时没下降,意思就是说,在3类的分布下,聚类中心能够使所有样本的混乱度保持稳定,即:虽然目标函数的 λ \lambda λ参与了,但是对于整体的熵值,隶属度还是能够保证最小化的。资源最佳分配嘛,娃儿们虽然挺多,但是也没必要一个娃子配一个老师代领,所以就是在求最少老师看管100个瓜娃子的数量。

数据说明惩罚项与聚类个数的关系

       首先研究下 u*log(u)的图像,如下图:

在这里插入图片描述
在这里插入图片描述

       最小值点在0.37附近,这是单侧计算,根据隶属度和为1,假设聚类有两个中心,每个样本对应第一个聚类中心隶属度为u1,那么第二个隶属度为1-u1,那么u1 * log(u1)+ u2*log(u2)
的图像如下图:

在这里插入图片描述

图2:两个聚类中心的求解和

       明显看出,当隶属度同为0.5的时候,∑u*log(u) 是最小的。意味着每个样本到每个聚类中心距离相等的情况下,和最小。问题来了,任意两个点只要重合,那对所有的样本,隶属度都是0.5,那中心还能确定吗。当然可以,第二样的要求是中心重合,但是对于中心选在哪里重合是未知的,而第一项,他限制了距离!!也就是说,距离不能太远,否则会影响第一项的大小,导致目标函数不是最小。
       随着权重 λ \lambda λ的增大,总会出现一个合适的距离,和对应的几个中心,使得目标函数最小。当 λ \lambda λ继续增大时,距离的影响跟不上隶属度影响的情况下,只能舍弃距离,而调整隶属度使他们都是0.5,这样才能保证目标函数的最小。但是这样做的结果就是,距离不考虑了,我就随便找个点,让所有聚类中心都选在这儿就完了。

代码见:https://download.csdn.net/download/qq_41749451/20814180?spm=1001.2014.3001.5503

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值