Java学习笔记:十大数据挖掘算法

原文链接:https://blog.csdn.net/u014630431/article/details/78947653

数据挖掘基本任务:分类与预测、聚类分析、关联规则、时序模式、偏差检测、智能推荐等,帮助企业提取数据中蕴含的商业价值,提高企业的竞争力。

DM过程

a.目标定义(任务理解、指标确定)

b.数据采集(建模抽样、质量把控、实时采集)

c.数据整理(数据探索、数据清洗、数据变换)

d.构建模型(模式发现、构建模型、验证模型)

e.模型评价(设定评价标准、多模型对比、模型优化)

f.模型发布(模型部署、模型重构)

十大DM算法:

在香港举办的2006年度IEEE数据挖掘国际会议ICDM上,与会专家遴选出了十个最有影响力的数据挖掘算法:C4.5、k-means、SVM、Apriori、EM、PageRank、AdaBoost、KNN、NaïveBayes和CART。

1、k-means

k-means算法是一种常用的非监督学习聚类算法,它的作用是在我们不知道有哪些类别的情况下,将数据以K个类心,聚成K个聚类。通常我们会先确定一个相异度度量方法,常用的相异度有:欧式距离、曼哈顿距离、马氏距离、余弦距离等。根据两个数据间的“距离”来确定两个数据之间的相异度。

k-means算法

a 所有数据中取K个数据(可随机,也可选定)作为K个聚类的初始类心。

b 遍历所有数据,计算他们到K个类心的“距离”,并将其归类到对应“距离”最小的那个类心所在的聚类中。

c 根据聚类结果,重新计算K个聚类各自的中心,计算方法是取聚类中所有元素各自维度的算术平均数。

d 若新的类心与之前的类心不同,则重复b、c步骤,直到聚类结果不再变化。

e 将结果输出。

相异度的计算:相异度就是两个东西差别有多大。标量、二元变量、分类变量、序数变量、向量的相异度有不同的计算方法。

A 标量

欧几里得距离:
image.png

曼哈顿距离:
image.png

闵可夫斯基距离:
image.png

欧氏距离和曼哈顿距离可以看做是闵可夫斯基距离在p=2和p=1下的特例.

下面要说一下标量的规格化问题。上面这样计算相异度的方式有一点问题,就是取值范围大的属性对距离的影响高于取值范围小的属性。例如上述例子中第三个属性的取值跨度远大于前两个,这样不利于真实反映真实的相异度,为了解决这个问题,一般要对属性值进行规格化。所谓规格化就是将各个属性值按比例映射到相同的取值区间,这样是为了平衡各个属性对距离的影响。通常将各个属性均映射到[0,1]区间,映射公式为:

image

其中max(ai)和min(ai)表示所有元素项中第i个属性的最大值和最小值。

B 二元变量

所谓二元变量是只能取0和1两种值变量,有点类似布尔值,通常用来标识是或不是这种二值属性,相异度可用“取值不同的同位属性数/单个元素的属性位数”,或者非对称二元相异度“取值不同的同位属性数/(单个元素的属性位数-同取0的位数)”来标识相异度。

C 分类变量

分类变量是二元变量的推广,类似于程序中的枚举变量,但各个值没有数字或序数意义,如颜色、民族等等,对于分类变量,用“取值不同的同位属性数/单个元素的全部属性数”来标识其相异度。

D 序数变量

序数变量是具有序数意义的分类变量,通常可以按照一定顺序意义排列,如冠军、亚军和季军。对于序数变量,一般为每个值分配一个数,叫做这个值的秩,然后以秩代替原值当做标量属性计算相异度。

E 向量

对于向量,由于它不仅有大小而且有方向,所以闵可夫斯基距离不是度量其相异度的好办法,一种流行的做法是用两个向量的余弦度量,其度量公式为:

image

其中||X||表示X的欧几里得范数(
image

)。要注意,余弦度量度量的不是两者的相异度,而是相似度!

2、Apriori

Apriori是最经典的关联规则算法,它的作用是依据数据,挖掘各个事物之间的可能关联(eg:啤酒尿布问题)。Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然后利用L1找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集。最后再在所有的频繁集中找出强规则,即产生用户感兴趣的关联规则。

定理1:如果一个项集是频繁的,那么其所有的子集(subsets)也一定是频繁的。

定理2:如果一个项集是非频繁的,那么其所有的超集(supersets)也一定是非频繁的。

