简介
当涉及到聚类和分类问题时,K-Means(k均值)和KNN(K最近邻)是两种常用的机器学习算法。K-Means的目标是最小化所有数据样本到其所属簇中心的平方距离之和,即簇内误差平方和(SSE)。该算法适用于密集型数据和簇结构明显的情况,但对于不同大小、不同密度的簇效果可能不佳。KNN通常适用于小规模的数据集,而且对于特征空间的维度较高时效果可能较差。此外,KNN是一种"懒惰学习"算法,它在预测时需要存储全部的训练数据,并且计算复杂度较高。总结:K-Means是一种无监督聚类算法,用于将数据分成K个簇。KNN是一种有监督分类算法,通过计算样本之间的距离进行预测。根据具体的问题和数据特点,选择适合的聚类或分类算法是十分重要的。
下面是一些常见的面试题归纳:
Q:请简单介绍一下Kmeans的思想,优缺点?
答:基本K-Means算法的思想很简单,事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。 一般在算上实现上,我们通过这么几种方式来设置看是否停止:1.设置最大的迭代次数。2.每一个元素的状态不在改变。3.质心的变化 < e,变化小于一个值。
优点:原理简单,容易实现;
缺点:收敛较慢, 算法时间复杂度比较高 O(nkt),需要事先确定超参数K,对k值比较敏感,对噪声和离群点敏感,结果不一定是全局最优,只能保证局部最优。
Q:Kmeans时间、空间复杂度分别为多少?
时间复杂度:O(tKmn),其中t为迭代次数,K 为簇的数目,m 为记录数,n为维数空间复杂度:O((m+K)n),其中,K 为簇的数目,m 为记录数,n 为维数。
Q:Kmeans聚类如何选择初始点?
答:在实际应用中,由于Kmean一般作为数据预处理,或者用于辅助聚类贴标签。所以k一般不会设置很大。可以通过枚举,令k从2到一个固定值如10,在每个k值上重复运行数次kmeans(避免局部最优解),并计算当前k的平均轮廓系数,最后选取轮廓系数最大的值对应的k作为最终的集群数目。
Q:在你用Kmeans的时候一般是如何调优的?K值你是如何确定的?
答:调优主要是对数据归一化和离群点的处理。因为k-means是根据欧式距离来度量数据的划分,均值和方差大的数据会对结果有致命的影响。同时,少量的噪声也会对均值产生较大的影响,导致中心偏移。所以在聚类前一定要对数据做处理。
对于K值的选择,我一般是取几个比较小的k值,然后进行交叉验证。选择合适的k值。或者用k-means++ 的方法。k-means++方法,在一开始确定簇时,让所有簇中心坐标两两距离最远。k-means++算法:K-means++算法选择初始聚类中心的的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。具体的流程如下:(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心。(2)对于数据集中的每一个点 x,计算它与最近聚类中心(指已选择的聚类中心)的距离 D(x)。(3)选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大。(4)重复2和3直到k个聚类中心被选出来。(5)利用这k个初始的聚类中心来运行标准的 k-means 算法。
另外,我也了解业界一些其他的做法: ① ⼿肘法,计算SSE(点在内部的平均距离); ② 轮廓系数,(点到最近簇平均距离-点到⾃⼰簇平均距离)/max(点到最近簇平均距离,点到⾃⼰簇平均距离); ③ Gap statistics,越⼤越好;
Q:Kmeans聚类,聚的是样本还是特征,特征的距离如何计算?
答:聚的是特征,特征的距离计算方法一般是方差。聚类的核心思想是将具有相似特征的事物给聚在一起,也就是说聚类算法最终只能告诉我们哪些样本属于同一个类别,而不能告诉我们每个样本具体属于什么类别。
Q:Kmeans和EM算法的关系?
答:K-means是一种迭代算法,每次迭代涉及到两个连续的步骤,分别对应rnk(距离)的最优化和μk(均值)的最优化,也对应着EM算法的E步(求期望)和M步(求极大)两步。EM算法是这样,假设我们想估计知道A和B两个参数,在开始状态下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反过来知道了B也就得到了A。可以考虑首先赋予A某种初值,以此得到B的估计值,然后从B的当前值出发,重新估计A的取值,这个过程一直持续到收敛为止。
Q:除了Kmeans,你还知道哪些聚类算法?
答:Mean-Shift聚类:是基于滑动窗口的算法,试图找到数据点的密集区域。这是一种基于质心的算法,意味着其目标是定位每个簇的中心点,通过将滑动窗口的均值点作为候选点来迭代更新中心点。在后处理阶段将消除近似重复的窗口,最终形成一组中心点及其相应的簇。与k-means相比,Mean-Shift的最大优势就是可以自动的发现簇而不需要进行人工选择,蔟的中心中心向最大密度点聚合的事实也是非常令人满意的,因为它可被非常直观的理解并很自然的契合数据驱动。
高斯混合模型的期望最大化聚类:K-Means的主要缺点之一是其简单地使用了平均值作为簇的中心。高斯混合模型(GMMs)相比于K-Means来说有更多的灵活性。对于GMMs,我们假设数据点是服从高斯分布的(对于用均值进行聚类,这一假设是个相对较弱的限制)。这样,我们有两个参数来描述簇的形状:均值和标准差!以二维为例,这意味着簇可以采用任何类型的椭圆形(因为我们在x和y方向都有标准偏差)。因此,每个簇都有一个高斯分布。
补充:常见的聚类算法(了解其中部分)
基于划分的聚类:K-means,k-medoids,CLARANS。
基于层次的聚类:AGNES(自底向上),DIANA(自上向下)。
基于密度的聚类:DBSACN,OPTICS,BIRCH(CF-Tree),CURE。
基于网格的方法:STING,WaveCluster。
基于模型的聚类:EM,SOM,COBWEB。
Q:请简单介绍啊一下KNN、以及它的优缺点?
答:KNN的全称是K Nearest Neighbors,k近邻算法,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。通过方差表示“距离”。实现可以通过sklearn引入KNN库实现。无参模型,K是人为指定的超参数,可以用于分类也可以用于回归(预测和它最接近K个样本的标签)。
优点:简单易用,相比其他算法,KNN算是比较简洁明了的算法。模型训练快。预测效果好。对异常值不敏感。
缺点:对内存要求较高,因为该算法存储了所有训练数据。预测阶段可能很慢。对不相关的功能和数据规模敏感。对数据纲量敏感,所以数据要先归一化。
Q:KNN中的K值一般是怎么选的?
答:可以通过自己手动设定,也可以通过不断的验证k的不同取值来确定。使用交叉验证的方法,定义不同的K值的一个列表,然后比如说用5折交叉验证,看哪种的效果最好。
Q:KNN需要数据归一化吗?
答:KNN对数据量纲比较敏感,所以数据需要先归一化,因为knn使用方差来反应距离,量纲对方差计算的影响较大。
Q:KNN的三要素是什么?
答:(1)k值的选取 (2)距离度量的方式。默认一般为欧式距离 (3)分类决策规则。分类一般为多数表决,就是哪类多选哪类。回归为选择平均法,即k个样本输出的平均值作为预测输出
Q:KNN中K值选择过大会有什么问题?
答:如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。我们考虑一种极端的情况,当k和整个样本数量一样的,KNN的分类结果总是取决于样本类别数量最多的那一类。这时模型的误差最大化。