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

相关推荐
春日见27 分钟前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊28 分钟前
”回调“高级
算法·青少年编程
云里雾里!33 分钟前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
二川bro1 小时前
量子计算入门:Python量子编程基础
python
陈文锦丫2 小时前
MixFormer: A Mixed CNN–Transformer Backbone
人工智能·cnn·transformer
夏天的味道٥2 小时前
@JsonIgnore对Date类型不生效
开发语言·python
tsumikistep3 小时前
【前后端】接口文档与导入
前端·后端·python·硬件架构
小毅&Nora3 小时前
【人工智能】【AI外呼】系统架构设计与实现详解
人工智能·系统架构·ai外呼
小白学大数据3 小时前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
一只侯子3 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