定理3:如果规则X⟶Y−X不满足置信度阈值,则对于X的子集X′,规则X′⟶Y−X′也不满足置信度阈值。

Apriori算法:

Apriori算法采用连接步和剪枝步两种方式来找出所有的频繁项集。

这条关联规则的支持度:support = P(A并B)

这条关联规则的置信度:confidence= support(A并B)/suport(A)

1) 连接步

为找出Lk(所有的频繁k项集的集合),通过将Lk-1(所有的频繁k-1项集的集合)与自身连接产生候选k项集的集合。候选集合记作Ck。设l1和l2是Lk-1中的成员。记li[j]表示li中的第j项。假设Apriori算法对事务或项集中的项按字典次序排序,即对于(k-1)项集li,li[1] <li[2]<……….li[k-1]。将Lk-1与自身连接,如果(l1[1]=l2[1])&&(l1[2]=l2[2])&&……..&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1]),那认为l1和l2是可连接。连接l1和l2 产生的结果是{l1[1],l1[2],……,l1[k-1],l2[k-1]}。

2) 剪枝步
CK是LK的超集,也就是说,CK的成员可能是也可能不是频繁的。通过扫描所有的事务(交易),确定CK中每个候选的计数,判断是否小于最小支持度计数,如果不是,则认为该候选是频繁的。为了压缩Ck,可以利用Apriori性质:任一频繁项集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。

(Tip:为什么要压缩CK呢?因为实际情况下事务记录往往是保存在外存储上,比如数据库或者其他格式的文件上,在每次计算候选计数时都需要将候选与所有事务进行比对,众所周知,访问外存的效率往往都比较低,因此Apriori加入了所谓的剪枝步,事先对候选集进行过滤,以减少访问外存的次数。可能产生大量的候选集,以及可能需要重复扫描数据库,是Apriori算法的两大缺点。)

eg:

image

3、Naïve Bayes(朴素贝叶斯)

朴素贝叶斯是很经典的统计分类方法,属于监督学习,它的理论依据是贝叶斯原理

image

,也是最为简单的贝叶斯分类器。

叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。通俗来说,就好比这么个道理,你在街上看到一个黑人,我问你你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?因为黑人中非洲人的比率最高,当然人家也可能是美洲人或亚洲人,但在没有其它可用信息下,我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。

NaiveBayes算法

A 假设有一个可由n个独立属性表示的待分类项

image

其中
image

为n个独立属性.

B 已知有m个类别
image

C 求条件概率
image

D 取上面条件概率的最大值,其对应的类别即为待分类项所在的类别

可见,条件概率的计算是算法中的关键与难点,这个时候就需要用到贝叶斯公式了。假设我们有一定量的训练样本,其中是已经分类过的待分类项。下面是条件概率的计算步骤:

A 统计计算每个类别的频率,即
image

B 统计计算每个特征属性在每个类别中的条件概率,即
image

C 以及贝叶斯公式可得
image

(一个属性下某类别的概率 = 某类别的概率*某类别下此属性的概率/此属性在所有类别下的概率总和)

又因为属性
image

相互独立,可得
image

另外根据全概率公式可知
image

根据以上公式,即可求得待分类项对于每个类别的条件概率。

实验上,我们通常用一部分数据作为训练样本,用一部分数据作为测试样本,以避免过度拟合。理论上说,朴素贝叶斯的分类效果应该优于决策树分类的,但是实际生活中朴素贝叶斯的效果却不太理想,因为很难保证各特征属性相互独立。

朴素贝叶斯的分类流程

image

4、KNN(K近邻算法)

KNN(K Nearest Neighbor)算法与K-Means算法有相似之处,但是KNN算法严格来说是一种归类算法,应属于半监督学习。KNN算法算是最简单的归类算法了,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法。其中的K表示最接近自己的K个数据样本。KNN算法和K-Means算法不同的是,K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来做归类的,也就是说,有一个样本空间里的样本分成很几个类型,然后,给定一个待分类的数据,通过计算接近自己最近的K个样本来判断这个待分类数据属于哪个分类。你可以简单的理解为由那离自己最近的K个点来投票决定待分类数据归为哪一类

与K-means算法相同,这里面同样涉及到了相异度度量的问题,我们需要设定一个度量想法来确定两个项之间的相异度,如,欧氏距离,余弦距离,曼哈顿距离等。

wikipedia官方解释上有这样一张图片:

image

问其中带问号的点属于什么类别,

