#此篇为学习笔记,部分资料、图片来源 图灵程序设计丛书 《精通特征工程》阿曼达 .卡萨丽、爱丽丝.郑 著
在理想情况下,我们需要能强调出有意义的单词的表示方法
tf-idf:词袋的一种简单扩展
tf-idf是在词袋方法基础上的一种简单扩展,它表示词频-逆文档频率
TF(Term Frequency,词频):是指一个词在特定文档中出现的频率。如果一个词在文档中频繁出现,那么这个词对文档的重要性就高。
IDF(Inverse Document Frequency,逆文档频率):是用来衡量一个词的普遍重要性。如果一个词在文档集合中很多文档都出现,那么这个词的IDF值会比较低;反之,如果一个词只在少数文档中出现,那么这个词的IDF值会比较高。
举个例子:
假设我们有以下三个文档组成的语料库:
- 文档A:“狗是人类最好的朋友。”
- 文档B:“猫喜欢鱼。”
- 文档C:“狗和猫都是宠物。”
我们的目标是计算每个词在每个文档中的TF-IDF值,以确定哪些词对于每个文档来说是最重要的。
首先,我们计算词频(TF),即一个词在文档中出现的次数与文档中总词数的比例。
计算TF
- 文档A中,“狗”的TF是1/7,"是"的TF是1/7,"人类"的TF是1/7,"最好"的TF是1/7,"朋友"的TF是1/7。
- 文档B中,“猫”的TF是1/4,"喜欢"的TF是1/4,"鱼"的TF是1/4。
- 文档C中,“狗”的TF是1/7,"和"的TF是1/7,"猫"的TF是1/7,"都"的TF是1/7,"是"的TF是1/7,"宠物"的TF是1/7。
接下来,我们计算逆文档频率(IDF),这需要查看一个词在多少个文档中出现过。IDF的公式是: 𝐼𝐷𝐹=log(文档总数包含该词的文档数+1)IDF=log(包含该词的文档数+1文档总数)
计算IDF
- “狗”在2个文档中出现,所以IDF为 log(32)log(23)。
- “猫”也在2个文档中出现,所以IDF同样为 log(32)log(23)。
- “是”在3个文档中出现,所以IDF为 log(33)=0log(33)=0(注意,log(1)=0log(1)=0)。
- “人类”、“最好”和“朋友”分别只在1个文档中出现,所以IDF为 log(31)log(13)。
最后,我们计算TF-IDF,即TF和IDF的乘积。
计算TF-IDF
- 文档A中,“狗”的TF-IDF是 (1/7)∗log(32)(1/7)∗log(23),"人类"、"最好"和"朋友"的TF-IDF会更高,因为它们的IDF更大。
- 文档B中,“猫”和“鱼”的TF-IDF较高,因为它们的TF较高且IDF不是0。
- 文档C中,“狗”和“猫”的TF-IDF相对较高,但低于只在该文档中出现的词。
通过这种方式,我们可以看出哪些词对于特定文档更为重要。在这个例子中,“人类”、“最好”、“朋友”、“鱼”和“宠物”等词由于只在一个文档中出现,所以它们的TF-IDF值相对更高,这意味着它们更能代表各自文档的主题。
以上说了那么多,其实tf-idf的直观理解是:tf-idf突出了罕见词,并且有效地忽略了常见词
小结
特征缩放(包括欧几里得归一化和tf-idf)的真正用武之地是加快解的收敛速度。
tf-idf可以比较彻底地消除那些没有信息量的单词。
特征缩放的另一个作用:可以减少数据矩阵的条件数,大大加快训练线性模型的速度。
总而言之:正确的特征缩放有助于分类问题。