如何缩小 bag-of-words 模型?
How to shrink a bag-of-words model?
问题标题说明了一切:我怎样才能使 bag-of-words 模型变小?我使用随机森林和 bag-of-words 特征集。我的模型大小达到 30 GB,我确信功能集中的大多数单词对整体性能没有贡献。
如何在不损失(太多)性能的情况下缩小大型 bag-of-words 模型?
如果您不想更改神经网络的架构,而只想减少内存占用,可以进行的调整是减少 CountVectorizer 注释的项。
从 scikit-learn
文档中,我们有(至少)三个参数来减少词汇量。
max_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认值=1.0
构建词汇表时忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None.
,则忽略此参数
min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认值=1
构建词汇表时忽略文档频率严格低于给定阈值的术语。该值在文献中也称为截止值。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None.
,则忽略此参数
max_features : 整数或 None, 默认=None
如果不是 None,构建一个词汇表,只考虑语料库中按词频排序的前 max_features。
如果词汇表不是 None.
,则忽略此参数
首先,尝试玩 max_df 和 min_df。如果尺寸仍然不符合您的要求,您可以使用 max_features 降低尺寸。
注意:
max_features 调整可以比其他参数
更大幅度地降低分类准确率
使用特征选择。特征选择使用一些评分函数,根据特征在标签方面的分布从数据集中删除特征。
例如,很少出现或随所有标签随机出现的特征不太可能有助于准确分类,因此得分较低。
这是一个使用 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
,其功能相同,但允许您指定要保留的要素的绝对数量,而不是百分比。
问题标题说明了一切:我怎样才能使 bag-of-words 模型变小?我使用随机森林和 bag-of-words 特征集。我的模型大小达到 30 GB,我确信功能集中的大多数单词对整体性能没有贡献。
如何在不损失(太多)性能的情况下缩小大型 bag-of-words 模型?
如果您不想更改神经网络的架构,而只想减少内存占用,可以进行的调整是减少 CountVectorizer 注释的项。
从 scikit-learn
文档中,我们有(至少)三个参数来减少词汇量。
max_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认值=1.0
构建词汇表时忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None.
,则忽略此参数min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认值=1
构建词汇表时忽略文档频率严格低于给定阈值的术语。该值在文献中也称为截止值。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None.
,则忽略此参数max_features : 整数或 None, 默认=None
如果不是 None,构建一个词汇表,只考虑语料库中按词频排序的前 max_features。 如果词汇表不是 None.
,则忽略此参数首先,尝试玩 max_df 和 min_df。如果尺寸仍然不符合您的要求,您可以使用 max_features 降低尺寸。
注意:
max_features 调整可以比其他参数
使用特征选择。特征选择使用一些评分函数,根据特征在标签方面的分布从数据集中删除特征。
例如,很少出现或随所有标签随机出现的特征不太可能有助于准确分类,因此得分较低。
这是一个使用 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
,其功能相同,但允许您指定要保留的要素的绝对数量,而不是百分比。