· 当K==3,那么我们统计得到,离带问号的点最接近的3个点中2个红色三角,1个蓝色正方,那么根据KNN算法,该点与红色三角属于同一类别。

· 当K==5,那么我们统计得到,离带问号的点最接近的3个点中2个红色三角,3个蓝色正方,那么根据KNN算法,该点与蓝色正方属于同一类别。

由此可见,K的取值对于待分类项是一个关键问题

· 如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;

· 如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。

· K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。

5、SVM(支持向量机算法)

支持向量机算法应用领域十分广泛,图像分类,数据分类,统计回归等等,是十分经典的监督式学习算法

最简单的SVM分类就是线性分类,如下图

image

这个图大家应该都不陌生,就是用一个线性方程将所有数据分为两类,当然这也是最简单的情况了,况且就算这样简单的情况下,线性方程也仍然不唯一,如下图

image

哪种分法最好呢??一般来说,能够与两个类别的界限越明晰,分类越好,怎么理解,如下图

image

蓝点和红点分别是两个类别中距离分类线最近的点,它们与分类线的距离越大,那么分类效果就越好,这几个点就是支持向量。这个原则也也成为Maximum Marginal(最大间距),是SVM的一个理论基础之一。
当然你一定也想到了,当所有的点并不能用一条线分类的时候怎么办,就如下面的图

image

左边的图明显不能用一条直线划分,这个时候,我们有两种选择

a. 将数据从原来的线性空间投射到高维的空间里,并在高维的空间里进行超平面划分,如果还是不行,就向更高维空间投射(记得看过一本书说总能在某一个高维空间进行划分,不知道是否严谨),关于投射变换,就跟核函数有关系,核函数有很多种

b. 依旧使用线性划分,但是允许误差,这里面又会引入惩罚函数的概念

** 6、Decision Tree(决策树算法)**

** 决策树**(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树在决策分析与风险评估等领域有十分广泛的应用,属于监督学习,它在一定程度上可以作为趋势探测。朴素贝叶斯分类贝叶斯网络两种分类算法都以贝叶斯定理为基础,可以对分类及决策问题进行概率推断。相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。
如下图是预测一个人是否拥有电脑的简单决策树模型:

image

这种图相信大家都一眼能够看懂,在建立这个树的时候,我们假设每个数据项都有属性“年龄”,“是否学生”,“信用等级”等特征属性,那么我们在建立树的时候,就需要考虑每到一个结点应该使用什么属性合适。这里就要引入三个概念,一个是“熵”,一个是“期望熵”,另一个是“信息增益”:

· 熵:熵是接收的每条消息中包含的信息的平均量,信息论中,熵的计算方法是:
image

,其中P(xi)是指第i个类别在整个训练样本中的比例

· 期望熵:我们以属性A对训练样本进行划分,那么期望熵即为
image

,按照属性A,训练样本可以划分为v个类别。

· 信息增益:两个概率分布相异度的一种度量,非对称的(来之维基百科),其定义
image

,对于分类来讲,信息增益越大分类效果越好,决策树也就越简洁。就比如两个分类,我们以天气来决策是否出去:1.不下雨就出去,下雨就不出去。2.不下雨可能出去可能不出去,不下雨就不出去。那么分类1就会比分类2的效果好一点,对于天气这个属性来说,分类1的信息增益也会比分类2的信息增益大。

由上面我们可以知道,在每次选择属性作为决策结点时,我们通常选择当前信息增益最大的属性。这也是数据挖掘领域经典的ID3算法
ID3算法的一个缺陷就是偏向于选择取值多的属性。为了解决这个问题,又引入了C4.5算法,其基于ID3算法做了部分改进,其中最主要的一条就是将信息增益换做了增益率来选择属性作为决策结点。

C4.5算法首先定义了“分裂信息”,其定义可以表示成:

image

设D为用类别对训练元组进行的划分,然后,增益率被定义为:

image

C4.5选择具有最大增益率的属性作为分裂属性,其具体应用与ID3类似

另外,决策树模型在应用的时候,也常和启发式方法结合,可以达到优化的效果。

在决策树构造过程中可能会出现这种情况:所有属性都作为分裂属性用光了,但有的子集还不是纯净集,即集合内的元素不属于同一类别。在这种情况下,由于没有更多信息可以使用了,一般对这些子集进行“多数表决”,即使用此子集中出现次数最多的类别作为此节点类别,然后将此节点作为叶子节点。

在实际构造决策树时,通常要进行剪枝,这时为了处理由于数据中的噪声和离群点导致的过分拟合问题。剪枝有两种:

先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造。

后剪枝——先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。

7、EM算法(最大期望算法)

EM算法预备知识:

  1. 极大似然估计

极大似然估计就是用来估计模型参数的统计学方法。

eg: 经典问题——学生身高问题

我们需要调查我们学校的男生和女生的身高分布。 假设你在校园里随便找了100个男生和100个女生。他们共200个人。将他们按照性别划分为两组,然后先统计抽样得到的100个男生的身高。假设他们的身高是服从高斯分布的。但是这个分布的均值u和方差∂2我们不知道,这两个参数就是我们要估计的。记作θ=[u, ∂]T。

问题:我们知道样本所服从的概率分布的模型和一些样本,而不知道该模型中的参数。

image

问题数学化:(1)样本集X={x1,x2,…,xN} N=100(2)概率密度:p(xi|θ)抽到男生i(的身高)的概率 100个样本之间独立同分布,所以我同时抽到这100个男生的概率就是他们各自概率的乘积。就是从分布是p(x|θ)的总体样本中抽取到这100个样本的概率,也就是样本集X中各个样本的联合概率,用下式表示:

image

这个概率反映了,在概率密度函数的参数是θ时,得到X这组样本的概率。需要找到一个参数θ,其对应的似然函数L(θ)最大,也就是说抽到这100个男生(的身高)概率最大。这个叫做θ的最大似然估计量,记为

image

求最大似然函数估计值的一般步骤

首先,写出似然函数:

image

其次,对似然函数取对数,并整理:

image

然后,求导数,令导数为0,得到似然方程;

最后,解似然方程,得到的参数即为所求。

总结:多数情况下我们是根据已知条件来推算结果,而极大似然估计是已经知道了结果,然后寻求使该结果出现的可能性最大的条件,以此作为估计值。

2)** Jensen****不等式**

