使用scikit Python包进行决策树时出现66k特征的内存错误
问题描述
我有一个包含1600000行和大约66000个特征的文档。 我正在使用“词袋模型”来构建决策树。 以下代码在处理1000行的文档时运行良好,但在处理实际的1600000行文档时却出现了内存错误。 我的服务器有64GB的内存。
有没有办法直接使用稀疏矩阵,而不是使用.todense()
或.toarray()
?或者有没有办法减少默认的float64类型?
请帮帮我。
代码:
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,stop_words='english')
X_train = vectorizer.fit_transform(corpus)
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train.todense(),corpus2)
错误:
Traceback (most recent call last):
File "test123.py", line 103, in <module>
clf = clf.fit(X_train.todense(),corpus2)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 458, in todense
return np.asmatrix(self.toarray())
File "/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py", line 550, in toarray
return self.tocoo(copy=False).toarray()
File "/usr/lib/python2.7/dist-packages/scipy/sparse/coo.py", line 219, in toarray
B = np.zeros(self.shape, dtype=self.dtype)
MemoryError
简而言之,有没有方法可以在包含66000个特征的大型数据集上使用分类树?
1 个回答
0
添加 dtype=np.float32,比如:vec = TfidfVectorizer(..., dtype=np.float32)
至于稀疏和密集数据,我也遇到过类似的问题。像 GradientBoostingClassifier、RandomForestClassifier 或 DecisionTreeClassifier 这些模型需要密集数据,所以我选择使用 SVC。