首先,我昨天开始使用python。我正在尝试使用SciKit和一个大型数据集(250.000条推文)进行文本分类。对于该算法,每条推文都将表示为4000 x 1的向量,因此这意味着输入是250.000行和4000列。当我试图在python中构造它时,我在8500条推文后(处理列表并附加它时)内存耗尽,当我预分配内存时,我只得到错误:MemoryError
(np.zeros(40002500000))。SciKit不能处理这些大型数据集吗?我做错了什么吗(因为这是我和python相处的第二天)?有没有另一种方式来表示这些特征,以便它能融入我的记忆?
编辑:我想要到伯努利NB
edit2:也许在线学习是可能的?阅读一条推文,让模型使用该推文,将其从内存中删除,阅读另一条,让模型学习。。。但我不认为伯努利NB允许在scikit学习中进行在线学习
如果您使用scikit的矢量器(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)
我假设这4000 x 1个向量是单词包表示。如果是这样的话,那么250000乘4000的矩阵有很多零,因为每条推文中只有很少的单词。这类矩阵被称为稀疏矩阵,有一些有效的方法可以将它们存储在内存中。请参阅Scipy文档和SciKit文档,了解稀疏矩阵,以便入门;如果你在阅读这些链接后需要更多帮助,请再次发帖。