三维点云课程—聚类的总结
K-Means | GMM | Spectral | Mean Shift | DBSCAN | |
---|---|---|---|---|---|
度量模式 | 欧式空间 | 欧式空间 | 图论 | 密集/欧式空间 | 密集/欧式空间 |
聚类数 | 人为设定 | 人为设定 | 可以推导出来 | 自动获取 | 自动获取 |
噪声点的影响 | 坏 | 中等 | 好 | 好 | 好 |
高维数据的影响 | 中等 | 中等 | 好 | 坏 | 坏 |
时间复杂度 |
O
(
t
×
k
×
n
×
d
)
O(t\times k \times n \times d)
O(t×k×n×d) t:迭代次数 k:聚类数 n数据的个数 d数据的维数 |
O
(
t
×
k
×
n
×
d
)
O(t\times k \times n \times d)
O(t×k×n×d) t:迭代次数 k:聚类数 n数据的个数 d数据的维数 |
O
(
n
3
)
O( n ^3)
O(n3) t:迭代次数 k:聚类数 n数据的个数 d数据的维数 |
O
(
T
n
l
o
g
(
n
)
)
O(Tnlog(n))
O(Tnlog(n)) n:数据的个数 T中心点的个数 |
O
(
n
l
o
g
(
n
)
)
O(nlog(n))
O(nlog(n)) n:数据的个数 |
总结如下:
其中像KMenas,GMM,Spectral Clustering,DBSCAN算法之前都有涉及,关于MeanShift并没有涉及,自己若是感兴趣,可以自行百度。
如果知道聚类数目,数据近似为圆分布,追求简单的话,可以选择KMeans;如果知道聚类数目,数据近似为椭圆分布,追求相对准确的话,可以选择GMM;如果不知道聚类的数目,对时间要求比较高,并且数据中有"圆环"问题,可以选择Mean shift或者DBSCAN;如果不知道聚类的数目,对时间要求比较不是太高,对精度要求较高,并且数据中有"圆环"问题,可以选择Spectral Clustering;
目前数据集中表现最好的就是Spectral Clustering,但是它的时间复杂度太高。在实际的项目或者学习中,选择一款合适的聚类算法可以达到事半功倍的成效,当然里面的参数调整就是玄学。