聚类技术主要包括
聚类这东西,聚类技术说白了就是主包让机器自己学着把相似的东西归堆。你给一堆没标签的聚类技术数据,它不告诉你哪个是主包哪类,而是聚类技术根据数据本身的特征,把挨得近的主包划拉成一伙。我第一次接触是聚类技术在一个电商用户分群的项目里,几百万条购买记录扔进去,主包跑完K-Means出来八个簇,聚类技术其中一簇全是主包半夜下单、客单价低、聚类技术退货率极高的主包账号——后来运营那边一看就笑了,说这批人就是聚类技术薅羊毛的。你看,主包没人提前告诉算法谁是聚类技术羊毛党,它自己从行为数据里把这些人拎出来了。
聚类技术主要分几大流派,划分法、层次法、密度法、网格法,还有基于模型的。划分法里最典型的就是K-Means,你得先告诉它要分几类,它随机撒K个中心点,然后反复调整,直到中心点不怎么动了。这方法快,但毛病也明显:K值得你自己猜,初始点选不好容易陷进局部最优。我试过同一份数据跑十次K-Means,结果能出来三四种不同的分法,后来学乖了,先用肘部法则或者轮廓系数估个大概的K,再跑多次取最优。
层次聚类不预设类别数,它建一棵树,你可以从树根切一刀,也可以从树梢往下看。单链接、全链接、平均链接,区别在于怎么算两个簇之间的距离。单链接容易产生“链式效应”——两个簇明明隔得挺远,但中间有几个点像桥一样连过去,最后被合并成一个长条形的大簇。我在做基因表达数据时踩过这个坑,后来换成Ward方法才把该分开的亚型分开。层次聚类的另一个好处是能出树状图,直观,但数据量一大就慢得让人想砸键盘,O(n²)的时间复杂度不是闹着玩的。
密度聚类里DBSCAN是代表。它不关心形状,只关心密度——一个点周围够不够挤。够挤就是核心点,核心点连成片就是簇,边缘的点按邻域归属,剩下的就是噪声。这方法能找出任意形状的簇,还能自动识别离群点。我做交通轨迹分析时用过,DBSCAN把城市里那些绕圈跑的出租车轨迹聚成了十几条固定线路,而零星乱跑的就被标成噪声。但DBSCAN对参数敏感,邻域半径和最小点数稍微动一下,结果就大变样。而且数据密度不均匀的时候,它基本没辙。
基于模型的方法假设数据来自某种概率分布,比如高斯混合模型。它不像K-Means那样硬分,而是给出每个点属于每个簇的概率。软聚类在某些场景下更合理,比如一个用户既像高价值客户又像流失预警客户,硬分只能选一个,软分能告诉你他60%像前者、40%像后者。我见过一个金融风控的案例,用GMM把交易行为分成几类,重叠部分正好是那些需要人工复核的灰色地带。
网格法像STING,把空间划成格子,在格子层面做聚类,速度快,适合大规模空间数据。但格子大小不好定,太小了格子太多,太大了精度不够。谱聚类则是另一条路子,用图的拉普拉斯矩阵做特征分解,能在非凸数据集上跑出漂亮结果,但计算量大,O(n³)的复杂度让它在大数据面前有点吃力。
实际用的时候很少有人只跑一种算法。我通常先拿K-Means快速摸个底,看看数据大概能分几堆,再用DBSCAN或者层次聚类验证一下边界。有时候还得把聚类结果拿去做降维可视化,t-SNE或者UMAP画出来看一眼,如果簇在二维图上都糊成一团,那多半是特征工程没做好,或者距离度量选错了。聚类没有标准答案,同一个数据集,不同算法、不同参数、不同距离函数,出来的结果可能完全不同。关键是你得清楚自己要解决什么问题——是要找离群点,还是要分群做营销,还是要发现数据的内在结构。目的不同,选的方法和评估标准都不一样。
(责任编辑:热点)














