【问题标题】:text classification with SciKit-learn and a large dataset使用 SciKit-learn 和大型数据集进行文本分类
【发布时间】:2012-11-24 08:30:54
【问题描述】:

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

编辑:我想要伯努利 NB

edit2:在线学习可能吗?读一条推文,让模型使用这条推文,从内存中删除它,读另一个,让模型学习……但我认为 Bernoulli NB 不允许在 scikit-learn 中进行在线学习

【问题讨论】:

    标签: python nlp scikit-learn scikits


    【解决方案1】:

    如果您使用 scikits 的矢量化器(CountVectorizerTfidfVectorizer 第一次尝试很好),您将获得稀疏矩阵表示。来自文档:

    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)
    

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 实际上,scikits.sparse 包与这个问题无关,并且 scikit-learn 包含相当多的功能来向用户隐藏 scipy.sparse 的复杂性,尤其是。在文档分类的情况下。 -1 建议 OP 自己滚动。
    猜你喜欢
    • 2019-10-08
    • 2016-05-16
    • 2017-02-24
    • 2017-08-08
    • 2019-03-25
    • 2015-08-23
    • 2015-02-05
    • 2017-12-04
    • 2012-12-06
    相关资源
    最近更新 更多