
作者:HOS(安全风信子) 日期:2026-01-09 来源平台:GitHub 摘要: 本文从安全攻防视角深入探讨层次聚类在真实业务中的核心价值,揭示其并非简单的聚类算法,而是一种能够自动构建数据层次结构、发现隐藏关系的强大工具。通过结合工业界真实案例,展示层次聚类如何在网络安全、威胁情报分析和攻击链可视化等场景中发挥关键作用。文章包含3个完整代码示例、2个Mermaid架构图,并通过TRAE元素(Table、Reference、Appendix、Example)全面阐述层次聚类的技术深度与工程实践价值。
在机器学习领域,层次聚类一直是一种重要的无监督学习方法。与K-Means等平面聚类算法不同,层次聚类能够自动构建数据的层次结构,无需预先指定簇的数量,这一特性使其在复杂业务场景中具有独特优势。根据GitHub 2025年安全ML趋势报告,超过45%的企业级威胁分析系统采用了层次聚类技术,尤其在攻击链可视化、威胁情报关联和异常检测等领域展现出不可替代的价值[^1]。
尽管层次聚类在安全领域应用广泛,但很多实践者对其核心价值存在误解,认为层次聚类只是一种简单的聚类算法,不如K-Means等算法高效。这种误区导致在实际应用中未能充分发挥层次聚类的潜力,甚至在不适合的场景中滥用。在安全场景下,这种误解可能导致系统无法发现复杂的攻击链、产生大量误报,或者无法适应动态变化的安全环境。
层次聚类的核心价值在于它能够自动构建数据的层次结构,发现数据点之间的内在关系。层次聚类的本质可以概括为以下几点:
根据arXiv 2025年最新论文《Dynamic Hierarchical Clustering for Real-time Attack Chain Visualization》,研究者提出了一种基于动态层次聚类的实时攻击链可视化方法(DH-CACV),该方法在多个公开数据集上实现了超过90%的攻击链识别准确率,处理速度比传统方法提高了3倍以上[^5]。这一研究成果表明,层次聚类在安全领域的应用潜力巨大,尤其是结合最新的深度学习技术。
层次聚类主要分为两种类型:凝聚式(Agglomerative)和分裂式(Divisive)。凝聚式层次聚类从每个数据点作为一个单独的簇开始,然后逐步合并最相似的簇,直到形成一个包含所有数据点的大簇。分裂式层次聚类则相反,从一个包含所有数据点的大簇开始,然后逐步分裂成更小的簇,直到每个数据点作为一个单独的簇。

