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

相关推荐
大千AI助手2 分钟前
SWE-bench:真实世界软件工程任务的“试金石”
人工智能·深度学习·大模型·llm·软件工程·代码生成·swe-bench
hqxstudying3 分钟前
JAVA项目中邮件发送功能
java·开发语言·python·邮件
Q_Q51100828522 分钟前
python的软件工程与项目管理课程组学习系统
spring boot·python·django·flask·node.js·php·软件工程
pusue_the_sun29 分钟前
数据结构——栈和队列oj练习
c语言·数据结构·算法··队列
大锦终30 分钟前
【算法】模拟专题
c++·算法
天上的光1 小时前
17.迁移学习
人工智能·机器学习·迁移学习
合作小小程序员小小店1 小时前
SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
python·安全·生成对抗网络·网络安全·网络攻击模型
后台开发者Ethan1 小时前
Python需要了解的一些知识
开发语言·人工智能·python
Xの哲學1 小时前
Perf使用详解
linux·网络·网络协议·算法·架构
北京_宏哥1 小时前
Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
前端·python·面试