PageRank
概念
PageRank是Google提出的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。是Google创始人拉里·佩奇和谢尔盖·布林于1997年创造的PageRank实现了将链接价值概念作为排名因素。
GOOGLE PageRank并不是唯一的链接相关的排名算法,而是最为广泛使用的一种。其他算法还有:
- Hilltop 算法
- ExpertRank
- HITS
- TrustRank
思考超链接在互联网中的作用
入链 ====投票
PageRank让链接来“投票“,到一个页面的超链接相当于对该页投一票。
入链数量
如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。
入链质量
指向页面A的入链质量不同,质量高的页面会通过链接向其他页面传递更多的权重。所以越是质量高的页面指向页面A,则页面A越重要。
案例分析 pagerank PR值
站在A的角度:
需要将自己的PR值分给B,D
站在B的角度:
收到来自A,C,D的PR值
迭代计算使PR值收敛于稳定值
算法实现
初始值
Google的每个页面设置相同的PR值
pagerank算法给每个页面的PR初始值为1。
迭代计算(收敛)
Google不断的重复计算每个页面的PageRank。那么经过不断的重复计算,这些页面的PR值会趋向于稳定,也就是收敛的状态。
在具体企业应用中怎么样确定收敛标准?
- 每个页面的PR值和上一次计算的PR相等
- 设定一个差值指标(0.0001)。当所有页面和上一次计算的PR差值平均小于该标准时,则收敛。
PRa - PRa' = |Δ|
- 设定一个百分比(99%),当99%的页面和上一次计算的PR相等
算法修正
站在互联网的角度:
只出,不入:PR会为0
只入,不出:PR会很高
直接访问网页
修正PageRank计算公式
增加阻尼系数
在简单公式的基础上增加了阻尼系数(damping factor)d,一般取值d=0.85。
完整PageRank计算公式
d:阻尼系数
M(i):指向i的页面集合
L(j):页面的出链数
PR(pj):j页面的PR值
n:所有页面数
数据
A B D
B C
C A B
D B C
计算ABCD的PR值
B 1/2
D 1/2
A B D
分组:所有指向第i个页面的页面的PR值之和。
将所有指向第i个页面的页面分为一组,reduce中迭代计算。
PR初始值是1
L的值
<偏移量, A B D>
AàB
AàD
PRΔB=1/2
PRΔD=1/2
A B D
B C
PRΔC=1
C A B
PRΔB=1/2
PRΔA=1/2
D B C
PRΔB=1/2
PRΔC=1/2
REDUCE:
PRΔB=1/2
PRΔB=1/2
PRΔB=1/2
PRΔD=1/2
PRΔA=1/2
<A,1/2>
<A,B\tD>
<A,1/2\tB\tD>
PRΔC=1/2
PRΔC=1
<PRA,1/2>
<PRB,3/2>
<PRC,3/2>
<PRD,1/2>
A 1/2 B D
B 3/2 C
C 3/2 A B
D 1/2 B C
输出结果包含:指向关系和PR值
A 1/2 B D
<B,1/4>
<D,1/4>
<A,1/2 B D>
解题思路
**MR原语不被破坏
PR计算是一个迭代的过程,首先考虑一次计算
思考:
页面包含超链接
每次迭代将pr值除以链接数后得到的值传递给所链接的页面
so:每次迭代都要包含页面链接关系和该页面的pr值
mr:相同的key为一组的特征
map:
1,读懂数据:第一次附加初始pr值
2,映射k:v
1,传递页面链接关系,key为该页面,value为页面链接关系
2,计算链接的pr值,key为所链接的页面,value为pr值
reduce:
*,按页面分组
1,两类value分别处理
2,最终合并为一条数据输出:key为页面&新的pr值,value为链接关系
TF-IDF
概念
TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。
select * from tb_doc where content like '%sxt%';
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。
除了TF-IDF以外,因特网上的搜寻引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序:PR。
词频
词频 (term frequency, TF) 指的是某一个给定的词语在一份给定的文件中出现的次数。这个数字通常会被归一化(分子一般小于分母 区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
公式中:
ni,j是该词在文件dj中的出现次数,而分母则是在文件dj中所有字词的出现次数之和。
该单词出现的次数/该文档总词数=词频
逆向文档频率
逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
|D|:语料库中的文件总数
包含ti文件的数目
TF-IDF:
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
分析
A文档中Ax单词出现的次数 <文档编号_单词,单词出现的次数> √
key value
3823890239358658 继续支持继续
key <继续_3823890239358658,1>
<支持_3823890239358658,1>
<继续_3823890239358658,1>
统计某个单词在某个文档中出现多少次
按文档编号分组,将value求和就知道该文章共多少单词
<继续_3823890239358658,1>
<支持_3823890239358658,1>
<继续_3823890239358658,1>
<3823890239358658, 3>
∑表示A文档中一共多少单词 √
D表示文档总数, √
花括号表示包含AX单词的文档数 <单词,文档数>
实现
MR-1
第一次:词频统计+文本总数统计
map:
词频:key:字词+文本,value:1
文本总数:key:count,value:1
partition:4个reduce
0~2号reduce并行计算词频
3号reduce计算文本总数
reduce:
0~2:sum
3:count:sum
MR-2
字词集合统计:逆向文件频率
map:
key:字词,value:1
reduce:
sum
MR-3
取1,2次结果最终计算出字词的TF-IDF
map:
输入数据为第一步的tf
setup:
加载:a,DF;b,文本总数
计算TF-IDF
key:文本,value:字词+TF-IDF
reduce:
按文本(key)生成该文本的字词+TF-IDF值列表
itemCF
概述
电子商务网站是个性化推荐系统重要地应用的领域之一。亚马逊就是个性化推荐系统的积极应用者和推广者,亚马逊的推荐系统深入到网站的各类商品,为亚马逊带来了至少30%的销售额。
不光是电商类,推荐系统无处不在。
QQ,人人网的好友推荐;新浪微博的你可能感觉兴趣的人;优酷,土豆的电影推荐;豆瓣的图书推荐;大从点评的餐饮推荐;世纪佳缘的相亲推荐;天际网的职业推荐等。
思考
购买成功后:购买了该商品的其他用户购买了以下商品
根据用户的实时行为
搜索成功后:您可能感兴趣的以下商品
根据用户的主观意识
主页或广告:您可能感兴趣的以下商品
根据用户的特征向量
推荐系统
协同过滤(Collaborative Filtering)算法
UserCF
基于用户的协同过滤,通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。
ItemCF
基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。简单来讲就是:给用户推荐和他之前喜欢的物品相似的物品。
同现矩阵和用户评分向量
Co-occurrence Matrix(同现矩阵)和User Preference Vector(用户评分向量)相乘得到的这个Recommended Vector(推荐向量)
基于全量数据的统计,产生同现矩阵
体现商品间的关联性
每件商品都有自己对其他全部商品的关联性(每件商品的特征)
用户评分向量体现的是用户对一些商品的评分
任一商品需要:
用户评分向量乘以基于该商品的其他商品关联值
求和得出针对该商品的推荐向量
排序取TopN即可
思路解析
通过历史订单交易记录
计算得出每一件商品相对其他商品同时出现在同一订单的次数
so:每件商品都有自己相对全部商品的同现列表
用户会对部分商品有过加入购物车,购买等实际操作,经过计算会得到用户对这部分商品的评分向量列表 查看(点击),收藏,加入购物车,付款
使用用户评分向量列表中的分值:
依次乘以每一件商品同现列表中该分值的代表物品的同现值
求和便是该物品的推荐向量
计算步骤
去除重复数据
计算用户评分向量
计算同现矩阵
计算乘积
计算求和
计算取TopN
原始数据
MapReduce(k:v,原语)
i161,u2625,click,2014/9/18 15:03
i161,u2626,click,2014/9/23 22:40
i161,u2627,click,2014/9/25 19:09
i161,u2628,click,2014/9/28 21:35
用户评分向量(所有用户对所有商品的评分)
同现矩阵
乘积计算
求和计算
去除重复数据
计算用户评分向量
key:用户
value:商品:评分 列表
计算同现矩阵
将每个用户的平分向量列表中的商品,两两组合输出(笛卡儿积),sum次数
key:商品A:商品B
key:商品B:商品A
value:1
计算乘积
按商品分组
同现矩阵:A商品同现列表
评分矩阵:所有用户对A商品的评分
乘机逻辑:不同同现商品下,A商品的乘机
but:计算商品A对于用户甲的推荐向量需要满足:
商品A同现商品各自的评分乘机,再求和
map@key:商品
map@val:
reduce@key:用户+同现
reduce@val:map@key+乘机
计算求和
计算取TopN
同现:
101:101 3
101:102 2
101:103 5
102:101 3
102:102 2
102:103 5
用户评分:
101:12
102:6
输出: