You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效为多数据集应用带不同参数的多Sklearn聚类算法并网格绘图?

高效批量应用聚类算法并可视化的实现方案

核心思路

为了避免重复写冗余代码,我们可以把数据集和带参数的聚类模型都整理成可迭代的序列,通过嵌套循环批量处理所有组合,最后用Matplotlib的网格子图统一展示结果。这种方式不仅简洁,还能轻松扩展更多数据集或算法参数。

完整代码实现

import pandas as pd
import numpy as np
from sklearn.datasets import make_moons, make_blobs
from sklearn.cluster import KMeans, DBSCAN
import matplotlib.pyplot as plt

# ----------------------
# 1. 准备数据集(封装为带名称的元组,方便可视化标注)
# ----------------------
X1, y1 = make_moons(n_samples=100, noise=0.1)
X2, y2 = make_blobs(n_samples=100, centers=3, n_features=2)
datasets = [
    ("半月形数据集", X1, y1),
    ("球形聚类数据集", X2, y2)
]

# ----------------------
# 2. 定义带参数的聚类模型(同样封装为带名称的元组)
# 你可以根据需求随时添加更多模型或参数组合
# ----------------------
models = [
    ("KMeans (k=2)", KMeans(n_clusters=2, random_state=42)),
    ("KMeans (k=3)", KMeans(n_clusters=3, random_state=42)),
    ("DBSCAN (eps=0.2)", DBSCAN(eps=0.2)),
    ("DBSCAN (eps=0.3)", DBSCAN(eps=0.3))
]

# ----------------------
# 3. 设置绘图网格:行数=数据集数量,列数=模型数量
# ----------------------
fig, axes = plt.subplots(
    nrows=len(datasets), 
    ncols=len(models), 
    figsize=(16, 8)
)

# ----------------------
# 4. 嵌套循环批量处理并绘图
# ----------------------
for dataset_idx, (dataset_name, X, y_true) in enumerate(datasets):
    for model_idx, (model_name, model) in enumerate(models):
        # 获取当前子图
        ax = axes[dataset_idx][model_idx]
        
        # 拟合模型并获取聚类标签
        model.fit(X)
        if hasattr(model, 'predict'):
            # KMeans等有predict方法的模型
            cluster_labels = model.predict(X)
        else:
            # DBSCAN直接用labels_属性
            cluster_labels = model.labels_
        
        # 绘制聚类结果
        ax.scatter(X[:, 0], X[:, 1], c=cluster_labels, cmap='viridis', alpha=0.7)
        
        # 设置子图标题和样式
        ax.set_title(f"{dataset_name}\n{model_name}", fontsize=10)
        ax.set_xticks([])
        ax.set_yticks([])

# 调整子图间距,避免标题重叠
plt.tight_layout()
plt.show()

关键细节说明

  • 可扩展性:如果需要添加新数据集,只需在datasets列表中追加新的元组;添加新算法或参数组合,直接在models列表中添加即可,无需修改循环逻辑。
  • 模型兼容:针对不同聚类模型的API差异(比如KMeans有predict方法,DBSCAN只有labels_属性),用hasattr做了兼容处理,保证代码鲁棒性。
  • 可视化优化:关闭了坐标轴刻度,让焦点集中在聚类结果上;用tight_layout()自动调整子图间距,避免标题和图形重叠。

内容的提问来源于stack exchange,提问作者santoku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:27:50