TfidfVectorizer设max_df=1.0仍保留跨文档词汇的问题
问题解析与解决
核心误解:max_df参数的正确含义
你完全搞反了max_df的作用:
max_df=1.0的意思是允许出现在100%文档中的词被保留,根本不会过滤任何高频词,这和你理解的“剔除出现在至少一个其他文档中的词”完全相反。- 只有当
max_df设置为小于1.0的数值时(比如max_df=0.8),才会过滤掉出现在超过对应比例文档里的高频词。
为什么"book"没被过滤
你的参数配置里:
min_df=5:要求词至少出现在5个文档中才会被保留,"book"显然满足这个条件。max_df=1.0:允许词出现在所有文档里,所以"book"完全符合保留规则,自然会出现在后续的聚类结果中。
解决办法
如果想过滤掉这类在绝大多数文档中都出现的通用词,把max_df调整为一个小于1.0的比例值,比如:
max_df = 0.8 # 剔除出现在超过80%文档中的词 vectorizer = TfidfVectorizer(stop_words='english', min_df=5, max_df=max_df, max_features=100000) c_vectorizer = CountVectorizer(stop_words='english', min_df=5, max_df=max_df, max_features=100000)
这样像"book"这类高频通用词就会被过滤掉,不会出现在聚类主题里了。
内容的提问来源于stack exchange,提问作者per web
相关产品推荐
相关产品推荐

