机器学习面试题之Kmeans(七)

聚类

分类(class)与聚类(cluster)不同,分类是有监督学习模型,聚类属于无监督学习模型。聚类讲究使用一些算法把样本划分为n个群落。一般情况下,这种算法都需要计算欧氏距离。

欧氏距离即欧几里得距离。
P ( x 1 ) Q ( x 2 ) : x 1 x 2 = ( x 1 x 2 ) 2 P ( x 1 , y 1 ) Q ( x 2 , y 2 ) : ( x 1 x 2 ) 2 + ( y 1 y 2 ) 2 P ( x 1 , y 1 , z 1 ) Q ( x 2 , y 2 , z 2 ) : ( x 1 x 2 ) 2 + ( y 1 y 2 ) 2 + ( z 1 z 2 ) 2 P(x_1) - Q(x_2): |x_1-x_2| = \sqrt{(x_1-x_2)^2} \\ P(x_1,y_1) - Q(x_2,y_2): \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} \\ P(x_1,y_1,z_1) - Q(x_2,y_2,z_2): \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2} \\
用两个样本对应特征值之差的平方和之平方根,即欧氏距离,来表示这两个样本的相似性。

K均值算法

第一步:随机选择k个样本作为k个聚类的中心,计算每个样本到各个聚类中心的欧氏距离,将该样本分配到与之距离最近的聚类中心所在的类别中。

第二步:根据第一步所得到的聚类划分,分别计算每个聚类的几何中心,将几何中心作为新的聚类中心,重复第一步,直到计算所得几何中心与聚类中心重合或接近重合为止。
在这里插入图片描述注意:

  1. 聚类数k必须事先已知。借助某些评估指标,优选最好的聚类数。
  2. 聚类中心的初始选择会影响到最终聚类划分的结果。初始中心尽量选择距离较远的样本。

以下原文链接https://blog.csdn.net/hua111hua/article/details/86556322

1.K-means中常用的到中心距离的度量有哪些?
K-means中比较常用的距离度量是欧几里得距离和余弦相似度。

第一种:欧几里得距离,最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,N维欧式空间中两点x1和x2间的距离公式:
在这里插入图片描述
第二种:余弦相似度,余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或者长度上。下图表示余弦相似度的余弦是哪个角的余弦,A,B是三维空间中的两个向量,这两个点与三维空间原点连线形成的交,如果角度越小,说明这两个向量在方向上越接近,在聚类时就归成一类。
在这里插入图片描述2.kmeans聚类中,如何确定k的大小?
转自AI商学院kmeans聚类中,如何确定k的大小?
1 )按需选择
简单地说就是按照建模的需求和目的来选择聚类的个数。比如说,一个游戏公司想把所有玩家做聚类分析,分成顶级、高级、中级、菜鸟四类,那么K=4;如果房地产公司想把当地的商品房分成高中低三档,那么K=3。
按需选择虽然合理,但是未必能保证在做K-Means时能够得到清晰的分界线。
2) 观察法
就是用肉眼看,看这些点大概聚成几堆。这个方法虽然简单,但是同时也模棱两可。
在这里插入图片描述第一张是原始点,第二张分成了两类,第三张是三类,第四张是四类。至于K到底是选3还是选4,可能每个人都有不同的选择。

观察法的另一个缺陷就是:原始数据维数要低,一般是两维(平面散点)或者三维(立体散点),否则人类肉眼则无法观察。

对于高维数据,我们通常利用PCA降维,然后再进行肉眼观察。

3)手肘法Elbow Method

手肘法本质上也是一种间接的观察法。这里需要一点K-Means的背景知识。当K-Means算法完成后,我们将得到K个聚类的中心点Mi,i=1,2,⋯,Ki=1,2,⋯,K。

以及每个原始点所对应的聚类Ci,i=1,2,⋯,K。我们通常采用所有样本点到它所在的聚类的中心点的距离的和作为模型的度量,记为DK。
在这里插入图片描述
这里距离可以采用欧式距离。
对于不同的K,最后我们会得到不同的中心点和聚类,所有会有不同的度量。我们把K作为横坐标,DK作为纵坐标,可以得到下面的折线。
在这里插入图片描述很显然K越大,距离和越小。

但是我们注意到K=3是一个拐点,就像是我们的肘部一样,K=1到3下降很快,K=3之后趋于平稳。

手肘法认为这个拐点就是最佳的K。

换句话说,曲线类似于人的手肘,“肘关节”部分对应的 K 值就是最恰当的 K 值。

04Gap Statistic法
这个方法是源自斯坦福几个machine learning大牛的paper Estimating the number of clusters in a data set via the gap statistic 。
这里我们要继续使用上面的DK,Gap Statistic的定义为:
在这里插入图片描述
这里E(logDk)指的是logDk的期望。

这个数值通常通过蒙特卡洛模拟产生,我们在样本里所在的矩形区域中(高维的话就是立方体区域)按照均匀分布随机地产生和原始样本数一样多的随机样本,并对这个随机样本做K-Means,从而得到一个DK。

如此往复多次,通常20次,我们可以得到20个logDK。对这20个数值求平均值,就得到了E(logDK)的近似值。最终可以计算Gap Statisitc。而Gap statistic取得最大值所对应的K就是最佳的K。

用上图的例子,我们计算了K=1,2,…9对应的Gap Statisitc.
在这里插入图片描述Gap Statistic的优点是,我们不再需要肉眼了。我们只需要找到最大gap statistic所对应的K即可。
所以这种方法也适用于“批量化作业”,如果我们要做1000次聚类分析,不需要肉眼去看1000次了。
轮廓系数法

