《数学之美》拾遗——TF-IDF

开篇序

    在学习机器学习的过程中,我写了简单易学的机器学习算法的专题,依然还有很多的算法会陆续写出来。网上已经有很多人分享过类似的材料,我只是通过自己的理解,想尽可能用一种通俗易懂的方式讲出来。在不断学习的过程中,陆陆续续补充了很多的知识点,在学习吴军老师的《数学之美》的过程中,也补充了很多我之前遗漏的知识点,吴军老师已经在《数学之美》上把问题讲得很清楚,我在这里只是再增加一些我对这些问题的认识。专题的顺序与原书不一致,其中的原因是我在学习机器学习的过程中遇到了问题会翻阅一些书,所以,顺序与我学习时遇到的问题是相关的。借此机会,感谢那些默默支持我的人,我会更加努力写出高质量的博文。

一、什么是TF-IDF

    首先解释下TF-IDF的全称,TF-IDF全称是Term Frequency / Inverse Document Frequency,全称的意思为词频、逆文本频率。

    在我们处理文本时,例如,对于一篇文章,文章是由很多的词组成,通过与我们的词库对比,我们可以很容易的过滤掉一些公认的停止词(Stop Word),只保留一些关键词。停止词是指对文章的主题没有任何帮助却在文章中大量出现的一些词,如“的”、“是”等。剩下的关键词也并不是都是同等重要的,我们要确定关键词在文章中的权重,这样我们才能确定文章的主题,此时,我们就可以使用TF-IDF来计算各个关键词的权重。   

二、如何计算TF-IDF值

    对于一个处理好的词项-文档矩阵:

文章有:d1,d2,d3,d4,d5和d6,关键词有:“ship”,“boat”,“ocean”,“wood”和“tree”。矩阵中的数字表示词在对应文章中出现的次数。

1、TF的计算 

2、IDF的计算 

3、TF-IDF的值

   TF-IDF的值即为最终的权重,是将TF值与IDF值相乘,则对于关键词“ship”的TF-IDF值为:

三、实际的例子

    选择了9个标题:(参考文献2)

The Neatest Little Guide to Stock Market Investing

Investing For Dummies, 4th Edition

The Little Book of Common Sense Investing: The Only Way to Guarantee Your Fair Share of Stock Market Returns

The Little Book of Value Investing

Value Investing: From Graham to Buffett and Beyond

Rich Dad's Guide to Investing: What the Rich Invest in, That the Poor and the Middle Class Do Not!

Investing in Real Estate, 5th Edition

Stock Investing For Dummies

Rich Dad's Advisors: The ABC's of Real Estate Investing: The Secrets of Finding Hidden Profits Most Investors Miss

去掉了停止词“and”,“edition”,“for”,“in”,“little”,“of”“the”,“to”。我们可以得到以下的词项-文档矩阵:

最终的结果为:

MATLAB源码

TF_IDF函数

function [ dataMade ] = TFIDF( dataSet )
    [m,n] = size(dataSet);%计算dataSet的大小,m为词的个数,n为标题的个数
    
    %rowSum = sum(dataSet);% 每个标题中关键词的总和
    rowSum = [8,6,19,6,8,19,6,4,18];
    colSum = sum(dataSet,2);% 每个词在不同标题中出现的总和
    
    dataMade = zeros(m,n);% 构造一个一样大小的矩阵,用于存储TF-IDF值
    for i = 1:m
        TempIDF = log2(n./colSum(i,:));
        for j = 1:n
            dataMade(i,j) = (dataSet(i,j)./rowSum(:,j))*TempIDF;
        end
    end
end

主函数

%% TF_IDF

% load data
% 注意每一列为标题,每一行为词
dataSet = [0	0	1	1	0	0	0	0	0
0	0	0	0	0	1	0	0	1
0	1	0	0	0	0	0	1	0
0	0	0	0	0	0	1	0	1
1	0	0	0	0	1	0	0	0
1	1	1	1	1	1	1	1	1
1	0	1	0	0	0	0	0	0
0	0	0	0	0	0	1	0	1
0	0	0	0	0	2	0	0	1
1	0	1	0	0	0	0	1	0
0	0	0	1	1	0	0	0	0
];

% 计算TF-IDF值
data = TFIDF(dataSet);

注意点:在参考文献2中有两个问题:

参考文献

1、《数学之美》吴军 著. 第11章 如何确定网页和查询的相关性. P105-110.

2、http://www.puffinwarellc.com/index.php/news-and-articles/articles/33-latent-semantic-analysis-tutorial.html:a small example

$(".MathJax").remove();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据智能实战

基于seq2seq的中国对联自动配对技术实践

Sequence to Sequence模型这种基于编码--解码的模型已经被谷歌成功应用于机器翻译上。而理论上任意的序列到序列的有监督问题都可以用这种模型。如...

3418
来自专栏生信小驿站

生存分析①R语言

生存分析(Survival analysis)是指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断,研究生存时间和结局与众多影响因素间关系及其程度大小...

2494
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/9/23

Rosetta: Understanding text in images and videos with machine learning

1085
来自专栏iOSDevLog

机器学习研究和开发所需的组件列表

Here is a list of components that are needed for the successful machine learning...

1022
来自专栏Python小屋

Python计算电场中两点间的电势差

根据组合数定义,需要计算3个数的阶乘,在很多编程语言中都很难直接使用整型变量表示大数的阶乘结果,虽然Python并不存在这个问题,但是计算大数的阶乘仍需要相当多...

961
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/5/27

Prefrontal cortex as a meta-reinforcement learning system

1454
来自专栏专知

【读书笔记】基于知识库的问答:生成查询图进行语义分析

【导读】将DBPedia和Freebase这样的大规模知识库组织并存储在一个结构化的数据库,这已成为支持开放领域问题问答的重要资源。 KB-QA的大多数方法基于...

5077
来自专栏iOSDevLog

Scikit-Learn教程:棒球分析 (一)

一个scikit-learn教程,通过将数据建模到KMeans聚类模型和线性回归模型来预测MLB每赛季的胜利。

2092
来自专栏Duncan's Blog

Personalized Search论文阅读笔记-08年SIGIR

对于这样允许大众分类的应用,如何满足用户在搜索时尽可能准确地返回用户所需要的资源是一个有意思的问题。因为如果像传统的搜索方法仅通过查询关键词去匹配搜索结果,返回...

1303
来自专栏大数据

季节性单位根

正如MAT8181课程中所讨论的那样,至少有两种非平稳的时间序列:存在趋势的和存在单位根(这种类型被称为 单整的)。单位根测试不能用来评估一个时间序列是否平稳,...

3515

扫码关注云+社区

领取腾讯云代金券