前面做过一个神经网络的分类器
现在有一些数据需要做聚类处理。
那什么叫做聚类呢 跟分类有什么区别。
分类:明确知道类别,然后把数据归类。
聚类:你不知道类别,但你想把这些数据分成N类,根据某种算法把数据进行分组,相似或相近的自动归到一组中。(一般用k均值聚类算法)
聚类与分类相比较:
分类:实例式学习,分类前明确各个类别的信息,并可以直接断言每个元素映射到一个类别;
聚类:无监督学习,在聚类前不知道类别甚至不给定类别数量,不依赖预定义的类和类标号。
聚类的应用:
在许多时候分类条件不满足,尤其是处理海量数据时,如果通过预处理使数据满足分类算法的要求,代价巨大,应考虑聚类算法。
聚类的用途是很广泛的。在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。它作为数据挖掘中的一个模块,可以作为一个单独的工具以发现数据库中分布的一些深层的信息,并且概括出每一类的特点,或者把注意力放在某一个特定的类上以作进一步的分析;并且,聚类分析也可以作为数据挖掘算法中其他分析算法的一个预处理步骤。
目前聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域。
聚类算法的局限:
(1)要求数据分离度好。对相互渗透的类无法得到统一的结果。
(2)线性相关。聚类方法分析仅是简单的一对一的关系。忽视了生物系统多因素和非线性的特点。
K均值聚类算法
算法思想:
给定一个有N个元素的集合,划分为K个簇,每一个簇就代表一个聚类,K<N。而且这K个簇满足下列条件:
(1) 每一个簇至少包含一个元素;
(2) 每一个元素属于且仅属于一个簇。
对于给定的K,算法首先给出一个初始的分组方法,以后通过反复迭代的方法改变分组,使得每一次改进之后的分组方案都较前一次优化,即同一分组中的元素相异度降低,而不同分组中的元素相异度升高。
只要去重后集合的元素仍大于k时 才能进行聚类
算法过程:
1、预处理: 数据规格化;
(1).剔除异常数据 剔除异常数据的方法可考虑均值-标准差法
(2).(具体根据情况判断是否需要归一化)
归一化:
当某个属性的取值跨度远大于其他属性时,不利于真实反映真实的相异度,为了解决这个问题,一般要对属性值进行规格化。所谓规格化就是将各个属性值按比例映射到相同的取值区间,这样是为了平衡各个属性对距离的影响。通常将各个属性均映射到[0,1]区间,映射公式为:
x'=x-集合最小值/集合最大值-集合最小值
2、从D中随机取k个元素,作为k个簇的各自的中心。
3、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
4、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
5、将D中全部元素按照新的中心重新聚类。
6、重复第4步,直到聚类结果收敛到不再变化。
7、将结果输出。 |