K-means,KNN面试题整理
1.简述一下K-means算法的原理和工作流程
K-means是划分方法中较经典的聚类算法之一。由于算法的效率高,所以在对大规模数据进行聚类时被广泛应用。目前,许多算法均围绕着该算法进行扩展和改进。
K-means算法以K为参数,把n个对象分成K个簇,使簇内具有较高的相似度,而簇间的相似度较低。
K-means算法的处理过程如下:首先,随机地选择K个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。这个过程不断重复,重复至准则函数收敛。
步骤:
1)从数据D中随机取k个元素,作为k个簇的各自的中心。
2)分别计算剩下的元素到K个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
3)根据聚类结果,重新计算K个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
4)将数据D中全部元素按照新的中心重新聚类。
5)重复第4)步,直到聚类结果不再变化为止。
6)将结果输出。
2.简述一下KNN算法的原理
KNN算法算法又称为K最近邻分类算法。所谓的K最近邻,就是指最接近的K个邻居,即每个样本都可以由它的K个邻居来表示。
KNN算法的思想是,在一个含未知样本的空间,可以根据离这个样本最邻近的K个样本的数据类型来确定样本的数据类型。
该算法涉及3个主要因素:分类决策规则、距离与相似的衡量、K的大小。
KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值。
对于距离的度量,我们有很多的距离度量方式,但是最常用的是欧式距离。
K值的选择,过小则容易过拟合,过大则容易欠拟合,可以使用交叉验证法选取K值。
3.KNN算法有哪些优点和缺点?
优点:
1)思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2)可用于非线性分类;
3)训练时间复杂度为O(n);
4) 准确度高,对数据没有假设,对离群值不敏感;
缺点:
1.计算量大;
2.样本不平衡问题(即有些类别的样本数量很多,而其他样本的数量很少);
3.需要大量的内存;
4.不平衡的样本可以给KNN的预测结果造成哪些问题,有没有什么好的解决方式?
观察上面的图,可以看到对于样本X,通过KNN算法,显然可以得到X应属于红点,但对于样本Y,通过KNN算法似乎得到了Y应属于蓝点的结论,而这个结论直观来看并没有说服力。
由上面的例子可见:该算法在分类时有个严重的不足是,当样本不平衡时,即:一个类的样本容量很大,而其他类样本数量很小时,很有可能导致当输入一个未知样本时,该样本的K个邻居中大数量类的样本占多数。但是这类样本并不接近目标样本,而数量小的这类样本很接近目标样本。这个时候,我们有理由认为该位置样本属于数量小的样本所属的一类。但是,KNN却不关心这个问题,它只关心哪类样本的数量最多,而不去把距离远近考虑在内,因此,会导致预测结果的不准确。
我们可以采用权值的方法改进。和该样本距离小的邻居权值大,和该样本距离大的邻居权值相对较小,由此,将距离远近的因素也考虑在内,避免因为一个样本过大导致误判的情况。
5.为了解决KNN算法计算量过大的问题,可以使用分组的方式进行计算,简述一下该方式的原理。
KNN算法计算量较大,因为对每一个待分类的样本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。KNN算法的改进方法之一是分组快速搜索近邻法。其基本思想是:将样本集按近邻关系分解成组,给出每组质心的位置,以质心作为代表点,和未知样本计算距离,选出距离最近的一个或者若干个组,再在组的范围内应用一般的KNN算法。由于并不是将未知样本与所有样本计算距离,故该改进算法可以减少计算量,但并不能减少存储量。
6.什么是欧氏距离和曼哈顿距离?
欧式距离,最常见的两点或者多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间