凸函数:设f是定义域为实数的函数,如果对于所有的实数x,f(x)的二次导数大于等于0,那么f是凸函数(数学中是凸)。

Jensen不等式表述如下:如果f是凸函数,X是随机变量,那么E[f(X)]>=f(E[X])。当且仅当X是常量时,上式取等号。

eg:

image

图中,实线f是凸函数,X是随机变量,有0.5的概率是a,有0.5的概率是b。X的期望值就是a和b的中值了,图中可以看到E[f(X)]>=f(E[X])成立。

Jensen不等式应用于凹函数时,不等号方向反向。

传统EM算法详述

eg:我们抽取的100个男生和100个女生样本的身高,但是我们不知道抽取的那200个人里面的每一个人到底是从男生的那个身高分布里面抽取的,还是女生的那个身高分布抽取的。用数学的语言就是,抽取得到的每个样本都不知道是从哪个分布抽取的。这个时候,对于每一个样本,就有两个东西需要猜测或者估计:(1)这个人是男的还是女的?(2)男生和女生对应的身高的高斯分布的参数是多少?

EM算法要解决的问题是:(1)求出每一个样本属于哪个分布(2)求出每一个分布对应的参数

image

身高问题使用EM算法求解步骤

image

(1)初始化参数:先初始化男生身高的正态分布的参数:如均值=1.7,方差=0.1

(2)计算每一个人更可能属于男生分布或者女生分布;

(3)通过分为男生的n个人来重新估计男生身高分布的参数(最大似然估计),女生分布也按照相同的方式估计出来,更新分布。

(4)这时候两个分布的概率也变了,然后重复步骤(1)至(3),直到参数不发生变化为止。

算法推导

已知:样本集X={x(1),…,x(m)},包含m个独立的样本;

未知:每个样本i对应的类别z(i)是未知的(相当于聚类);

输出:我们需要估计概率模型p(x,z)的参数θ;

目标:找到适合的θ和z让L(θ)最大。

image

要使L(θ)最大,我们可以不断最大化下界J,来使得L(θ)不断提高,达到最大值。

问题:

什么时候下界J(z,Q)与L(θ)在此点θ处相等?

image

根据Jensen不等式,自变量X是常数,等式成立。即:
image

由于
image

,则可以得到:分子的和等于c

image

在固定参数θ后,使下界拉升的Q(z)的计算公式,解决了Q(z)如何选择的问题。这一步就是E步,建立L(θ)的下界。接下来的M步,就是在给定Q(z)后,调整θ,去极大化L(θ)的下界J。

算法流程:

