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

Jupyter Notebook内核在样本量增至24000时崩溃求助

解决层次聚类样本量增大导致Jupyter内核崩溃的问题

执行以下Python代码绘制树状图:

plt.figure(figsize=(9,6))  
plt.title("Dendrograms for number of clusters")  
dend = sch.dendrogram(sch.linkage(scaled, method='ward'))

样本量12000时运行正常,但增至24000时Jupyter Notebook提示Kernel appears to be dead和KernelRestarter: restarting kernel (1/5), keep random ports。

核心原因

层次聚类的linkage函数(尤其是ward方法)时间复杂度为O(n³),空间复杂度为O(n²)。当样本量从12000翻倍到24000时,计算量变为原来的8倍,内存占用变为原来的4倍,直接超出了当前环境的资源上限,导致内核因资源耗尽崩溃。

可行解决方案

  • 使用近似层次聚类算法:换用sklearn.cluster.AgglomerativeClustering,设置compute_distances=False避免存储庞大的距离矩阵,同时通过n_clusters指定目标聚类数量,跳过完整树状图的计算(如果无需绘制全量树状图)。示例代码:
    from sklearn.cluster import AgglomerativeClustering
    cluster = AgglomerativeClustering(n_clusters=5, linkage='ward')
    cluster_labels = cluster.fit_predict(scaled)
    
  • 采样后绘制树状图:从24000个样本中随机抽取部分样本(比如5000个),用采样数据生成树状图来判断聚类数量,再用全量数据执行聚类。示例代码:
    import numpy as np
    # 随机采样5000个样本
    sample_indices = np.random.choice(scaled.shape[0], 5000, replace=False)
    scaled_sample = scaled[sample_indices]
    # 绘制采样数据的树状图
    plt.figure(figsize=(9,6))  
    plt.title("Dendrograms for sampled data")  
    dend = sch.dendrogram(sch.linkage(scaled_sample, method='ward'))
    
  • 提升硬件资源:增加Jupyter环境的内存分配(比如启动Jupyter时通过--NotebookApp.max_buffer_size调整参数,或在云平台选择更高配置的计算实例),同时确保CPU核心数能支撑大计算量需求。
  • 改用低复杂度聚类算法:如果不需要层次聚类的树状图辅助分析,可替换为K-Means、DBSCAN等算法,这类算法在大样本量下的时间和空间效率远高于层次聚类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:50:28