【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较大的特征实际上对应的是特定的内容。

相关推荐
Data-Miner几秒前
大语言模型+智能体AI,122页PPT详解落地应用培训!
人工智能·microsoft·语言模型
AC赳赳老秦4 分钟前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
AI袋鼠帝6 分钟前
终于找到一键做爆款AI短视频的办法了!OiiOii 2.0升级实测【保姆级教程】
人工智能·aigc
双翌视觉6 分钟前
机器视觉系统为何离不开光学滤光片?
人工智能·数码相机·视觉检测·制造
Database_Cool_9 分钟前
什么是数据仓库物化视图?AnalyticDB MySQL 实时物化视图能力解析
人工智能·mysql·阿里云
2601_9547064910 分钟前
云手机技术详解+Python实战调用|2026高稳云手机平台推荐
开发语言·python·智能手机
chushiyunen11 分钟前
java中的路径处理、左右斜杠
java·开发语言·python
o_insist14 分钟前
LangGraph 入门:用 StateGraph 构建 Agent 的五步流程
人工智能·agent
用户6324150317815 分钟前
Next.js App Router 里做 AI 流式输出
人工智能
星落zx18 分钟前
Spring Boot 多模型集成:优雅调用全球主流大模型
人工智能·spring boot·chatgpt