机器学习-增量更新的流数据聚类
增量更新的流数据聚类
- A. 通用 Density-Grid 流水线(对应典型网格法)
- B. CEDGM(基于密度网格 + 核心微簇 + 宏簇相交)
- C. DenStream(指数衰减 + 核心/潜在/离群 微簇)
- D. HPStream(投影/子空间聚类 + 衰减簇摘要)
- E. EDSSC(高维演化数据流的动态稀疏子空间聚类)
- F. 流数据聚类总结
A) 通用 Density-Grid 流水线(对应综述中的典型网格法)
流程图
flowchart TD
S["新样本 x_t 到达"] --> N["归一化"]
N --> Q["量化到网格单元"]
Q --> U["更新格子密度(含时间衰减)"]
U --> T{"密度是否超过阈值?"}
T -- "是" --> C1["标记为核心格"]
T -- "否" --> C2["标记为稀疏/噪声候选"]
C1 --> A["连接相邻核心格"]
C2 --> A
A --> CC["提取连通分量 → 聚类ID"]
CC --> O["输出 x_t 的聚类结果"]
代码
1 | |
B) CEDGM(密度网格 + 核心微簇 + 宏簇相交)
流程图
flowchart TD
X["点 x_t 到达"] --> Q["量化到网格"]
Q --> G["更新网格密度 / 异常缓冲"]
G --> J{"是否落入某微簇的核区或壳层?"}
J -- "核区" --> U1["更新该微簇中心/计数/半径"]
J -- "壳层" --> U2["吸纳并检查是否变核心"]
J -- "否" --> O1["作为异常候选或新建微簇"]
U1 --> H["检查微簇之间相交"]
U2 --> H
O1 --> H
H --> M["构建微簇相交图"]
M --> C["连通分量 → 宏簇"]
C --> Y["输出所属宏簇ID"]
代码
1 | |
C) DenStream(指数衰减 + 核心/潜在/离群 微簇)
流程图
flowchart TD
X["点 x_t 到达"] --> A["寻找最近微簇"]
A --> B{"距离是否 ≤ ε?"}
B -- "是" --> U["吸纳并(带衰减)更新中心/权重/半径"]
B -- "否" --> O["新建离群微簇"]
U --> P{"权重 ≥ β 且 半径 ≤ ε?"}
P -- "是" --> C["标记为核心/潜在微簇"]
P -- "否" --> R["保持为潜在/离群"]
O --> S["周期修剪低权重离群微簇"]
C --> Y["输出簇ID(可离线合并)"]
R --> Y
S --> Y
代码
1 | |
D) HPStream(Projected Clustering with Fading)
流程图
flowchart TD
X["点 x_t 到达"] --> W["为各簇衰减更新均值/方差/权重"]
W --> D["计算各维重要性(1/方差)"]
D --> L["为每簇选择前 l 个相关维"]
L --> A["在所选子空间上计算与中心距离"]
A --> J{"是否在吸纳阈值内?"}
J -- "是" --> U["吸纳并增量更新统计量"]
J -- "否" --> N["新建小簇或缓冲,定期合并"]
U --> O["输出当前簇ID"]
N --> O
代码
1 | |
E) EDSSC(动态稀疏子空间聚类 for 演化高维流)
流程图
flowchart TD
S["静态缓冲数据 X0"] --> L["Lasso 自表达求 C"]
L --> W["构亲和矩阵(|C|+|C^T|)并谱聚类"]
W --> B["每簇做 PCA 得到子空间基 U_k"]
B --> R["进入在线阶段"]
R --> X["新样本 x_t"]
X --> E["到各子空间的残差 r_k"]
E --> D{"min(r_k) 是否 < 阈值 τ?"}
D -- "是" --> A["分配给子空间 k,并做增量 PCA 更新"]
D -- "否" --> N["创建新子空间 / 触发分裂"]
A --> O["输出子空间ID"]
N --> O
代码
1 | |
F) 流数据聚类总结
事实上,这几个算法无非就是在线维护、动态插入并调整思路的几种不同的呈现形式,这种思路的确最受欢迎,在这种思路上逐渐改动确实是较为省力且讨巧的方法。自然,这些算法存在共性问题:
稳定–敏捷两难(遗忘/衰减的权衡)
衰减快:对新模式灵敏但簇抖动、遗忘历史;衰减慢:稳定但跟不上漂移,出现滞后与过时簇占内存。
超参敏感且在线难调
半径/密度阈值、网格粒度、衰减系数、子空间维数/秩、残差阈值等对结果影响巨大,而在线场景缺少可靠的即时监督信号来调参。
可扩展性与内存控制
高频流 + 高维度 → 网格/微簇数量暴涨;自表达/谱分解在长时运行有累积成本。
每个算法也存在着不同的适应场景与独特优缺点:
DenStream/网格法在早期样本少、密度不稳定;EDSSC 需要预热窗口做自表达与谱聚类;CEDGM/网格法需要维护核心格或CMC的连通/相交图;若簇数量大或频繁变化,增量更新可能成为瓶颈…
所以,我们能做些什么以求改进呢?我也不清楚(要是我知道就不在这敲这篇不知道有没有用处的blog了…
机器学习-增量更新的流数据聚类
http://example.com/2025/10/27/机器学习-增量更新的流数据聚类/