使用轮廓系数法评估分类质量,选择分类质量最好的K值

5)稳定性方法

对一个数据集进行2次重采样产生2个数据子集,再用相同的聚类算法对2个数据自己进行聚类,产生2个具有K个聚类的聚类结果,计算2个聚类结果的相似度的分布情况。2个聚类结果具有高的相似度说明K个聚类反映了稳定的聚类结构,其相似度可以用来评估聚类个数。采用此方法试探多个K,找到合适的K值。

6)与层次聚类结合
首先采用层次聚类算法决定结果簇的数目,并找到一个初始聚类,然后用迭代重定位来改进该聚类。

7)Canopy Method

  • stage1:聚类最耗费计算的地方是计算对象相似性的时候,Canopy
    Method在第一阶段选择简单,计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy,通过一系列计算得到若干Canopy,Canopy之间是可以重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看成是预处理。
  • stage2:在各个Canopy内使用传统的聚类方法(如K-means),不属于同一Canopy的对象之间不进行相似性计算。
    从这个方法起码可以看出两点好处:首先,Canopy不要太大且Canopy之间重叠的不要太多的话会大大减少后续所需要计算相似性的对象的个数;其次,类似于K-means这样的聚类方法是需要人为指出K的值的,通过stage1得到额Canopy个数完全可以作为这个K值,一定程度上减少了这个选择k的盲目性。

3.K-means聚类中每个类别中心的初始点如何选择?
1)随机法
最简单的确定初始类簇中心点的方法是随机选择K个点作为初始的类簇中心点。
2)选择各批次距离尽可能远的k个点,首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直到选出k个初始类簇中心。
3)层次聚类或者Canopy预处理,选择中心点。选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为Kmeans算法初始类簇中心点。

4.K-means中空聚类的处理
如果所有的点在指派步骤都未分配到某个簇,就会得到空簇。如果这种情况发生,则需要某种策略来选择一个替补质心,否则的话,平方误差将会偏大。一种方法是选择一个距离当前任何质心最远的点。这将消除当前对总平方误差影响最大的点。另一种方法是从具有最大SEE的簇中选择一个替补的质心。这将分裂簇并降低聚类的总SEE。如果有多个空簇,则该过程重复多次。另外编程实现时,要注意空簇可能导致的程序bug。

5.K-means是否会一直陷入选择质心的循环停不下来?
不会,有数学证明Kmeans一定会收敛,大概思路是利用SSE的概念(也就是误差平方和),即每个点到自身所归属质心的距离的平方和,这个平方和是一个凸函数,通过迭代一定可以到达它的局部最优解。(不一定是全局最优解)

6.如何快速收敛数据量超大的K-means?
K-means算法是常用的聚类算法,但其算法本身存在一定的问题。例如,在大数据量下的计算时间过长就是一个重要问题。

Mini Batch Kmeans使用了一种叫做Mini Batch(分批处理)的方法对数据点之间的距离进行计算。Mini Batch的好处是计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。由于计算样本数量少,所以会相应的减少运行时间,但另一方面抽样页必然会带来准确度的下降。

该算法的迭代步骤有两步:
1)从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心
2)更新质心:与k均值算法相比,数据的更新是在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心,随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数,停止计算。

7.K-means算法的优点和缺点是什么?
K-means算法试图找到使误差平方和最小的簇。当潜在的簇形状是凸面(即球形)的,簇与簇之间区别较明显,且簇大小相近时,其聚类结果较理想。对于处理大数据集合,该算法非常高效,且伸缩性较好。
但该算法除了要事先确定簇数K和对初始聚类中心敏感外,经常以局部最优结束,同时对“噪声”和孤立点敏感,并且该方法不适于发现非凸面形状的簇或者大小差别很大的簇。

8.如何对K-means聚类效果进行评估?

轮廓系数

好的聚类:内密外疏,同一个聚类内部的样本要足够密集,不同聚类之间样本要足够疏远。

轮廓系数计算规则:针对样本空间中的一个特定样本,计算它与所在聚类其它样本的平均距离a,以及该样本与距离最近的另一个聚类中所有样本的平均距离b,该样本的轮廓系数为(b-a)/max(a, b),将整个样本空间中所有样本的轮廓系数取算数平均值,作为聚类划分的性能指标s。

轮廓系数的区间为:[-1, 1]。 -1代表分类效果差,1代表分类效果好。0代表聚类重叠,没有很好的划分聚类。比较低,内密外不够疏

9.K-Means与KNN有什么区别

  • 1)KNN是分类算法,K-means是聚类算法;
  • 2)KNN是监督学习,K-means是非监督学习
  • 3)KNN喂给它的数据集是带Label的数据,已经是完全正确的数据,K-means喂给它的数据集是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序。
  • 4)KNN没有明显的前期训练过程,K-means有明显的前期训练过程
  • 5)K的含义KNN来了一个样本x,要给它分类,即求出它的y,就从数据集中,在X附近找距离它最近的K个数据点,这K个数据点,类别C占的个数最多,就把x的label设为c.
  • K-means中K是人工固定好的数字,假设数据集合可以分为k个簇,由于是依靠人工定好,需要一些先验知识。
发布了13 篇原创文章 · 获赞 11 · 访问量 771

猜你喜欢

转载自blog.csdn.net/jaffe507/article/details/105137582