【问题标题】:How to shrink a bag-of-words model?如何缩小词袋模型?
【发布时间】:2020-01-31 12:29:14
【问题描述】:

问题标题说明了一切:如何使词袋模型更小?我使用随机森林和词袋特征集。我的模型大小达到 30 GB,我确信特征集中的大多数单词对整体性能没有贡献。

如何在不损失(太多)性能的情况下缩小大词袋模型?

【问题讨论】:

    标签: scikit-learn nlp classification random-forest text-classification


    【解决方案1】:

    如果您不想更改神经网络的架构而只是想减少内存占用,可以进行的调整是减少 CountVectorizer 注释的术语。 从scikit-learn 文档中,我们(至少)有三个参数来减少词汇量。

    ma​​x_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 = 1.0

    在构建词汇表时,忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

    min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 = 1

    在构建词汇表时,忽略文档频率严格低于给定阈值的术语。该值在文献中也称为截止值。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

    ma​​x_features : int 或 None,默认=None

    如果不是 None,则构建一个仅考虑按语料库中的词频排序的最高 max_features 的词汇表。 如果词汇表不是 None,则忽略此参数。

    首先,尝试使用 ma​​x_dfmin_df。如果尺寸仍然不符合您的要求,您可以使用 ma​​x_features 随意降低尺寸。

    注意
    ma​​x_features 调整可以比其他参数以更高的比率降低分类准确度

    【讨论】:

      【解决方案2】:

      使用特征选择。特征选择使用一些评分函数,根据它们相对于标签的分布从数据集中删除特征。

      例如,很少出现或随所有标签随机出现的特征不太可能有助于准确分类,并且得分较低。

      这是一个使用sklearn的示例:

      from sklearn.feature_selection import SelectPercentile
      
      # Assume some matrix X and labels y
      # 10 means only include the 10% best features
      selector = SelectPercentile(percentile=10)
      
      # A feature space with only 10% of the features
      X_new = selector.fit_transform(X, y)
      
      # See the scores for all features
      selector.scores
      

      与往常一样,请务必仅对您的训练数据调用 fit_transform。使用开发或测试数据时,仅使用transform。有关其他文档,请参阅 here

      请注意,还有一个 SelectKBest,它的作用相同,但它允许您指定要保留的特征的绝对数量,而不是百分比。

      【讨论】:

        猜你喜欢
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        相关资源
        最近更新 更多