《数学之美》读书笔记和知识点总结(二)

接上一篇文章,我继续对《数学之美》进行总结。由于篇幅原因,很多具体的算法没有写,只给出了外链。如有需要请自行搜索

 

网页相似性的度量

问题描述:求出任意两个网页之间的相似程度

解决方法:TF-IDF方法(term Frequency-Inverse Document Frequency)

步骤:提取出网页的关键词,然后根据网页的长度对关键词进行归一化。

两个网站间的相似性 = ∑(关键词 * 词频 * 权重)

关键词:如“原子能”,“的”

词频:在进行对比的两个网页中,关键词出现的频率。

权重:关键词在所有网页中出现的概率越低,权重越大。很显然,“原子能”的权重远远大于“的”的权重。

 

地址识别

问题描述:输入一串文字,输出该文字对应的准确地址

解决方法:有限状态机

有限状态机方法先为地址建立起有限个状态(市、省、街),然后从第一个状态开始,走到最后一个状态,把经过的状态连接起来,形成有效地址。从一个状态走到下一个状态是有严格条件的。

问题:当遇到错别字,或者地址描述不清时,会在某个状态停止不前,无法进行匹配。

解决方法:基于概率的加权有限状态机,对地址模糊匹配。

 

导航和动态规划

问题描述:求出地图上任意两点间的最短距离。

解决方法:

  1. 遍历查找:时间复杂度呈指数增长,无法实现
  2. 动态规划:在起点A和终点B之间划一条分隔线,假设路程必然会经过线上某一点X,这样的点X的数量是有限个,不妨记为(x1,x2…xn)。将求解全程最短路线化解为求解Min( D(A,xi) + D(xi,B)),其中D表示距离

 

Cos定理和相关系数

问题描述:度量两篇新闻的相似性

解决方法:用上文的TF-IDF方法,统计两篇新闻的关键词,把这两篇新闻变成两个向量,然后计算它们的余弦距离。余弦距离的计算方法可以参见我之前的博文

应用:新闻分类,广告投放

 

大规模数据的分类问题

问题描述:当有海量数据,需要计算它们两两之间的距离时,计算量巨大,耗时太多。

解决方法:矩阵的奇异值分解方法。

奇异值分解方法是把一个大矩阵分解成3个小矩阵的乘积,每个矩阵都有明确的物理含义。分解之后,存储量和计算量提高了3个数量级。

Google提出了奇异值分解的并行算法,极大的提高了算法效率。

 

信息指纹

问题描述:网络爬虫在哈希表上记录已经访问过的网页时,需要计算出每个网页的指纹。

问题转变成了将一串任意长度的网址转变成一个定长的随机数,这个数字就是这个网页的指纹。

计算方法:

1、冯诺伊曼法:较差,不同的字串容易产生相同的指纹

2、梅林旋转算法:比较差,产生的随机数之间有相关性,当用于加密的HTTPS时,破解了一个就等于破解了一大堆

3、MD5SHA-1:它们是现在常用的伪随机数产生器所使用的标准,非常安全。

应用:判断两个集合相同

1.关键词相同:“北京 中关村 星巴克”和“星巴克 北京 中关村”是否相同?

判断方法:计算两个集合中每个元素的指纹,加它们相加

如:S = {e1,e2…en},它的指纹FP(S) = FP(e1) + FP(e2) + … + FP(e3)

加法的交换率保证了上面的两组关键词的指纹是相同的

2.垃圾邮件判定

一个账号A发送的邮件地址指纹如果和已知的黑名单账号B基本相同,那么可以把A拉黑了。

3.判定文章抄袭

同理,提取关键词,计算指纹,比较

4.Youtube反盗版

提取关键帧,计算指纹,比较

 

密码学

最早的密码:把26个字母按照双方制定的规则映射成其它的字母。

破解方法:统计词频,如英文字母e的出现频率最高。

改进方法:将原来一对一的映射改成一对多的映射。

什么是好的密码?好的密码是统计上均匀分布,不能根据已知的明文和密文推断出新的密文,当敌方截获密码后,获得的信息量不增加。

现代的加密方法:

《暗算》中的光复一号密码

原理:现今对于大数的质因数分解还没有快速有效的算法。

 

搜索引擎的反作弊

问题描述:防止作弊网站通过大量的链接提高自身排名

解决方法:

1.增加排序算法的抗噪能力

2.排序结果去噪

例:在很吵的汽车进而打手机,先采集一段时间的噪音,生成一个频率相同,振幅相反的信号,中和原噪音。

网页防作弊的方法也是类似的,因为作弊者使用的方法是时间相关的,先采集一段时间的作弊信息,然后生成逆向信息,还原真实的网页排名。

值得注意的是,作弊网站还有两个明显的特征:

1.作弊网站之间的余弦距离几乎为1

2.作弊网站内部有大量的互相自链,内部形成闭环

 

数学模型的重要性

对于任何问题,找到准确的数学模型是最重要的,这比研究什么机器学习算法要有效的多。

例:古代历法周期的确定

古埃及:以天狼星和太阳的位置判断一年的时间,这个数学模型不好,古埃及测量的一年=365*4+1=1461天

美索不达米亚:以五大行星的位置确定一年的时间,他们已经有了月和四季的概念。这个数学模型就相对准确一些。

了解托勒密的贡献(地心说代表人),他的伟大之处难以言表,任何一条发明都足以载入史册:

  1. 发明了球坐标
  2. 发明了经纬线
  3. 发明了弧度制
  4. 发明了黄道
  5. 用约50个大圆套小圆的模型精确计算出了所有行星的运动轨迹,其精度之高以至于现今的平润年规则都是基于他的功劳。

 

