首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中大型数据集的文本分类

python中大型数据集的文本分类
EN

Stack Overflow用户
提问于 2017-12-03 15:19:36
回答 1查看 664关注 0票数 4

我有220万个数据样本要分类到7500多个类别。我正在使用熊猫和sckit-学习巨蟒这样做。

下面是我的数据集的示例

代码语言:javascript
复制
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

以下是我所遵循的步骤:

  1. 前处理
  2. 向量表示
  3. 培训 dataset'description'=dataset'description'.str.replace('^a-zA-Z',dataset'description'=dataset'description'.str.replace('\d',(“trainset.csv”,编码= "ISO-8859-1",low_memory=False)‘') dataset'description'=dataset'description'.str.lower() stop = stopwords.words('english')狐猴= WordNetLemmatizer() dataset'description'=dataset'description'.str.replace(r'\b(’+r‘b’..join(Stop)+r ') \b\s*,‘') dataset'description'=dataset'description'.str.replace('\s\s+',’)数据集‘’description‘=dataset’‘..apply(Word_tokenize);ADJ_SAT,ADV,名词,动词= 'a','s','r','n','v‘POS_LIST =名词,POS_LIST中标记的动词,ADJ,ADV :数据集’‘description’=dataset‘’description‘。( dataset'description'=dataset'description'.apply(lambda x:".join(x)) countvec = CountVectorizer(min_df=0.0005) documenttermmatrix=countvec.fit_transform(dataset'description') column=countvec.get_feature_names() y_train=数据集类别‘y_train=数据集’类别‘..tolist()

生成的文档项矩阵将是具有12k特征和220万个样本的枕型csr矩阵。

为了进行培训,我尝试使用sckit的xgboost学习。

代码语言:javascript
复制
model = XGBClassifier(silent=False,n_estimators=500,objective='multi:softmax',subsample=0.8)
model.fit(documenttermmatrix,y_train,verbose=True)

在执行上述代码2-3分钟后,我得到了错误。

代码语言:javascript
复制
OSError: [WinError 541541187] Windows Error 0x20474343

我也尝试过朴素的贝叶斯的sckit学习,我得到了内存错误。

问题

我使用的是占用内存非常少的Scipy矩阵,并且在执行xgboost或朴素bayes之前删除所有未使用的对象,我使用的是带有128 am内存的系统,但在训练时仍然会出现内存问题。

我是python.Is的新手,在我的代码中有什么问题吗?有人能告诉我如何有效地使用内存并继续前进吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-04 03:12:24

我想我可以在你的代码中解释这个问题。操作系统错误似乎是:

代码语言:javascript
复制
ERROR_DS_RIDMGR_DISABLED
8263 (0x2047)

目录服务检测到分配相对标识符的子系统被禁用。当系统确定相当一部分相对标识符(RID)已经耗尽时,这可以作为保护机制发生。

“通过https://msdn.microsoft.com/en-us/library/windows/desktop/ms681390

我认为您在代码中的这一步耗尽了大部分RID:

代码语言:javascript
复制
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()的调用中引用该函数。下面是我如何编写上述函数的方法。

代码语言:javascript
复制
def lemmatize_descriptions(x):
return list(set([lemmatizer.lemmatize(item,tag) for item in x]))

那么,对()的调用将是-

代码语言:javascript
复制
dataset['description'] = dataset['description'].apply(lemmatize_descriptions)

这是文件。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47619836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档