【Python机器学习】处理文本数据——用tf-idf缩放数据

为了按照我们预计的特征信息量大小来缩放特征,而不是舍弃那些认为不重要的特征,最常见的一种做法就是使用词频-逆向文档频率(tf-idf)。这一方法对某个特定文档中经常出现的术语给与很高的权重,但是堆在语料库的许多文档中都经常出现的属于给与的权重却不高。如果一个单词在某个特定文档中经常出现,但在其他文档中却不经常出现,那么这个单词很可能是对文档内容的很好描述。

scikit-learn在两个类中实现了tf-idf方法:TfidfTransformer和TfidfVectorizer,前者接受CountVectorizer生成的稀疏矩阵并将其转换,后者接受文本数据并完成词袋特征提取与tf-idf变换。

tf-idf缩放方案有几种变体。单词w在文档d中的tf-idf分数在TfidfTransformer类和TfidfVectorizer类中都有体现,其计算公式如下所示:

tfidf(w,d)=tf log ((N+1)/(+1))+1

其中,N是训练集中文档数量,是训练集中出现单词w的文档数量,tf(词频)是单词w在文档d(想要变换或编码的文档)中出现的次数。两个类在计算td-idf表示之后都还应用了L2范数。换句话说,它们将每个文档的表示缩放到欧几里得范数为1。利用这种缩放方法,文档长度不会改变向量化表示。

由于tf-idf实际上利用了训练数据的统计学属性,所以我们将使用管道,以确保网格搜索的结果有效。所以会得到下列代码:

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV

pipe=make_pipeline(TfidfVectorizer(min_df=5),LogisticRegression())
param_grid={'logisticregression__C':[0.001,0.01,0.1,1,10,100]}

grid=GridSearchCV(pipe,param_grid=param_grid,cv=5)
grid.fit(text_train,y_train)

tf-idf代替仅统计词数,模型性能会有所提高。我们还可以查看tf-idf找到的最重要单词。要记住,tf-idf缩放的目的是找到能够区分文档的单词,但它完全是一种无监督技术。因此,这里的"重要"不一定与最终要寻找的标签有关。

首先,我们从管道中提取TfidfVectorizer

python 复制代码
vectorizer=grid.best_estimator_.named_steps['tfidfvectorizer']
#变换训练数据集
X_train=vectorizer.transform(text_train)
#找到数据集中每个特征的最大值
max_value=X_train.max(axis=0).toarray().ravel()
sort_by_tfidf=max_value.argsort()
#获取特征名称
feature_names=np.array(vectorizer.get_feature_names())

tf-idf较小的特征要么是在许多文档中都很常用,要么就是很少使用,且仅出现在非常长的文档中。有趣的是,许多tf-idf较大的特征实际上对应的是特定的内容。

相关推荐
自不量力的A同学1 分钟前
Solon AI v3.9 正式发布:全能 Skill 爆发
java·网络·人工智能
Liekkas Kono5 分钟前
RapidOCR Python 贡献指南
开发语言·python·rapidocr
一枕眠秋雨>o<7 分钟前
从抽象到具象:TBE如何重构AI算子的编译哲学
人工智能
xiaobaibai1538 分钟前
决策引擎深度拆解:AdAgent 用 CoT+RL 实现营销自主化决策
大数据·人工智能
island13149 分钟前
CANN ops-nn 算子库深度解析:神经网络核心计算的硬件映射、Tiling 策略与算子融合机制
人工智能·深度学习·神经网络
冬奇Lab10 分钟前
一天一个开源项目(第14篇):CC Workflow Studio - 可视化AI工作流编辑器,让AI自动化更简单
人工智能·开源·编辑器
是小蟹呀^12 分钟前
从稀疏到自适应:人脸识别中稀疏表示的核心演进
人工智能·分类
张张努力变强12 分钟前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
云边有个稻草人12 分钟前
CANN ops-nn:筑牢AIGC的神经网络算子算力底座
人工智能·神经网络·aigc·cann
island131412 分钟前
CANN Catlass 算子模板库深度解析:高性能 GEMM 架构、模板元编程与融合算子的显存管理策略
人工智能·神经网络·架构·智能路由器