1)初始化分布参数θ;重复以下步骤直到收敛:

E步骤:根据参数初始值或上一次迭代的模型参数来计算出隐性变量的后验概率,其实就是隐性变量的期望。作为隐藏变量的现估计值:

image

M步骤:将似然函数最大化以获得新的参数值:

image

总结:期望最大算法(EM算法)是一种从不完全数据或有数据丢失的数据集(存在隐含变量)中求解概率模型参数的最大似然估计方法。传统的EM算法对初始值敏感,聚类结果随不同的初始值而波动较大。总的来说,EM算法收敛的优劣很大程度上取决于其初始参数。

eg:

image
    这是一个抛硬币的例子,H表示正面向上,T表示反面向上,参数θ表示正面朝上的概率。硬币有两个,A和B,硬币是有偏的。本次实验总共做了5组,每组随机选一个硬币,连续抛10次。如果知道每次抛的是哪个硬币,那么计算参数θ就非常简单了,如上图所示。

     如果不知道每次抛的是哪个硬币呢?那么,我们就需要用EM算法,基本步骤为:1、给θA和θB一个初始值;2、(E-step)估计每组实验是硬币A的概率(本组实验是硬币B的概率=1-本组实验是硬币A的概率)。分别计算每组实验中,选择A硬币且正面朝上次数的期望值,选择B硬币且正面朝上次数的期望值;3、(M-step)利用第三步求得的期望值重新计算θA和θB;4、当迭代到一定次数,或者算法收敛到一定精度,结束算法,否则,回到第2步。
image

稍微解释一下上图的计算过程。初始值θA=0.6,θB=0.5。

图中的0.45是怎么得来的呢?由两个硬币的初始值0.6和0.5,容易得出投掷出5正5反的概率是pA=C(10,5)(0.6^5)(0.45),pB=C(10,5)*(0.55)*(0.5^5), pA/(pA+pB)=0.449, 0.45就是0.449近似而来的,表示第一组实验选择的硬币是A的概率为0.45。图中的2.2H,2.2T是怎么得来的呢? 0.449 * 5H = 2.2H ,0.449 * 5T = 2.2T,表示第一组实验选择A硬币且正面朝上次数的期望值是2.2。其他的值依次类推。

8、AdaBoost算法

<pre style="box-sizing: border-box; outline: 0px; margin: 0px 0px 24px; padding: 8px; font-weight: 400; position: relative; font-family: Consolas, Inconsolata, Courier, monospace; white-space: pre-wrap; overflow-wrap: break-word; overflow-x: auto; font-size: 14px; line-height: 22px; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; background: rgb(255, 255, 255);">Adaboost(Adaptive Boosting)算法是boost算法中最为经典的算法了,也是分类效果很好的监督式学习算法。“boost”顾名思义就是“提升”的意思,将弱分类器提升为强分类器,它的核心思想先针对同一训练集训练出一定量的弱分类器,然后将这些弱分类器集合成一个强分类器。 下图是Adaboost算法的官方说明:</pre>

y1...yn是n个弱分类器,通过一定方式合并可以得到强分类器YM,当然每个弱分类器的贡献度不同。一般来说,越到后面的弱分类器贡献度应该越高。 为什么呢?举个例子,y2的获得与y1参与有关,我们在训练某个弱分类器的时候,对于它之前的弱分类器训练错误的数据,我们将加大他们的权重,着重训练。而对于训练正确的数据,我们就会减小权重。也就是说,后面训练成的分类器,一定程度上“学习了它之前的分类器”,这又是adaboost的另一个理论基础

算法具体过程:

a初始化所有训练样例的权重为1 / N,其中N是样例数

b for m=1,……M:

1).训练弱分类器ym(),使其最小化权重误差函数(在训练数据集上的误差率等于将这几个数据的权值相加)(weightederror function):

image

2)接下来计算该弱分类器的话语权α(在最终分类器中所占的权重,误差率低的弱分类器在最终分类器中占的权重较大):

image

3)更新训练样本的权值分布:

image

其中Zm:

image

是规范化因子,使所有w的和为1。(这里比较懵)

c最后,按弱分类器权重组合各个弱分类器,通过符号函数sign的作用得到一个强分类器:

image

算法实例:http://blog.csdn.net/gyqjn/article/details/45501185

9、PageRank算法

PageRank算法被广泛应用于信息检索等领域,这和TF-IDF算法一样,但是他们之间又有本质的区别。

