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

相关推荐
IT古董2 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
繁依Fanyi6 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
CV学术叫叫兽17 分钟前
快速图像识别:落叶植物叶片分类
人工智能·分类·数据挖掘
烦躁的大鼻嘎22 分钟前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
湫ccc26 分钟前
《Python基础》之pip换国内镜像源
开发语言·python·pip
hakesashou27 分钟前
Python中常用的函数介绍
java·网络·python
菜鸟的人工智能之路37 分钟前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python38 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
C++忠实粉丝39 分钟前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
小白不太白95039 分钟前
设计模式之 责任链模式
python·设计模式·责任链模式