https://www.nowcoder.com/discuss/209171
1 K-Means算法的收敛性。
参考:
https://www.cnblogs.com/zlslch/p/6965209.html
2 如何在多台计算机上做kmeans
https://www.nowcoder.com/discuss/205843
先分布到n 台机器上,要保证k个初始化相同,经过一次迭代后,拿到k*n个新的mean,放到一台新的机器上,因为初始化相同,所以mean的排列相同,然后对属于每个类的n 个mean 做加权平均,再加回每台机器上做下一步迭代。
3 knn和kmeans 面试
knn 是否可微:不可以微
3.1 knn :k 最近邻分类算法,每个样本的数据类型都可以由它k个邻居的数据类型来表示。该算法涉及三个因素:分类决策规则,距离与相似的衡量,k 的大小。做分类时,采用多数表决法,即训练集里和预测的样本特征最近的k 个样本,预测为里面有最多类别数的类别,做回归时,选择平均法: 即最近的k个样本的样本输出的平均值作为回归预测值。
对于距离的度量: 我们有很多距离度量方式,但是最常用的是欧式距离
k 值的选择: 过小容易过拟合,过大容易欠拟合,可以使用交叉验证法取k 值
3.2 knn 的优缺点:
优点: 思想简单,理论成熟,既可以做分类也可以做回归;也用于非线性分类; 训练时间复杂度O(n) ;准确度高,对数据没有假设,对离群值不敏感。
缺点: 需要大量内存
3.3 不平衡的样本可以给knn 的预测结果造成哪些问题,有没解决方式。
样本不平衡时,一个类的样本容量很大,而其他类样本数量很小,很有可能导致当输入一个未知样本时,该样本的k 个邻居中大数据类的样本占多数,但是这类样本并不接近目标样本,而数量小的这类样本很接近目标样本,但是knn只关心哪类样本数量最多,不考虑距离远近,因此会导致预测结果不准确。可以采用权值的方法改进,和该样本距离小的邻居权值大,和该样本距离大的邻居权值相对较小。
3.4 可以用分组的方式解决knn 算法计算量过大的问题,简述原理。
对每个待分类的样本都要计算它到全体已知样本的距离,才能求得他的k 个最近邻点,计算量较大。knn 算法改进方法是分组快速搜索近邻法,基本思想是:将样本集按近邻关系分解成组,给出每组质 心的位置,以质心作为代表点,和未知样本计算距离,选出距离最近的一个或者若干个组,再在组内用knn,并不是将未知样本与所有样本计算距离。
3.5 什么是欧氏距离和曼哈顿距离
3.6 knn 中的k 如何选取
选小的:用小的邻域的训练实例进行预测,学习的近似误差减少,估计误差增大,模型变复杂,容易过拟合·。
大的:用较大领域中的训练实例进行预测,优点是减少学习的误差估计,近似误差增大,与输入实例较远的训练实例也会对预测器起作用,使预测发生错误,且k 值增大就意味着模型变简单。
实际上一般取较小的
数值,用cv 来选最优的k。
3.7 kd 树?
KD 树是一种对k 维空间中实例点进行存储以便对其进行快速检索的树形结构,是一种二叉树,表示对k 维空间的一个划分,构造kd 树相当于不断地用垂直于坐标轴的超平面将k 维空间切分,构成一系列的k 维超矩形区域,采用kd 树可以省去大部分数据点的搜索,从而减少搜索的计算量。
3.8 kd 树建立过程中切分维度的顺序是否可以优化?
构建开始前,对比数据点在各维度的分布情况,数据点在某一唯独坐标值的方差越大分布越分散,方差越小分布越集中,从方差大的维度开始切分可以取得很好的切分效果及平衡性。
3.9 kd 树每一次继续切分都要计算该子区间在需切分维度上的中值,计算量大,如何优化?
(1) 最开始对原始数据点在所有维度进行排序,存储下来,然后在后续的中值选择中,无须每次都对其子集进行排序,提升性能。
(2) 从原始数据点中随机选择固定数目的点,排序,每次从这些样本点中取中值作为分割超平面。
3.10 k-means 中常用的中心距离的度量有哪些?
k-means 中比较常用的距离度量是欧几里得距离和余弦相似度(两个向量的余弦值,注重方向上的差异)
3.11 k-means 中k 值如何选取
1) 根据场景选取
2)随机:随机选取k 个点作为起始点,随机计算n 次,取得最优结果的k 作为最终聚类结果,避免随机引起的局部最优解。
3)手肘法的思想是:随着聚类数K的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当K小于真实聚类数时,由于K的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着K值的继续增大而趋于平缓,也就是说SSE和K的关系图是一个手肘的形状,而这个肘部对应的K值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。
4) 轮廓系数法:使用轮廓系数法评估分类质量,选择分类质量最好的k 值。
5)稳定性方法
6) 与层次聚类结合
3.12 k-means 中算法的初始点的选择对最终结果有影响吗?
有,随机选的中心会陷入局部最优
3.13 k-means 中空聚类的处理
所有点在指派步骤都未分配到某一簇,会得到空簇,需要某种策略来选择一个替补质心,否则的话,平方误差会偏大,一种方法是选择一个距离当前任何质心最远的点,这将消除当前对总平方误差影响最大的点,另一种方法是从具体最大的SEE的簇中选择一个替补的质心,这将分裂簇并降低聚类的总SEE。如果有多个空簇,该过程重复多次。
3.14 k-means 是否会陷入选择质心的·循环停不下来。
有证明说明kmeans 一定会收敛,是利用SSE的概念,即每个点到自身所归属质心得距离的平方和,这个平方和是一个凸函数,通过迭代就可以达到它的局部最优解。
3.15 如何快速收敛数据量超大的k-means:?
分批处理,计算过程中不使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算,由于计算样本数量会少,所以会相应的减少运行时间,但另一方面抽样页必然会带来准确度的下降。
3.16 k-means 优缺点
k-means 算法试图找到使误差平方和最小的簇,当潜在的簇形状是凸面(即球形) ,簇和簇之间区别明显,且簇大小相当近时,其聚类结果较理想,对于处理大数据集合,该算法非常高效,且伸缩性较好。
该算法除了要事先确定簇数k 和对初始聚类中心敏感外,经常以局部最优结束,同时对噪声和孤立点敏感,并且该方法不适于发现非凸面形状的簇或者大小差别很大的簇。
3.17 如何评估k-means 聚类效果
轮廓系数,是类的密集和分散程度的评价指标,它会随着类的规模增大而增大,彼此相距很远,本身·很密集的类,轮廓系数较大,彼此集中; 本身很大的类,其轮廓系数较小,轮廓系数是通过所有样本计算出来。
3.18 k-means 和knn 有什么区别
knn 是分类算法,k-means 是聚类算法
knn 是监督学习,k-means 是非监督学习
knn 给的数据集是带label 的数据,已经是完全正确的数据,k-means 给它的数据集是无label 的数据,是杂乱无章的,经过聚类后才变得有点有些顺序,先无序,后有序。
knn 没有明显的前期训练过程,k-means 有明显的前期的训练过程。
k 的含义knn 来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x 附近找距离它最近的k 个数据点,这k 个数据点,类别C 占的个数最多,就把x 的label 设为C。
k-means 中k 是个固定好的数字,假设数据集合可以分为k 个簇。
https://www.twblogs.net/a/5c4b0ca4bd9eee6e7d81db6e/zh-cn
4 矩阵乘法怎么优化
使用子矩阵:将复杂度优化到O(n^log7)的Strassen算法,使用更多的分块,可以得到比log2(7)更小的数,从而理论上得到更低的时间复杂度。
并行化:采用行列相乘法,即把将A按行(A1,A2,,,,,) 分配到A row 个处理器上,后是通过B (B1,B2,...) 的移位从而实现A 的每一行与B 的每一列相乘,从而实现并行化算法的代码。
https://www.kancloud.cn/kancloud/the-art-of-programming/41587