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

如何优化sklearn的KMeans算法在3D空间聚类场景下的效果

KMeans 3D聚类效果异常优化方案

核心问题分析

你构造的3个3D簇边界清晰无重叠,KMeans聚类效果不符合预期的核心原因是默认参数适配性不足:

  • KMeans为贪心算法,随机质心初始化容易陷入局部最优,默认配置在簇样本量不均衡时极易出现聚类偏差
  • 你构造的三个簇样本量差距较大:30×30×30的立方体簇有27000个样本,25×25×25的立方体簇有15625个样本,半径10的球形簇仅约4200个样本,KMeans对样本量不均衡的簇敏感度较高。

具体优化措施

  • 调整KMeans核心参数
    显式配置质心初始化规则和迭代次数,避免局部最优,同时固定随机种子保证结果可复现,优化后的实例化代码如下:
km = KMeans(n_clusters=3, init='k-means++', n_init=50, random_state=42)
y_predicted = km.fit_predict(df1[['x','y','z']])

参数说明:

  • init='k-means++':优化初始质心选择逻辑,优先选择互相距离较远的点作为初始质心,大幅降低陷入局部最优的概率
  • n_init=50:让算法运行50次不同的初始质心迭代,最终选择效果最优的聚类结果
  • random_state=42:固定随机种子,每次运行结果一致,方便调试对比
  • 补充样本权重适配样本不均衡问题
    如果提前知道样本的真实标签,可给小样本簇设置更高权重,抵消样本量差异带来的偏差:
# 示例逻辑:球形簇(标签3)样本量最小,设置3倍权重
sample_weights = np.where(真实标签列 == 3, 3, 1)
y_predicted = km.fit_predict(df1[['x','y','z']], sample_weight=sample_weights)
  • 优化可视化调试逻辑
    可在散点图中额外标记聚类得到的质心位置,快速判断聚类结果是否符合预期:
def create_3d_scatter_wprd(df, centroids):
    fig = plt.figure(figsize=(16, 8))
    ax = fig.add_subplot(111, projection='3d')
    # 绘制样本点,调低透明度避免遮挡质心
    ax.scatter(df['x'], df['y'], df['z'], c=y_predicted, alpha=0.3)
    # 用红色五角星标记聚类质心
    ax.scatter(centroids[:,0], centroids[:,1], centroids[:,2], c='red', s=200, marker='*')
    plt.show()

create_3d_scatter_wprd(df, km.cluster_centers_)
  • 替代算法选型
    如果调整KMeans参数后效果仍不符合预期,可换用对簇密度、样本量不敏感的DBSCAN算法,你的三个簇完全分隔,DBSCAN无需提前指定簇数量即可实现精准聚类:
from sklearn.cluster import DBSCAN
# eps为邻域距离阈值,min_samples为核心点最少邻域样本数,可根据你的坐标范围调整
db = DBSCAN(eps=5, min_samples=10)
y_predicted = db.fit_predict(df1[['x','y','z']])

内容的提问来源于stack exchange,提问作者Saad el harchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:54:04