PageRank是用来对网页进行排序的,我们在使用搜索引擎的时候,会先输入搜索语句,通常会检索出成千上万个结果,每一个结果都对应一个网页,我们自然是不可能打开每个网页查看。这个时候,这些检索出来的网页排序就显得即为重要,因为按照一般人习惯,最多只会点进排名靠前的几个或者十几个网页。如果你排名靠前的网页内容不相关或质量较差,会极大地影响用户体验。

PageRank中的“Page”并不是网页的意思,而是这个算法创始人的名字佩奇,也是谷歌创始人之一。这个算法使得当时的谷歌从众多的搜索引擎中脱颖而出,成为它的制胜法宝。直到现在,这个算法通过不断改进,也成为各大搜索引擎核心理论基础。

在这个算法出现之前,TF-IDF算法为通用的算法,通过关键字出现频率等对网页进行排序,导致很多网页开发商为了浏览量大量刷新热点词等。导致检索出来的网页质量都较差。

PangRank算法的核心思想就是一种自动投票机制,与学术引用机制相仿,一篇论文被别的论文引用次数越多,说明这个论文质量越高,越权威。相似的,一个网页被链接得越多,说明这个网页越加被其他网页信任,他的质量就会更高。如果它也是被检索出的网页之一,那么在排序时,这个网页就能获得较高权重,很有可能排在前面。

所以每个网页都会有一个PR值,分值从1到10。而且分值间的差距并不是线性的,5到6之间的差距可能是4到5之间差距的5、6倍。每个网页会对它链接的网页贡献PR值,它链接的网页越多,那么它向每个网页贡献的PR值就会越小,可以有效防止刷链接的现象。这样所有网页就会组成一个网络,每个网页为一个结点,需要定时的更新每个网页的PR值。

这是Pagerank的核心思想,但是仍然有很多缺陷,比如新加入的网页很容易受到忽略,排名靠前网页可能内容不够相关等等。所以实际应用的算法应该复杂得多。

下面链接详细讲解了有关PageRank算法的内容,包括个人很感兴趣的搜索引擎

http://blog.codinglabs.org/articles/intro-to-pagerank.html

10、TF-IDF算法

TF-IDF算法的思想也很简单,它被广泛应用于关键字搜索,它的作用就是通过统计的方法给每个关键字赋予权值。 举一个例子:每个人的身份证号可以唯一标记一个人的身份,但是我们仔细观察可以发现,很多人身份证的前6位是一样的,那么这六位对于识别人就没有那么大的贡献,而后面的12位基本很难出现相同,那么这12位对于标记一个人信息就会有较大的贡献度。那么我们怎么确定一个关键词的贡献度呢?
TF-IDF的全名是term frequency–inverse documentfrequency,翻译过来也就是词频-逆文档频率,下面我们就词频和逆文档频率分别讲解TF-IDF算法:

· TF(词频):若一个关键词在一个文档中大量出现,那么这个关键词极有可能标识着这个文档的内容,所以一个关键词对标记一个文档的贡献度与其在该文档中出现的频率正相关。

· IDF(逆文档频率):很容易想到,一些能够在文档中大量出现的词不一定具有代表性。如,“的”“与”这些词大量使用但是对标记文档并没有太大的贡献。所以如果一个关键词在所有文档中都高频出现,那么我们就需要大大减小它的贡献度。

一句话说,TF-IDF与一个词在文档中的出现次数成正相关,与该词在整个文档中的出现次数成负相关。
TF-IDF算法常用于提取关键词,也可以和余弦相似原理结合来判断两个文件的相似度。实际上,TF-IDF算法也常和K-Means算法结合,来给每个类心赋予权值。类似问题,TF-IDF算法均可应用,不仅仅局限于关键词搜索领域。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 算法是我的信仰.. 因为它不像框架一样,谁都做得了.. blog.jobbole.com/90316/ 1. C4...
    终生学习丶阅读 1,392评论 0 3
  • 整理里一晚上的数据挖掘算法,其中主要引自wiki和一些论坛。发布到简书上作为知识共享,但是发现Latex的公式转码...
    NO_OcaNE阅读 6,533评论 1 3
  • 国际权威的学术组织the IEEE International Conference on Data Mining...
    xhhjin阅读 2,119评论 0 8
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,512评论 16 22
  • 创业是很多人的梦想,多少人为了理想和不甘选择了创业来实现自我价值,我就是其中一个。 创业后,我由女人变成了超人,什...
    亦宝宝阅读 1,802评论 4 1