数学模型的要点,原文总结了4点,说的非常好

  1. 一个正确的数学模型应当在形式上是简单的。
  2. 一个正确的数学模型一开始可能还不如一个精雕细琢的错误模型来的准确,但是,如果我们认定大方向是对的,就应该坚持下去。
  3. 大量准确的数据很重要
  4. 正确的模型也可能受噪音干扰,而显得不准确;这时不应该用一种凑合的修正方法弥补它,而是要找到噪音的根源,这也许能通往重大发现。

Pagerank和TF-IDF就是两个很好的数学模型

 

最大熵模型

核心思想:等概率

我以二分查找和称小球游戏这两个例子来进行说明

二分查找:每一次查找都相当于一次0和1的判断,每次查找后的结果消除了一半的不确定性,从香农定理来说,这也是最好的结果了。算法的思想是,每一次查找时,要找的数据分布在二分点前后的概率都是50%,这一点很重要!

称小球游戏:12个小球有一个是坏的,不知轻重,用天平把它找出来。根据信息论,最少的称量次数应该是以3为底log24=2.89次,因为天平有3个状态:左倾,右倾,平衡。坏的小球有2个状态,或轻或重。每称一次,可以消除2/3的不确定性,经过3次称量足以找到这个坏的小球。所以每次称量时的核心思想是让天平的这3种状态等概率

最大熵模型的训练方法:

GIS迭代算法(非常复杂),和改进的IIS算法

 

拼音输入法

双拼失败的原因:

1.增加编码的歧义性,使得候选项变多

2.比全拼的思考速度慢

3.容错性差,难以区分卷舌音和鼻音

五笔的没落:

1.需要背字根,上手时间较多

2.脱稿打字时,思维速度慢

拼音的优势:

1.不用学,谁都会

2.输入自然,思维连贯

3.编码有冗余,容错性好,平均击键次数小于3

 

补充一下,对于五笔输入法,我严重不同意原文的说法,我用五笔好几年了,感觉比拼音好用多了

  1. 背字根其实非常简单,正常人一天就足够了,再用打字软件多练习一下,三天就可以熟练输入常用字,对于非常用字,多练习几次也就会了
  2. 对于熟练使用五笔的人来说,脱稿打字的速度不会下降太多,对于我来说,基本上是不会比拼音慢的。

另外,五笔还有3个优点原文没有提到

  1. 使用五笔能够提高使用者的语文水平。因为使用五笔时必须知道要输入汉字的写法,所以用五笔的人不会提笔忘字,而且会知道大量疑难汉字的写法。再者,对于我这样一位书法爱好者,又经常自学点文字学,五笔更是不二选择。
  2. 不认识的汉字的输入。在输入陌生姓名时,经常会遇到不认识的汉字,这时五笔的优势就体现出来了,只要看到汉字就能把它打出来。在用网络词典查生字时也是这样。
  3. 输入速度快,一般水平的用户每分钟100字应该没问题

但是,五笔还有一个明显的缺点原文也没有说,那就是无法输入整句,至少目前来说比较难,现在通常的解决方法是用户自己手动增加词库。

 

布隆过滤器

问题描述:为解决哈希表存储效率低。

布隆过滤器只需要哈希表1/4到1/8的空间就可以解决相同的问题。它的优点是快速,省空间,但是有一定的误识别率,补救方法是建立一个白名单。

 

条件随机场:隐含马尔可夫模型的扩展

应用:浅层句法分析,模式识别,机器学习等

隐含马尔可夫模型的观察序列里面,每一个观测值Xi都和它的状态Yi有关,如果把它前后的状态Yi-1,Yi+1也考虑进来,这个模型就是条件随机场

条件随机场的形式简单,但是实现复杂,它的训练也很麻烦,不过现在已经有开源软件可以用了

 

维比特算法:它是一种动态规划算法,能够实时解决有向篱笆图的最短路径问题。

 

移动通信的基础

频分多址(FDMA):对频率进行切分,由于相邻频率会互相干扰,因些每个信道要有足够的带宽。由于带宽有限,要么限制通信人数,要么降低话音质量。

时分多址(TDMA):将同一频带按时间分成很多份,每个人的通信数据占这个频带传输时间的1/N

码分多址(CDMA):每个发送者有自己不同的密码,接收者接到不同信号时,过滤掉自己无法解码的信号,留下和自己密码对应的信号。

 

期望最大化

EM聚类算法:无需指定聚类数量

需要指定一个距离函数,使得同类数据间的距离小,不同类数据间的距离大,这个函数最好是凸函数,否则会陷入局部最优解,而不是全局最优解。

 

逻辑回归

利用一个函数将所有实数映射到(0,1) 

在研究一个问题时,经常会有很多因素对其造成影响,不妨把这些因素记为一个向量(x1,x2…xn),然后利用上面的公式把它们线性组合起来。

Z = a0 + a1x1 + a2x2 +…+ anxn, 这样就实现了多因素的归一化,无论这些因素的值是多少,都可以把它们统一量化到(0,1)范围,然后进行分析。

注意到Z其实就是一个一级的神经网络,任意训练神经网络的方法都可以用来训练并确定系数组a

 

云计算的基础

思想:分而治之

以矩阵乘法为例,计算C=A*B,当一台服务器存储不下矩阵A时,如何做矩阵乘法呢?

 

将A和B分别按行按列拆成M*N个小矩阵,然后将每个小矩阵分给一个服务器来计算,再把所有计算结果合并起来,矩阵乘法就完成了。

由于服务器之间是并行计算,所以计算时间是原来的1/(N*M).

 

posted @ 2012-09-02 11:04  汉泽的家  阅读(3364)  评论(5编辑  收藏  举报