聚类属于无监督学习。
聚类的算法有很多种,其可分为基于划分、层次、密度、网格及模型的聚类方法。
根据数据集的不同,需要采用不同的聚类算法和策略。
1. 选择聚类算法,所面临的常见问题又哪些?
1) 不同形状的数据集。不同形状的数据集,也需要采取不同的度量策略,或者不同的聚类算法。
2)不同的数据次序。相同数据集,但数据输入次序不同,也会造成聚类的结果的不同。
3)噪声。不同的算法,对噪声的敏感程度不同。
2. 在高维的欧式空间,什么是“维数灾难”?
在高维下,所有点对的距离都差不多(如欧式距离),或者是几乎任意两个向量都是正交(利用夹角进行进行度量),这样聚类就很困难。
3. 常见的聚类算法的策略有哪些?
1)层次或凝聚式聚类。采取合并的方式,将邻近点或簇合并成一个大簇。
2)点分配。每次遍历数据集,将数据分配到一个暂时适合的簇中,然后不断更新。
4. 层次聚类算法的复杂度是多少?
每次合并,都需计算出两个点对之间的距离,复杂度是O(n^2), 后续步骤的开销,分布正比与O((n-1)^2), O((n-2)^2)...,这样求和算下来,算法复杂度是O(n^3).
算法优化:采用优先队列/最小堆来优化计算。优先队列的构建,第一步需要计算出每两个点的距离,这个开销是O(N^2). 一般情况下,N个元素,单纯的优先队列的构建开销为O(N),若是N^2个距离值,则建堆的开销是O(N^2)。
第二步,合并,合并需要一个删除、计算和重新插入的过程。因为合并一个簇对,就需要更新N个元素,开销为O(N*logN)。总的开销为O((N^2) * logN).
所以,总的算法复杂度为O((N^2) * logN).
5. 欧式空间与非欧式空间下,常见的簇之间的距离度量有哪些?
欧式空间:
1)两个簇之间的质心之间