Python文本特征提取 CountVectorizer,TfidfVectorizer

本文介绍了Python中用于文本特征提取的CountVectorizer和TfidfVectorizer。CountVectorizer仅考虑词汇频率,而TfidfVectorizer通过考虑词汇频率和文档频率,能减少常见词汇的影响,从而提取更有意义的特征。在对比实验中,使用这两种方法结合朴素贝叶斯进行分类,并评估其效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python文本特征提取 CountVectorizer,TfidfVectorizer

特征提取:
将文本数据转化成特征向量的过程

不考虑词语出现的顺序,每个出现过的词汇单独作为一列特征,这些不重复的特征词汇集合为词表,每一个文本都可以在很长的词表上统计出一个很多列的特征向量。
如果每个文本都出现的词汇,一般被标记为"停用词"不计入特征向量。

主要有两个API来实现 CountVectorizer 和 TfidfVectorizer

CountVectorizer:
只考虑词汇在文本中出现的频率
TfidfVectorizer:
除了考量某词汇在文本出现的频率,还关注包含这个词汇的所有文本的数量

TfidfVectorizer能够削减高频没有意义的词汇出现带来的影响, 挖掘更有意义的特征,相比之下,文本条目越多,Tfid的效果会越显著

下面对两种提取特征的方法,分别设置停用词和不停用,使用朴素贝叶斯进行分类预测,比较评估效果。

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report

#下载新闻数据
news = fetch_20newsgroups(subset = "all")
#分割训练数据和测试数据
x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,
                                                  test_size = 0.25,random_state = 33)

#采用CountVectorizer提取特征向量
# 默认配置不去除停用词
count_vec = CountVectorizer()
x_count_train = count_vec.fit_transform(x_train)
x_count_test = count_vec.transform(x_test)
# 去除停用词
count_stop_vec = CountVectorizer(analyzer='word', stop_words='english')
x_count_stop_train = count_stop_vec.fit_transform(x_train)
x_count_stop_test = count_stop_vec.transform(x_test)

#采用TfidfVectorizer()提取特征向量
# 默认配置不去除停用词
tfid_vec = TfidfVectorizer()
x_tfid_train = tfid_vec.fit_transform(x_train)
x_tfid_test = tfid_vec.transform(x_test)
# 去除停用词
tfid_stop_vec = TfidfVectorizer(analyzer='word', stop_words='english')
x_tfid_stop_train = tfid_stop_vec.fit_transform(x_train)
x_tfid_stop_test = tfid_stop_vec.transform(x_test)

#使用朴素贝叶斯分类器,分别对两种提取出来的特征值进行学习和预测
#方法一:对CountVectorizer提取特征向量,进行学习和预测
mnb_count = MultinomialNB()
mnb_count.fit(x_count_train,y_train)#学习
mnb_count_y_predict = mnb_count.predict(x_count_test)#预测
#去除停用词
mnb_count_stop = MultinomialNB()
mnb_count_stop.fit(x_count_stop_train
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值