一、引言:聚类算法中的'密度层次专家'
在无监督学习领域,聚类算法是挖掘数据内在结构的核心工具。传统聚类方法中,K-Means 依赖'球形簇'假设、DBSCAN 对参数敏感,而 OPTICS(Ordering Points To Identify the Clustering Structure,基于密度的层次聚类算法)凭借'任意形状簇识别''密度分布可视化'的特性,成为非线性数据聚类的优选方案。
本文以环形与球形混合数据为实验对象,从环境配置、数据生成、算法实现、结果解析、问题解决五个维度,完整复现 OPTICS 算法的实战流程。
二、环境准备与依赖库安装
2.1 核心库说明
本次实验需用到以下 Python 库:
- numpy:数据处理;
- matplotlib:可视化;
- sklearn:数据生成、OPTICS 算法实现。
在终端执行以下代码安装依赖(若已安装可跳过):
!pip install numpy matplotlib scikit-learn
2.2 库导入与中文配置
导入库并解决 Matplotlib 中文显示问题(避免后续可视化出现乱码):
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles, make_blobs
from sklearn.cluster import OPTICS
# 配置 Matplotlib 中文显示
plt.rcParams["font.sans-serif"] = ["SimHei"] # Windows 系统
# plt.rcParams["font.sans-serif"] = ["Arial Unicode MS"] # Mac 系统
plt.rcParams["axes.unicode_minus"] = False # 解决负号显示异常
三、实验数据生成:模拟非线性分布场景
为体现 OPTICS 处理'非球形簇'的优势,我们生成'环形 + 球形混合数据'(模拟真实场景中不规则分布的数据集)。
3.1 数据生成代码
# 1. 生成内外环形数据(非线性分布,模拟复杂结构)
X1, _ = make_circles(
n_samples=1000, # 样本数
factor=0.2, # 内外环半径比例
noise=0.05, # 噪声比例
random_state=5 # 随机种子(保证结果可复现)
)
# 2. 生成 2 个独立球形簇(模拟局部密集结构)
X2, _ = make_blobs(
n_samples=,
n_features=,
centers=[[, ]],
cluster_std=[],
random_state=
)
X3, _ = make_blobs(
n_samples=,
n_features=,
centers=[[-, -]],
cluster_std=[],
random_state=
)
X = np.concatenate((X1, X2, X3))
plt.figure(figsize=(, ))
plt.scatter(X[:, ], X[:, ], marker=, c=)
plt.title()
plt.xlabel()
plt.ylabel()
plt.show()

