我有220万个数据样本要分类到7500多个类别。我正在使用熊猫和sckit-学习巨蟒这样做。
下面是我的数据集的示例
itemid description category
11802974 SPRO VUH3C1 DIFFUSER VUH1 TRIPLE Space heaters Architectural Diffusers
10688548 ANTIQUE BRONZE FINISH PUSHBUTTON switch Door Bell Pushbuttons
9836436 Descente pour Cable tray fitting and accessories Tray Cable Drop Outs以下是我所遵循的步骤:
生成的文档项矩阵将是具有12k特征和220万个样本的枕型csr矩阵。
为了进行培训,我尝试使用sckit的xgboost学习。
model = XGBClassifier(silent=False,n_estimators=500,objective='multi:softmax',subsample=0.8)
model.fit(documenttermmatrix,y_train,verbose=True)在执行上述代码2-3分钟后,我得到了错误。
OSError: [WinError 541541187] Windows Error 0x20474343我也尝试过朴素的贝叶斯的sckit学习,我得到了内存错误。
问题
我使用的是占用内存非常少的Scipy矩阵,并且在执行xgboost或朴素bayes之前删除所有未使用的对象,我使用的是带有128 am内存的系统,但在训练时仍然会出现内存问题。
我是python.Is的新手,在我的代码中有什么问题吗?有人能告诉我如何有效地使用内存并继续前进吗?
发布于 2017-12-04 03:12:24
我想我可以在你的代码中解释这个问题。操作系统错误似乎是:
“
ERROR_DS_RIDMGR_DISABLED
8263 (0x2047)目录服务检测到分配相对标识符的子系统被禁用。当系统确定相当一部分相对标识符(RID)已经耗尽时,这可以作为保护机制发生。
“通过https://msdn.microsoft.com/en-us/library/windows/desktop/ms681390
我认为您在代码中的这一步耗尽了大部分RID:
dataset['description'] = dataset['description'].apply(lambda x:
list(set([lemmatizer.lemmatize(item,tag) for item in x])))你在你的lambda中传递一个狐猴,但是lambda是匿名的,所以看起来你可能会在运行时复制220万份这个狐猴。
当您遇到内存问题时,应该尝试将low_memory标志更改为true。
回应意见-
我检查了Pandas文档,您可以在dataset‘’description‘..apply()之外定义一个函数,然后在对dataset’‘description’..apply()的调用中引用该函数。下面是我如何编写上述函数的方法。
def lemmatize_descriptions(x):
return list(set([lemmatizer.lemmatize(item,tag) for item in x]))那么,对()的调用将是-
dataset['description'] = dataset['description'].apply(lemmatize_descriptions)这是文件。
https://stackoverflow.com/questions/47619836
复制相似问题