首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
4.1 分类变量
4.1.1 One-Hot 编码(虚拟变量)
4.1.2 数字可以编码分类变量
4.2 分箱、离散化、线性模型与树
4.3 交互特征与多项式特征
4.4 单变量非线性变换
4.5 自动化特征选择
4.5.1 单变量统计
4.5.2 基于模型的特征选择
4.5.3 迭代特征选择
4.6 利用专家知识
5.1 交叉验证
5.1.1 scikit-learn 中的交叉验证
5.1.2 交叉验证的优点
5.1.3 分层k 折交叉验证和其他策略
5.2 网格搜索
5.2.1 简单网格搜索
5.2.2 参数过拟合的风险与验证集
5.2.3 带交叉验证的网格搜索
5.3 评估指标与评分
5.3.1 牢记目标
5.3.2 二分类指标
5.3.3 多分类指标
5.3.4 回归指标
5.3.5 在模型选择中使用评估指标
6.1 用预处理进行参数选择
6.2 构建管道
6.3 在网格搜索中使用管道
6.4 通用的管道接口
6.4.1 用make_pipeline 方便地创建管道
6.4.2 访问步骤属性
6.4.3 访问网格搜索管道中的属性
6.5 网格搜索预处理步骤与模型参数
6.6 网格搜索选择使用哪个模型
7.1 用字符串表示的数据类型
7.2 示例应用:电影评论的情感分析
7.3 将文本数据表示为词袋
7.3.1 将词袋应用于玩具数据集
7.3.2 将词袋应用于电影评论
7.4 停用词
7.5 用tf-idf 缩放数据
7.6 研究模型系数
7.7 多个单词的词袋(n元分词)
7.8 分词、词干提取与词形还原
7.9 主题建模与文档聚类
8.1 处理机器学习问题
8.2 从原型到生产
8.3 测试生产系统
8.4 构建你自己的估计器
8.5 下一步怎么走
8.5.1 理论
8.5.2 其他机器学习框架和包
8.5.3 排序、推荐系统与其他学习类型
8.5.4 概率建模、推断与概率编程
8.5.5 神经网络
8.5.6 推广到更大的数据集
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(下)
小册名称:Python机器学习基础教程(下)
### 7.5 用TF-IDF 缩放数据 在机器学习的文本处理领域,数据预处理是一个至关重要的步骤,它直接影响到模型的学习效果和泛化能力。文本数据由于其高维性、稀疏性和语义复杂性,通常需要经过一系列的处理才能被机器学习算法有效处理。其中,TF-IDF(Term Frequency-Inverse Document Frequency)是一种广泛使用的文本特征提取方法,它不仅能够反映词在文档中的重要性,还能在一定程度上解决文本数据的高维问题。本章将深入探讨TF-IDF的基本原理、计算方法及其在数据缩放中的应用。 #### 7.5.1 TF-IDF 基本原理 TF-IDF 是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的其中一份文件的重要程度。其重要性随着该词在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。这帮助过滤掉一些常见的词语(如“的”、“是”等停用词),因为它们几乎在所有文档中都会出现,但对文档的具体内容贡献不大。 - **TF(Term Frequency)**:词频,即某个词在文档中出现的次数。为了防止词频偏向长文档,通常会进行归一化处理,如计算该词在文档中出现的次数除以文档的总词数。 - **IDF(Inverse Document Frequency)**:逆文档频率,是词语普遍重要性的度量。它表示某个词的普遍重要性随着它在文档集中出现的文档数增加而下降。IDF的计算公式通常为`IDF(t) = log(N / (df_t + 1))`,其中`N`是文档总数,`df_t`是包含词`t`的文档数。分母加1是为了避免分母为0的情况。 TF-IDF值则是TF与IDF的乘积,即`TF-IDF(t,d) = TF(t,d) * IDF(t)`,表示词`t`在文档`d`中的权重。 #### 7.5.2 TF-IDF 的计算步骤 1. **文本预处理**:首先,需要对文本进行清洗,包括去除标点符号、停用词、转换为小写或大写等,以减少噪声对TF-IDF计算的影响。 2. **构建词汇表**:遍历所有文档,统计所有出现过的词,构建一个包含所有唯一词的词汇表。 3. **计算TF**:对于每个文档,计算词汇表中每个词在该文档中的词频(TF),并进行归一化处理。 4. **计算IDF**:遍历整个文档集,根据IDF的计算公式,为词汇表中的每个词计算其IDF值。 5. **计算TF-IDF**:将每个词的TF值与IDF值相乘,得到该词在每个文档中的TF-IDF值。 6. **构建TF-IDF矩阵**:将每个文档的TF-IDF值组合成一个矩阵,其中行代表文档,列代表词汇表中的词,每个元素是对应词在对应文档中的TF-IDF值。 #### 7.5.3 TF-IDF 在数据缩放中的应用 虽然TF-IDF本身不是一种直接的数据缩放方法,但它通过转换文本数据为数值型特征,间接实现了数据的降维和缩放。在机器学习模型中,尤其是基于距离计算的算法(如KNN、SVM等),特征向量的尺度差异会严重影响算法的性能。TF-IDF通过赋予不同词语不同的权重,使得那些对文档内容贡献较大的词语在特征空间中具有更高的维度权重,从而在一定程度上缓解了特征尺度不一致的问题。 此外,TF-IDF还能够帮助处理高维稀疏性问题。在自然语言处理中,由于词汇量巨大,直接将文本转换为词袋模型(Bag of Words)会导致特征空间极其高维且稀疏。而TF-IDF通过降低常见词的权重,使得特征向量更加紧凑,减少了计算量和存储需求。 #### 7.5.4 TF-IDF 的优缺点 **优点**: - 能够有效反映词在文档中的重要性。 - 通过降低常见词的权重,有助于处理高维稀疏性问题。 - 是一种简单且广泛应用的文本特征提取方法。 **缺点**: - 忽略了词语之间的语义关系,无法处理一词多义或同义词的情况。 - 对于短文本的处理效果可能不佳,因为短文本中词汇的共现信息较少。 - 对停用词的处理依赖于预先定义的停用词列表,可能引入偏差。 #### 7.5.5 实战应用 在Python中,使用`scikit-learn`库可以方便地实现TF-IDF的计算。以下是一个简单的示例代码: ```python from sklearn.feature_extraction.text import TfidfVectorizer # 示例文档 documents = [ "Python is an awesome programming language.", "Java is another popular programming language.", "Python and Java are both used in machine learning." ] # 创建TF-IDF转换器 vectorizer = TfidfVectorizer() # 拟合并转换文档 tfidf_matrix = vectorizer.fit_transform(documents) # 查看转换后的TF-IDF矩阵 print(tfidf_matrix.toarray()) # 查看词汇表 print(vectorizer.get_feature_names_out()) ``` 在这个例子中,`TfidfVectorizer`类被用来将文本数据转换为TF-IDF矩阵。`fit_transform`方法首先学习词汇表,并将文档转换为TF-IDF表示。最后,通过`toarray()`方法可以将稀疏矩阵转换为NumPy数组以便查看,而`get_feature_names_out()`方法则用于获取词汇表中的词。 #### 7.5.6 结论 TF-IDF作为一种经典的文本特征提取方法,在机器学习领域尤其是文本处理方面发挥着重要作用。通过计算词频和逆文档频率的乘积,TF-IDF能够有效地评估词在文档中的重要性,并帮助降低文本数据的高维稀疏性问题。然而,它也存在一些局限性,如无法处理语义关系等。在实际应用中,我们可以结合其他文本处理技术(如词嵌入)来弥补这些不足,以获得更好的模型性能。
上一篇:
7.4 停用词
下一篇:
7.6 研究模型系数
该分类下的相关小册推荐:
Python合辑7-集合、列表与元组
Python高并发编程与实战
Python爬虫入门与实战开发(上)
Python合辑4-130个字符串操作示例
Python合辑10-函数
Python合辑3-字符串用法深度总结
Python合辑5-格式化字符串
Python编程轻松进阶(二)
Python编程轻松进阶(四)
Python数据分析与挖掘实战(下)
Python编程轻松进阶(五)
剑指Python(万变不离其宗)