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

使用spherecluster包进行球形k均值聚类时出现模块导入报错

问题成因

该报错由scikit-learn与spherecluster的版本兼容问题导致:

  • scikit-learn 1.0及以上版本重构了内部私有模块结构,原sklearn.cluster.k_means_模块被迁移重命名为sklearn.cluster._kmeans,旧导入路径被彻底移除
  • 你安装的spherecluster为旧发布版本,代码仍在引用已废弃的旧路径,因此触发ModuleNotFoundError
    你当前环境安装的scikit-learn 1.0.2属于重构后的版本,与旧版spherecluster不兼容,该问题与numpy、scipy的安装状态无关。
解决方法

可根据自身需求选择以下任意一种方案修复:

方案1:降级scikit-learn到兼容版本(无需修改代码,最简便)

将当前环境的scikit-learn降级到0.24.x最终稳定版,该版本保留了spherecluster依赖的旧模块路径,无需修改源码即可直接使用。
在对应环境的终端执行对应命令即可:

  • 用conda管理环境时执行:conda install scikit-learn=0.24.2
  • 用pip管理包时执行:pip install scikit-learn==0.24.2
    安装完成后重新导入spherecluster即可正常使用。

方案2:修改本地spherecluster源码适配新版scikit-learn(无需降级依赖)

如果需要保留当前高版本scikit-learn,可手动修改本地安装的spherecluster源码修正导入路径:

  1. 根据报错提示进入spherecluster安装目录,即路径/Users/username/anaconda3/lib/python3.9/site-packages/spherecluster/(虚拟环境下对应替换为虚拟环境的site-packages路径)
  2. 打开目录下的spherical_kmeans.py文件,定位到第7行附近的导入代码块,将原有内容:
from sklearn.cluster.k_means_ import (
    _check_sample_weight,
    _init_centroids,
    _labels_inertia,
    _tolerance,
    _validate_center_shape,
    k_means,
)

替换为:

from sklearn.cluster._kmeans import (
    _check_sample_weight,
    _init_centroids,
    _labels_inertia,
    _tolerance,
    _validate_center_shape,
    k_means,
)
  1. 保存文件后重新尝试导入,若同目录下其他文件也存在引用sklearn.cluster.k_means_的代码,用同样方式把路径替换为sklearn.cluster._kmeans即可。

注意:scikit-learn中下划线开头的模块属于内部私有接口,后续版本仍可能调整路径,如果后续升级scikit-learn后再次出现同类导入错误,按照上述逻辑修正对应导入路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:12:18