1. 混合高斯模型聚类实战指南
作为一名数据科学家,我经常遇到需要将无标签数据进行分组的场景。传统的K-means算法简单高效,但它假设所有簇都是圆形且大小相同,这在实际数据中往往不成立。今天我要分享的是混合高斯模型(Gaussian Mixture Model, GMM)这种更强大的聚类方法,它能识别椭圆形、不同大小甚至部分重叠的簇。
GMM的核心思想是将数据看作由多个高斯分布混合生成的。与K-means的"硬分配"不同,GMM属于"软聚类"——它会计算每个样本属于各个簇的概率。这种特性使得GMM在现实场景中表现更加灵活,比如在金融客户分群、医学图像分割等领域都有广泛应用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. GMM核心原理与优势解析
2.1 高斯分布与混合模型
高斯分布(正态分布)是统计学中最基础的概率分布之一,其概率密度函数为:
code复制p(x|μ,Σ) = (1/((2π)^d/2 |Σ|^1/2)) * exp(-1/2 (x-μ)^T Σ^-1 (x-μ))
其中μ是均值向量,Σ是协方差矩阵。在二维情况下,这个公式描述的就是我们熟悉的"钟形曲线"。
混合高斯模型则是多个高斯分布的线性叠加:
code复制p(x) = Σ π_k * p_k(x|μ_k,Σ_k)
π_k是第k个高斯分布的混合系数(权重),满足Σπ_k=1。通过调整这些参数,GMM可以拟合各种复杂的数据分布。
2.2 与K-means的关键区别
-
软聚类 vs 硬聚类:
- K-means:每个点只属于一个簇
- GMM:每个点有属于各个簇的概率
-
簇形状假设:
- K-means:假设簇是各向同性的圆形
- GMM:通过协方差矩阵可以描述椭圆形、斜向的簇
-
密度感知:
- GMM本质上是概率密度估计,能反映数据的分布情况
- K-means只考虑样本到中心的距离
实践建议:当数据明显不是球形分布,或者需要概率解释时,优先选择GMM。对于超大规模数据,K-means计算效率更高。
3. 完整实现流程详解
3.1 环境准备与数据加载
首先确保安装必要的Python库:
bash复制pip install numpy pandas matplotlib seaborn scikit-learn
数据加载函数设计考虑以下几点:
- 同时支持真实数据和模拟数据
- 自动识别CSV和Excel格式
- 内置标准化处理(GMM对特征尺度敏感)
python复制def load_and_preprocess_data(file_path=None):
if file_path:
print(f"正在加载数据: {file_path}")
if file_path.endswith('.csv'):
df = pd.read_csv(file_path)
elif file_path.endswith('.xlsx'):
df = pd.read_excel(file_path)
else:
raise ValueError("不支持的文件格式")
X = df.values
feature_names = df.columns.tolist()
else:
# 生成三个不同形态的高斯簇
np.random.seed(42)
n_samples = 600
X1 = np.random.multivariate_normal(mean=[2, 2], cov=[[1, 0.5], [0.5, 1]], size=n_samples//3)
X2 = np.random.multivariate_normal(mean=[-2, -2], cov=[[1.5, 0], [0, 1.5]], size=n_samples//3)
X3 = np.random.multivariate_normal(mean=[2, -3], cov=[[1, -0.5], [-0.5, 1]], size=n_samples//3)
X = np.vstack([X1, X2, X3])
feature_names =