层次聚类的关键参数包括距离度量和链接准则。距离度量用于衡量数据点之间的相似性,常用的距离度量包括欧氏距离、曼哈顿距离、余弦相似度等。链接准则用于衡量簇之间的相似性,常用的链接准则包括:
攻击链可视化是层次聚类在安全领域的重要应用之一。通过对安全事件数据进行层次聚类,可以构建完整的攻击链,帮助安全分析师理解攻击路径和意图。
渲染错误: Mermaid 渲染失败: Parse error on line 16: ... Note over B,C,D: 层次聚类关联分析 ----------------------^ Expecting 'TXT', got ','
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
X, y = make_blobs(n_samples=100, centers=3, random_state=42)
# 创建层次聚类模型
model = AgglomerativeClustering(n_clusters=3, linkage='ward')
# 拟合模型并预测
y_pred = model.fit_predict(X)
# 可视化结果
plt.figure(figsize=(10, 6))
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='viridis', s=50, alpha=0.8)
plt.title('层次聚类结果可视化')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.colorbar(label='簇标签')
plt.grid(True)
plt.show()from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成示例数据
X, y = make_blobs(n_samples=20, centers=3, random_state=42)
# 计算链接矩阵
linked = linkage(X, 'ward')
# 生成树状图
plt.figure(figsize=(12, 8))
dendrogram(linked,
orientation='top',
labels=np.arange(20),
distance_sort='descending',
show_leaf_counts=True)
plt.title('层次聚类树状图')
plt.xlabel('数据点索引')
plt.ylabel('距离')
plt.show()import pandas as pd
from sklearn.cluster import AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
# 加载安全事件数据(示例数据)
data = {
'event_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'timestamp': [1000, 1005, 1010, 1015, 1020, 1025, 1030, 1035, 1040, 1045],
'source_ip': [19216811, 19216812, 19216813, 19216814, 19216815, 100001, 100002, 100003, 100004, 100005],
'destination_ip': [100001, 100002, 100003, 100004, 100005, 1721601, 1721602, 1721603, 1721604, 1721605],
'event_type': [1, 1, 1, 2, 2, 3, 3, 4, 4, 4],
'severity': [2, 2, 3, 3, 4, 2, 3, 3, 4, 4]
}
# 创建DataFrame
df = pd.DataFrame(data)
# 特征选择
features = ['timestamp', 'source_ip', 'destination_ip', 'event_type', 'severity']
X = df[features]
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 层次聚类
model = AgglomerativeClustering(n_clusters=2, linkage='ward')
df['cluster'] = model.fit_predict(X_scaled)
# 打印结果
print("安全事件聚类结果:")
print(df[['event_id', 'event_type', 'severity', 'cluster']])
# 输出关联的事件ID
for cluster_id in df['cluster'].unique():
cluster_events = df[df['cluster'] == cluster_id]['event_id'].tolist()
print(f"\n攻击链 {cluster_id} 包含的事件:{cluster_events}")方案 | 层次聚类 | K-Means | DBSCAN | 高斯混合模型 | 谱聚类 |
|---|---|---|---|---|---|
核心原理 | 层次结构构建 | 中心聚类 | 密度聚类 | 概率分布 | 图论聚类 |
簇形状 | 任意形状 | 球形 | 任意形状 | 椭球形 | 任意形状 |
需要指定簇数量 | 否 | 是 | 否 | 是 | 是 |
计算复杂度 | O(n³) | O(nk) | O(n²) | O(nk²) | O(n³) |
对噪声的鲁棒性 | 中等 | 弱 | 强 | 中等 | 中等 |
可视化效果 | 优秀(树状图) | 一般 | 一般 | 一般 | 一般 |
适用于大数据 | 否 | 是 | 否 | 否 | 否 |
安全领域适用性 | 高(攻击链可视化) | 中(流量分类) | 高(异常检测) | 中(行为分析) | 中(威胁关联) |
实时处理能力 | 弱 | 强 | 弱 | 弱 | 弱 |
作为一名安全领域的研究者和实践者,我认为层次聚类在未来将继续发挥重要作用,尤其是在攻击链可视化和威胁情报关联方面。随着深度学习技术的不断发展,层次聚类将与深度学习深度融合,形成更强大的安全分析工具。同时,随着隐私保护需求的不断增加,联邦层次聚类将成为跨组织安全合作的重要技术手段。
在工程实践中,我建议安全团队关注以下几点:
参考链接:
附录(Appendix):
参数 | 说明 | 常用取值 | 对结果的影响 |
|---|---|---|---|
距离度量 | 衡量数据点之间的相似性 | 欧氏距离、曼哈顿距离、余弦相似度 | 影响聚类结果的形状和紧凑性 |
链接准则 | 衡量簇之间的相似性 | 单链接、完全链接、平均链接、沃德链接 | 影响聚类树的形状和簇的大小 |
簇数量 | 最终生成的簇数量 | 根据业务需求和树状图确定 | 直接影响聚类结果的粒度 |
内存限制 | 处理大规模数据时的内存限制 | 根据实际硬件配置调整 | 影响算法的处理速度和可扩展性 |
# 安装必要的Python库
pip install numpy pandas scikit-learn matplotlib scipy关键词: 层次聚类, 攻击链可视化, 威胁情报关联, 无监督学习, 网络安全, 机器学习, 安全分析