【原创】机器学习之PageRank算法应用与C#实现(1)算法介绍
考虑到知识的复杂性,连续性,将本算法及应用分为3篇文章,请关注,将在本月逐步发表。
1.机器学习之PageRank算法应用与C#实现(1)算法介绍
2.机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码
3.机器学习之PageRank算法应用与C#实现(3)球队实力排名应用与C#代码
Pagerank是Google排名运算法则(排名公式)的一部分,是Google用于用来标识网页的等级/重要性的一种方法,是Google用来衡量一个网站的好坏的唯一标准。在揉合了诸如Title标识和Keywords标识等所有其它因素之后,Google通过PageRank来调整结果,使那些更具“等级/重要性”的网页在搜索结果中令网站排名获得提升,从而提高搜索结果的相关性和质量。鉴于Google的巨大成功和PageRank的巨大作用,已经入学了机器学习的十大算法之一。今天就带大家走近PageRank,简述其原理以及应用的C#实现。由于个人是专业做足球赛事预测,所以应用就拿足球胜平负的预测作为例子了。原理和过程都差不多,看大家如何分析问题了。
鉴于PageRank算法的资料很多,也很成熟,所以相关的介绍和原理部分就直接引用了相关著作上面的话,在应用部分是个人的代码和思路,引用原始出处已经标明。
本文原文地址:http://www.cnblogs.com/asxinyu/p/4452979.html
1.PageRank算法介绍
PageRank,简称为PR值,又称网页级别、Google左侧排名或佩奇排名。Pagerank取自Google的创始人LarryPage,它是Google排名运算法则的一部分,Pagerank是Google对网页重要性的评估,是Google用来衡量一个网站的好坏的唯一标准。Google通过PageRank来调整结果,使那些更具“重要性”的网页在搜索结果中另网站排名获得提升,从而提高搜索结果的相关性和质量。PR值的级别从1到10级,10级为满分。PR值越高说明该网页越受欢迎。
PageRank这个概念引自学术中一篇论文的被引述的频度——即被别人引述的次数越多,一般判断这篇论文的权威性就越高。Google有一套自动化方法来计算这些投票。Google的PageRank分值从0到10;PageRank为10表示最佳,但非常少见,类似里氏震级(Richterscale),PageRank级别也不是线性的,而是按照一种指数刻度。这是一种奇特的数学术语,意思是PageRank4不是比PageRank3好一级——而可能会好6到7倍。因此,一个PageRank5的网页和PageRank8的网页之间的差距会比你可能认为的要大的多。PageRank较高的页面的排名往往要比PageRank较低的页面高,而这导致了人们对链接的着魔。在整个SEO社区,人们忙于争夺、交换甚至销售链接,它是过去几年来人们关注的焦点,以至于Google修改了他的系统,并开始放弃某些类型的链接。比如,被人们广泛接受的一条规定,来自缺乏内容的“linkfarm”(链接工厂)网站的链接将不会提供页面的PageRank,从PageRank较高的页面得到链接但是内容不相关(比如说某个流行的漫画书网站链接到一个叉车规范页面),也不会提供页面的PageRank。Google选择降低了PageRank对更新频率,以便不鼓励人们不断的对其进行监测。
2.PageRank算法原理
PageRank算法是Google搜索引擎对检索结果的一种排序算法.它的基本思想主要是来自传统文献计量学中的文献引文分析,即一篇文献的质量和重要性可以通过其它文献对其引用的数量和引文质量来衡量,也就是说,一篇文献被其它文献引用越多,并且引用它的文献的质量越高,则该文献本身就越重要.Google在给出页面排序时也有两条标准:一是看有多少超级链接指向它;二是要看超级链接指向它的那个页面重要不重要.这两条直观的想法就是PageRank算法的数学基础,也是Google搜索引擎最基本的工作原理.PageRank算法利用了互联网独特的超链接结构.在庞大的超链接资源中,Google提取出上亿个超级链接页面进行分析,制作出一个巨大的网络地图.具体的讲,就是把所有的网页看作图里面相应的顶点,如果网页A有—个指向网页B的链接,则认为一条从顶点A到顶点B的有向边.这样就可以利用图论来研究网络的拓扑结构.PageRank算法正是利用网络的拓扑结构来判断网页的重要性.具体来说,假如网页A有—个指向网页B的超链接,Google就认为网页A投了网页B一票,说明网页A认为网页B有链接价值,因而B可能是—个重要的网页.Google根据指向网页B的超链接数及其重要性来判断页面B的重要性,并赋予相应的页面等级值(PageRank).网页A的页面等级值被平均分画己给网页A所链接指向的网页,从而当网页A的页面等级值比较高时,则网页B可从网页A到它的超链接分得一定的重要性.根据这样的分析,得到了高评价的重要页面会被赋予较高的网页等级,在检索结果内的排名也会较高.页面等级值(PageRank)是Google表示网页重要性的综合性指标,而且不会受到不同搜索引擎的影响.当然,重要性高的页面如果和检索关键词无关同样也没有任何意义.为此,Google使用了完善的超文本匹配分析技术,使得能够检索出重要而且正确的网页.
[1].上述引用“赵国,宋建成.Google搜索引擎的数学模型及其应用,西南民族大学学报自然科学版.2010,vol(36),3”
3.PageRank算法基本过程
这一节我们还是采用赵国那篇论文的简单例子,介绍PageRank的简单过程以及对应的随机冲浪模型,可以让你加深对算法的理解,同时这也是编写代码的重要依据。
PageRank算法的具体实现可以利用网页所对应的图的邻接矩阵来表达超链接关系。因此要先写出所对应图的邻接矩阵 A ,为了能将网页的页面等级值平均分配给该网页所链接指向的网页,需要对各个行向量进行归一化处理,得到矩阵A1。PageRank算法的矩阵是将归一化矩阵A1转置所得矩阵W,称之为 转移概率矩阵(是不是和马尔可夫链有点像,的确是与马尔可夫链过程有着密切的关系),其特征是各个列列向量之和为全概率1,各个行矢量表示状态之间的转移概率,转置的原因是PageRank算法重视的某个页面被多少个页面链接,而不是链接到多少个页面。各个网页的页面等级制就是求这个转义概率矩阵W的最大特征值所属的特征向量。因此可以看出,PageRank的应用也主要是对某些过程对象进行重要等级排名。
例如,先假设有下面的图邻接矩阵:
为了能将网页的页面等级值平均分配给该网页所链接指向的网页,对各个行向量进行归一化处理,得:
将归一化所得的矩阵转置,所得到的转移概率矩阵W:
根据上述公式和转移概率矩阵,可以求得其最大特征值为:
对应的非负特征向量为:
因此可以确定网页的排序为C,A,B,而A,C的排序并没有很显著的差别,但是由于指向C的链接多一些,所以可以考虑排在前面。至于其中的特征值计算和非负特征向量,是一个比较简单的线性代数问题,如果不懂的可以去查下资料,本博客也有相应的Math.NET数学组件可以借鉴,可以很容易的解决这些基础的问题,链接看菜单导航。
4.随机冲浪模型
随机冲浪模型(Random Surfer Model)是为了更加的符合实际情况而对上述PageRank基本模型进行的改进。PageRank算法原理中假设所有的网页形成一个闭合的链接图,除了这些文档以外没有其他任何链接的出入,并且每个网页能从其他网页通过超链接达到.但是在现实的网络中,并不完全是这样的情况.当一个页面没有出链的时候,它的PageRank值就不能被分配给其它的页面。同样道理,只有出链接而没有入链接的页面也是存在的。但PageRank并不考虑这样的页面.在现实中的页面,无论怎样顺着链接前进,仅仅顺着链接是绝对不能进入的页面群总归是存在的。所以为了解决这个问题,提出了用户的随机冲浪模型:用户虽然在大多数情况下都顺着当前页面中的链接前进,但也有少数情况会突然重新打开浏览器随机进入到完全无关的页面。这样就可以用公式表示相应的概率矩阵:
还是考虑第3节中的问题,我们取d=0.5,可以计算相应的概率转移矩阵为:
计算得到其最大特征值为1,相应的特征向量为:
所以排序的结果C,A,B合理一些,也更加符合实际情况。
接下来我们将通过上述论文中的一个例子来介绍PageRank的实际应用与C#实现过程,请关注博客。
.NET数据挖掘与机器学习,作者博客: http://www.cnblogs.com/asxinyu
E-mail:1287263703@qq.com