这一节讲解关于Kmeans和DBscan聚类原理的内容, 以下不是长篇大论, 是我的总结版。
(可能没有总结很到位, 欢迎指正!)
一. 结论:
(1) Kmeans会强制要求每个类有个聚类,一些异常点也会强制归类,而DBscan会剔除一些异常点(噪声点),更符合我们对数据的聚类。因为异常点(噪声点)会影响聚类的中心点。
(2) Kmeans上手容易, 但对初始值敏感, DBscan效果好,但不好调参。
(3) Kmeans可多线程跑, 聚类快; DBscan运算量大,且不能用线程分布式处理。
二. Kmeans和DBscan聚类
Kmeans聚类:
以接近于线性的方式进行高效聚类划分。
收敛速度快,原理相对通俗易懂,可解释性强。
Kmeans缺点:
(1)对初始点敏感,一旦初始点选不好,聚类效果就会不好。
(2)容易被异常点影响,导致聚类的中心点发生偏移。
(例如:评委评分时,会去掉最高分和最低分,这样的评分算出来才是比较客观)
(3)数值以及单位问题。
例如当一个人体重的单位定义为kg时,数值差异相对比较小,但把一个人体重的单位定义为g时,数值差异相对比就非常大。若把数值归一化,都到一个量级,就没有数值的问题了。
(4)当聚类类别数大于数据本身类别数时,聚类效果的收益变小,找到最佳的聚类数量的拐点是最重要的,也是聚类效果最好的。上一轮inner减去下一轮的inner的差值,判断差值减少幅度。
--------------
DBscan聚类:
以滚雪球的方式,计算每两个点的距离,如果距离在阈值范围内的点,
就形成一个小簇,在小簇里面的点也计算与其他外部点的距离,
如果距离在阈值范围内的点,再形成一个小簇。这些小簇全部合起来后,
形成一个大簇,那么这个大簇就是一个cluster。
下面图像数据非线性的排列方式,DBscan能解决聚类问题,但kmeans聚类解决不了。
DBscan缺点:
(1)运算量大,且不能用线程分布式处理。 kmeans能用线程分布式处理,处理速度快。
(2)参数很难调。Σ和minnum不好调整。