2

首先,我昨天开始使用 python。我正在尝试使用 SciKit 和大型数据集(250.000 条推文)进行文本分类。对于该算法,每条推文都将表示为 4000 x 1 向量,因此这意味着输入是 250.000 行和 4000 列。当我尝试在 python 中构建它时,我在 8500 条推文后内存不足(使用列表并附加它时),当我预分配内存时,我得到了错误:MemoryError(np.zeros(4000,2500000))。SciKit 不能处理这些大型数据集吗?我做错了什么(因为这是我使用 python 的第二天)?是否有另一种表示特征的方式,以便它适合我的记忆?

编辑:我想要伯努利 NB

编辑2:也许在线学习是可能的?阅读一条推文,让模型使用这条推文,将其从内存中删除,阅读另一个,让模型学习......但我认为 Bernoulli NB 不允许在 scikit-learn 中进行在线学习

4

2 回答 2

7

如果您使用 scikits 的矢量化器(CountVectorizer或者TfidfVectorizer作为第一次尝试),您将获得稀疏矩阵表示。从文档中:

vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X_train = vectorizer.fit_transform(data_train.data)
#initialize your classifier
clf.fit(X_train, y_train)
于 2012-12-06T11:47:00.983 回答
3

我假设这些 4000 x 1 向量是词袋表示。如果是这样,那么 250000 x 4000 矩阵有很多零,因为在每条推文中只有很少的单词。这种矩阵称为稀疏矩阵,并且有有效的方法将它们存储在内存中。请参阅Scipy 文档SciKit 文档以了解稀疏矩阵以开始使用;如果您在阅读这些链接后需要更多帮助,请再次发布。

于 2012-12-06T10:27:44.203 回答