栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

大数据增量PCA

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大数据增量PCA

您的程序可能无法尝试将整个数据集加载到RAM中。每个float32 32×1,000,000×1000 32位为3.7 GiB。在只有4 GiB
RAM的机器上,这可能是个问题。要检查实际上是否是问题,请尝试单独创建一个具有此大小的数组:

>>> import numpy as np>>> np.zeros((1000000, 1000), dtype=np.float32)

如果看到

MemoryError
,则可能需要更多RAM,或者需要一次处理一个数据块。

对于h5py数据集,我们应该避免将整个数据集传递给我们的方法,而应传递数据集的切片。一次一个。

由于我没有您的数据,因此让我从创建相同大小的随机数据集开始:

import h5pyimport numpy as nph5 = h5py.File('rand-1Mx1K.h5', 'w')h5.create_dataset('data', shape=(1000000,1000), dtype=np.float32)for i in range(1000):    h5['data'][i*1000:(i+1)*1000] = np.random.rand(1000, 1000)h5.close()

它会创建一个漂亮的3.8 GiB文件。

现在,如果我们在Linux中,我们可以限制程序可以使用多少内存:

$ bash$ ulimit -m $((1024*1024*2))$ ulimit -m2097152

现在,如果我们尝试运行您的代码,我们将得到MemoryError。(按Ctrl-D退出新的bash会话并稍后重新设置限制)

让我们尝试解决问题。我们将创建一个IncrementalPCA对象,并将

.partial_fit()
多次调用其方法,每次都提供数据集的不同部分。

import h5pyimport numpy as npfrom sklearn.decomposition import IncrementalPCAh5 = h5py.File('rand-1Mx1K.h5', 'r')data = h5['data'] # it's ok, the dataset is not fetched to memory yetn = data.shape[0] # how many rows we have in the datasetchunk_size = 1000 # how many rows we feed to IPCA at a time, the divisor of nipca = IncrementalPCA(n_components=10, batch_size=16)for i in range(0, n//chunk_size):    ipca.partial_fit(data[i*chunk_size : (i+1)*chunk_size])

它似乎对我有用,如果我查看

top
报告,则内存分配保持在200M以下。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号