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

9万行200列高维数据集聚类遇MemoryError,求可行解决方案

大样本数据集聚类的内存溢出解决方案

针对90000行200列的数据集,内存溢出问题核心在于全量加载/处理数据时内存占用过高,以下是几种实用的解决思路:

1. 采用增量式降维+批量聚类算法

增量降维(IncrementalPCA)

替代常规PCA,分批次拟合和转换数据,无需一次性加载全量数据到内存:

from sklearn.decomposition import IncrementalPCA
import numpy as np

# 分块读取数据(假设存储为CSV)
batch_size = 10000
ipca = IncrementalPCA(n_components=50)  # 按需设置目标维度

# 分批次拟合PCA模型
for batch in np.array_split(np.loadtxt('your_dataset.csv', delimiter=','), 9):
    ipca.partial_fit(batch)

# 分批次转换数据并合并
reduced_data = []
for batch in np.array_split(np.loadtxt('your_dataset.csv', delimiter=','), 9):
    reduced_data.append(ipca.transform(batch))
reduced_data = np.concatenate(reduced_data)

批量聚类(MiniBatchKMeans)

针对降维后的数据,用MiniBatchKMeans替代KMeans,通过小批量迭代训练大幅降低内存占用:

from sklearn.cluster import MiniBatchKMeans

mbk = MiniBatchKMeans(n_clusters=10, batch_size=10000, random_state=42)
cluster_labels = mbk.fit_predict(reduced_data)

2. 优化数据类型压缩内存

将数据从默认的float64转换为float32(精度满足需求的前提下),直接减少一半内存占用:

# 读取数据时指定低内存数据类型
data = np.loadtxt('your_dataset.csv', delimiter=',', dtype=np.float32)

如果数据集存在大量零值(稀疏特征),用scipy.sparse.csr_matrix存储稀疏矩阵,sklearn多数算法支持稀疏输入,能进一步节省内存。

3. 直接使用内存友好的聚类算法

无需预降维,选择原生支持大样本、低内存的聚类算法:

Birch算法

层次聚类的高效实现,支持增量处理,内存占用可控,可直接处理高维数据:

from sklearn.cluster import Birch

birch = Birch(n_clusters=10, threshold=0.5, branching_factor=50)
cluster_labels = birch.fit_predict(data)

4. 先做特征选择减少维度

用特征选择替代降维,过滤无效特征,从根源减少数据规模:

方差过滤

移除方差极小的无区分度特征:

from sklearn.feature_selection import VarianceThreshold

selector = VarianceThreshold(threshold=0.01)  # 阈值按需调整
data_filtered = selector.fit_transform(data)

也可根据特征与聚类目标的相关性(如互信息)筛选核心特征,进一步压缩数据维度。

5. 分布式/并行框架支持

如果单机内存仍不足,用Dask框架实现分块并行处理,突破单机内存限制:

import dask.array as da
from dask_ml.decomposition import PCA
from dask_ml.cluster import KMeans

# 以分块方式加载数据
data = da.from_array(np.loadtxt('your_dataset.csv', delimiter=','), chunks=(10000, 200))

# Dask分布式PCA降维
pca = PCA(n_components=50)
reduced_data = pca.fit_transform(data)

# Dask分布式KMeans聚类
kmeans = KMeans(n_clusters=10)
cluster_labels = kmeans.fit_predict(reduced_data)

确保使用64位Python环境,32位环境内存限制远低于64位,容易触发溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:17:19