您的位置:首页 > 职场人生

校招算法工程师常见面试题及答案总结03——KMeans

2017-01-22 14:58 615 查看
算法步骤:

选择K个点作为初始质心 

repeat 


    将每个点指派到最近的质心,形成K个簇 

    重新计算每个簇的质心 

until 簇不发生变化或达到最大迭代次数



时间复杂度:O(tKmn),其中,t为迭代次数,K为簇的数目,m为样本数,n为维数

空间复杂度:O((m+K)n),其中,K为簇的数目,m为样本数,n为维数



1)      K的选取以及不知道K时怎么办

a.      稳定性方法

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

b.     与层次聚类结合

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

c.      Canopy Method

Stage1:聚类最耗费计算的地方是计算对象相似性的时候,Canopy Method在第一阶段选择简单、计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy ,通过一系列计算得到若干Canopy,Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看做数据预处理;

Stage2:在各个Canopy 内使用传统的聚类方法(如K-means),不属于同一Canopy 的对象之间不进行相似性计算。

从这个方法起码可以看出两点好处:首先,Canopy 不要太大且Canopy 之间重叠的不要太多的话会大大减少后续需要计算相似性的对象的个数;其次,类似于K-means这样的聚类方法是需要人为指出K的值的,通过Stage1得到的Canopy 个数完全可以作为这个K值,一定程度上减少了选择K的盲目性。

2)      初始质心的选取

a.       层次聚类或者Canopy预处理,选择质心。

b.       随机地选择第一个点,或取所有点的质心作为第一个点。然后,对于每个后

继初始质心,选择离已经选取过的初始质心最远的点。

3)    优缺点

        KMenas算法试图找到使平凡误差准则函数最小的簇。当潜在的簇形状是凸面(即球形)的,簇与簇之间区别较明显,且簇大小相近时,其聚类结果较理想。对于处理大数据集合,该算法非常高效,且伸缩性较好。

        但该算法除了要事先确定簇数K和对初始聚类中心敏感外,经常以局部最优结束,同时对“噪声”和孤立点敏感,并且该方法不适于发现非凸面形状的簇或大小差别很大的簇

4)      适用范围

        潜在的簇是凸面(即球形),且簇之间区别明显、大小相近时,效果最好,适用于大数据。



5)      距离度量

        常用的距离度量方法包括:欧几里得距离余弦相似度。两者都是评定个体间差异的大小的。欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化,同时距离越大,个体间差异越大;空间向量余弦夹角的相似度度量不会受指标刻度的影响,余弦值落于区间[-1,1],值越大,差异越小。但是针对具体应用,什么情况下使用欧氏距离,什么情况下使用余弦相似度?

        从几何意义上来说,n维向量空间的一条线段作为底边和原点组成的三角形,其顶角大小是不确定的。也就是说对于两条空间向量,即使两点距离一定,他们的夹角余弦值也可以随意变化。感性的认识,当两用户评分趋势一致时,但是评分值差距很大,余弦相似度倾向给出更优解。举个极端的例子,两用户只对两件商品评分,向量分别为(3,3)和(5,5),这两位用户的认知其实是一样的,但是欧式距离给出的解显然没有余弦值合理。

6)      算法停止条件

        一般是目标函数达到最优或者达到最大的迭代次数即可终止。对于不同的距离度量,目标函数往往不同。当采用欧式距离时,目标函数一般为最小化对象到其簇质心的距离的平方和。当采用余弦相似度时,目标函数一般为最大化对象到其簇质心的余弦相似度和。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息