所谓聚类算法是指将一堆没有标签的数据自动划分红几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有类似的特征,以下图所示:算法
根据样本之间的距离或者说是类似性(亲疏性),把越类似、差别越小的样本聚成一类(簇),最后造成多个簇,使同一个簇内部的样本类似度高,不一样簇之间差别性高。学习
相关概念:优化
K值:要获得的簇的个数spa
质心:每一个簇的均值向量,即向量各维取平均便可orm
距离量度:经常使用欧几里得距离和余弦类似度(先标准化)rem
算法流程:数学
一、首先肯定一个k值,即咱们但愿将数据集通过聚类获得k个集合。it
二、从数据集中随机选择k个数据点做为质心。io
三、对数据集中每个点,计算其与每个质心的距离(如欧式距离),离哪一个质心近,就划分到那个质心所属的集合。class
四、把全部数据归好集合后,一共有k个集合。而后从新计算每一个集合的质心。
五、若是新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示从新计算的质心的位置变化不大,趋于稳定,或者说收敛),咱们能够认为聚类已经达到指望的结果,算法终止。
六、若是新质心和原质心距离变化很大,须要迭代3~5步骤。
K-Means采用的启发式方式很简单,用下面一组图就能够形象的描述:
上图a表达了初始的数据集,假设k=2。在图b中,咱们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,而后分别求样本中全部点到这两个质心的距离,并标记每一个样本的类别为和该样本距离最小的质心的类别,如图c所示,通过计算样本和红色质心和蓝色质心的距离,咱们获得了全部样本点的第一轮迭代后的类别。此时咱们对咱们当前标记为红色和蓝色的点分别求其新的质心,如图d所示,新的红色质心和蓝色质心的位置已经发生了变更。图e和图f重复了咱们在图c和图d的过程,即将全部点的类别标记为距离最近的质心的类别并求新的质心。最终咱们获得的两个类别如图f。
坐标系中有六个点:
一、咱们分两组,令K等于2,咱们随机选择两个点:P1和P2
二、经过勾股定理计算剩余点分别到这两个点的距离:
三、第一次分组后结果:
组A:P1
组B:P二、P三、P四、P五、P6
四、分别计算A组和B组的质心:
A组质心仍是P1=(0,0)
B组新的质心坐标为:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)
五、再次计算每一个点到质心的距离:
六、第二次分组结果:
组A:P一、P二、P3
组B:P四、P五、P6
七、再次计算质心:
P哥1=(1.33,1)
P哥2=(9,8.33)
八、再次计算每一个点到质心的距离:
九、第三次分组结果:
组A:P一、P二、P3
组B:P四、P五、P6
能够发现,第三次分组结果和第二次分组结果一致,说明已经收敛,聚类结束。
优势:
一、原理比较简单,实现也是很容易,收敛速度快。
二、当结果簇是密集的,而簇与簇之间区别明显时, 它的效果较好。
三、主要须要调参的参数仅仅是簇数k。
缺点:
一、K值须要预先给定,不少状况下K值的估计是很是困难的。
二、K-Means算法对初始选取的质心点是敏感的,不一样的随机种子点获得的聚类结果彻底不一样 ,对结果影响很大。
三、对噪音和异常点比较的敏感。用来检测异常值。
四、采用迭代方法,可能只能获得局部的最优解,而没法获得全局的最优解。
一、K值怎么定?
答:分几类主要取决于我的的经验与感受,一般的作法是多尝试几个K值,看分红几类的结果更好解释,更符合分析目的等。或者能够把各类K值算出的E作比较,取最小的E的K值。
二、初始的K个质心怎么选?
答:最经常使用的方法是随机选,初始质心的选取对最终聚类结果有影响,所以算法必定要多执行几回,哪一个结果更reasonable,就用哪一个结果。 固然也有一些优化的方法,第一种是选择彼此距离最远的点,具体来讲就是先选第一个点,而后选离第一个点最远的当第二个点,而后选第三个点,第三个点到第1、第二两点的距离之和最小,以此类推。第二种是先根据其余聚类算法(如层次聚类)获得聚类结果,从结果中每一个分类选一个点。
三、关于离群值?
答:离群值就是远离总体的,很是异常、很是特殊的数据点,在聚类以前应该将这些“极大”“极小”之类的离群数据都去掉,不然会对于聚类的结果有影响。可是,离群值每每自身就颇有分析的价值,能够把离群值单独做为一类来分析。
四、单位要一致!
答:好比X的单位是米,Y也是米,那么距离算出来的单位仍是米,是有意义的。可是若是X是米,Y是吨,用距离公式计算就会出现“米的平方”加上“吨的平方”再开平方,最后算出的东西没有数学意义,这就有问题了。
五、标准化
答:若是数据中X总体都比较小,好比都是1到10之间的数,Y很大,好比都是1000以上的数,那么,在计算距离的时候Y起到的做用就比X大不少,X对于距离的影响几乎能够忽略,这也有问题。所以,若是K-Means聚类中选择欧几里德距离计算距离,数据集又出现了上面所述的状况,就必定要进行数据的标准化(normalization),即将数据按比例缩放,使之落入一个小的特定区间。