【机器学习】TF-IDF词袋模型简介

引言

TF-IDF 全称为TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文档频率), 这是一种统计方法,用来评估一个词对于一个文件集或语料库中的其中一份文件的重要程度,字词的重要性随着它在文件中出现的次数成正比增加, 但是同时也会随着它在语料库中出现的频率成反比下降。

也就是说,一个词语在一个文章中出现的次数越多, 同时在所有文档中出现的次数越少,则越能够代表这篇文章。

TF-IDF 计算公式

TF(Term Frequency,词频)表示词条在文本中出现的频率

公式使用文字的描述会比较清晰。
TF = 某个词在文章中出现的总次数/文章的总词数

IDF 用来表示逆文档频率, 所谓逆文档频率其实是用来反映一个词在所有文档中出现的频率, 当一个词在很多文档中出现的时候, 对应的IDF的值也会变低, 当一个词在很少的文档中出现的时候, 其对应的IDF的值就会变高。计算公式如下:

IDF = log(语料库中的文档总数/ (包含该词的文档数 + 1))

我们把TF-IDF 定义为:

TF-IDF = TF * ID

思考:

  1. TF-IDF输出来的数据形状是啥样子?
    计算出来的应该是一个矩阵,第一个维度的大小,是所有词的个数, 第二个维度的大小,是文章的个数。 这个矩阵一般是非常稀疏的,因为词库中词的数量是非常多的,但是一个句子中的词的数量比较少。
  2. TF-IDF矩阵中每个元素的值域是什么呢?
    TF的值域为[0, 1]
    IDF 的值域: 接近0的负数 到 正无穷
    考虑两个极端情况:
  • 如果包含该词的文档数很少, 例如 1, 那么IDF的值会非常大。
  • 如果包含该词的文档数很多, 例如,每个文档都有这个字, 那么IDF的值为负数,接近于0。

使用sklearn 来计算TF-IDF

这里写一个具体的实例,代码分析结果和数据结构。重点关注: 函数库的输入是啥,输出是啥?

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

text = [
    "what is the weather like today",
    "what is for dinner tonight",
    "this is a question worth pondering",
    "it is a beautiful day today",
    "i want go school"
]

# CountVectorizer()这个函数的作用是啥,什么场景下用比较合适? 答: 这个函数可以用来转换为词频矩阵。
# 一般来讲, 可以根据场景来确定使用词频矩阵作为特征还是 TF-IDF矩阵作为特征。

tfidf_vec = TfidfVectorizer()
# 得到 tfidf 的矩阵, 输入是一个可以迭代的访问字符串的对象, 比如列表,列表中的元素为字符串。
tfidf_matrix = tfidf_vec.fit_transform(text)
# 得到不重复的单词
print(tfidf_vec.get_feature_names())

# 得到每个单词所对应的ID,这是一个字典
print(tfidf_vec.vocabulary_)
# 输出矩阵,初学者可能看不懂这个矩阵,这里解释一下,由于是稀疏的, 采用三元组的形式表示这个矩阵的元素,对于非0的元素, 前面两个值表示元素在矩阵中的位置, 后面一个元素表示元素的值大小。
print(tfidf_matrix)
## 转化为pd 矩阵, 通过打印可以知道tfidf矩阵的大小, 列数为所有不同的单词数, 行数为句子的格式
df_pd = pd.DataFrame(tfidf_matrix.toarray())
# 打印数组的形状。
print(df_pd.shape)

# 如何打印这个矩阵的大小呢?
print(df_pd)
# 如何把这个矩阵变为列表呢?
weight = tfidf_matrix.toarray()
print(weight)

# data_list = df_pd.values.tolist()
# print(data_list)
# 如何把这个矩阵压缩呢? 希望使用PCA降维的方式来降低维度。
from sklearn.decomposition import PCA
print('原有维度: ', len(weight[0]))
print('开始降维')
pca = PCA(n_components=4)
X = pca.fit_transform(weight)
print('降维后维度: ', len(X[0]))
print(X)

总结

本文介绍了TF-IDF的基本概念,然后介绍了sklearn 中的具体使用方法,数据的输入输出以及降维处理。 了解了这些,基本就可以在实际的业务场景中灵活使用TF-IDF特征 进行机器学习训练了。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tf-idf词袋模型是一种用于文本处理和分析的技术。它的主要思想是将文本中的每个词汇作为一个特征,通过计算词汇在文档中的重要程度来进行特征提取和表示。它结合了词频(term frequency)和逆文档频率(inverse document frequency)的计算方法。 在tf-idf词袋模型中,词频表示了某个词汇在文档中出现的频率,逆文档频率表示了该词汇在整个文集中的重要程度。通过将词频和逆文档频率相乘,可以得到某个词汇在文档中的tf-idf值。通过对一篇文档中的所有词汇计算tf-idf值,可以得到该文档的特征向量表示。 jieba是一款常用的中文分词工具,可以将中文文本按照词语进行分割。在文本情感分类任务中,jieba可以被用于对文本进行分词预处理,将长句子切分成短语,并去除停用词等。分词后的文本可以作为特征的基础,用于情感分类任务。 文本情感分类是指通过对文本的分析和理解,将其归类为积极、消极或中性等情感类别。在进行情感分类时,可以利用tf-idf词袋模型提取文本的特征向量表示,并将其输入到机器学习模型中进行分类训练。根据文本中的词汇出现情况和tf-idf值,模型可以学习到不同词汇与情感类别之间的关联,从而进行文本情感的分类判断。 综上所述,tf-idf词袋模型和jieba在文本分类任务中扮演着重要的角色。它们分别用于提取文本的特征向量表示和中文文本分词预处理,为文本情感分类任务提供了基础。通过结合这两种技术,可以建立有效的文本情感分类模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值