说明:文章为初学者看推荐系统(蒋凡),结合网上资料做的笔记,不保证其正确性。欢迎指正^_
1、 继续记录下svd的一个例子(参考http://blog.sina.com.cn/s/blog_7c76633901019oi8.html,http://blog.csdn.net/abcjennifer/article/details/8131087):
1) 看下图,表示9篇文章中,book,dads……value等词语的出现次数:
2) 可以使用相应的软件(例如matlab)进行svd分解,得到下面的3个小的矩阵(会减小存储量和计算量),其中左奇异向量可以表示词语在文章中出现的次数,右奇异向量表示文章中出现词语的次数,中间的矩阵表示左奇异向量一行和右奇异向量一列重要性。例如下图中:第一个矩阵的第一列中,book的0.15表示对应svd分解前矩阵中在所有文章中共出现2次,0.36对应3次,0.74对应9次,大致呈现出线性的关系;而右奇异向量矩阵中0.35表示对应T1文章svd分解前矩阵中所有词语出现4次,0.49对应5次。
3) 对左奇异向量和右奇异向量降维处理(下图中在左奇异向量中取了第2,3列,右奇异向量取了第2,3行),将3维变为2维,得到下图,在实际中可以根据分块,将在相同的块的属性作为一个属性来处理,例如音乐的安静和悲伤在一个块中,我们就认为它们在推荐系统中是很相似的,处理时可认为它们是等效来处理,或者推荐时可以在相似的属性中找出歌曲推荐。在这个例子中stock和macket在同一个块中出现,在检索文档时,可根据这个来进行近义词检索,同时也可通过设置近义词集合来降低存储空间:
(注1:MATLAB中“:”的作用matlab : http://jingyan.baidu.com/article/8cdccae99ff546315413cd0f.html)
(注2:基于svd的降维,没有使用考虑到所有的可用信息。另外,svd可能过滤掉一些数据噪声,且可能检测出不同属性的关系)
2、 主成分分析(PCA):对数据进行处理,过滤出“最重要”的数据,已解释大多数变量;
3、 关联规则挖掘:
1) 定义:一种大规模交易中识别类似规则关系模式的通用技术。例子“用户再超市中买了婴儿食品,70%的概率会买尿布”;
2) 关联规则的衡量标准是支持度和可信度:
例如关联规则为a->b时
支持度=包含a和且包含b的数量/总数量;
可信度=包含a和且包含b的数量/包含a的数量;
3) 例子(来源:http://www.cnblogs.com/dolphin0520/archive/2012/10/29/2733356.html),下面有7个用户的购买情况。以“牛肉—>鸡肉”为例,那么同时购买牛肉和鸡肉的顾客比例是3/7,为支持度,而购买牛肉的顾客当中也购买了鸡肉的顾客比例是3/4,为可信度。
4) 下图更直观:
5) 上面是物品的关联,下面再举一个用户间的关联,规则为“用户1喜欢听稻香,用户2不喜欢听稻香,则Alice喜欢稻香”,此时,基于可信度和支持度可以用以下公式进行评分(22页):x为用户1喜欢听的歌,用户2不喜欢听的歌,Alice喜欢听的歌的数量;y为用户1喜欢听的歌,用户2不喜欢听的歌的数量;
支持度=x/sum;
可信度=x/y;
然后同时对七里香、匿名的好友等等计算出可信度,支持度,根据公式算出得分即可;
4、 基于概率分析的推荐方法
1) 基础知识,一个条件概率的例子,A表示:大熊猫活到15岁,B表示大熊猫活到10岁,则p(A)=0.6,p(B)=0.8,其中该题中p(AB)=p(B):
2) 所用公式(来源:http://blog.sina.com.cn/s/blog_4cb0b54301013f48.html):
3) 实例一个:
为了预测物品5的评分为1时的概率,我们必须计算条件概率P(物品5=1|X),X是Alice的其他评分:X=(物品1=1,物品2=3,物品3=3,物品4=2):
a) P(物品5=1|X)=p(X|物品5=1)*p(物品5=1)/p(X);
b) P(X|物品5=1)=2/2+1/2+1/2+1/2(分母的2表示物品5=1的数量,分子表示在物品5=1的情况下其他物品的评分与Alice评分相同的数量)
c) p(物品5=1)=2/4
5、 Slope One预测器:
1) 基于物品的评分差异来评分;
2) 公式:
3) 看一个实例:
预测方法:平均偏差值((5-3)+(3-4))/2=0.5;(5-2)/1=3
结果(2*(2+0.5)+1*(5+3))/(2+1)=4.33
二、基于内容的推荐:
1、基于内容的推荐的思路:某个用户喜欢有特点A的物品,然后将含有特点A的物品推荐给这个用户;
2、两篇文章相似度的衡量可以使用Dice系数,例如文章a,b各有100,200个词,相同的词有50个,则Dice系数=2*(50)/(100+200):
3、TF-IDF(termfrequency–inverse document frequency),词频-反文档频率:
1)简单布尔方法
a) 比较两篇文档是否相似,有个简单的思路就是:首先将可能出现的所有词列出一个表,接着对应表中的词使用一个bool型向量描述每个文档,然后对用户的历史记录也使用一个描述,那么计算该描述和各个文档的重合程度即可找到匹配的文档。
b) 该法缺陷:未考虑词语出现的频率,且该法倾向于推荐长文档
2)TF-IDF方法可以解决简单布尔方法的缺陷:
a)
b) TF的计算公式,freq(i,j)表示词i在文章j中出现的次数,maxOthers(i,j)表示除了词i,出现最多的词的数量:
c) IDF的计算公式(可以屏蔽“的,是,我”这些词,),N表示可推荐文档的数量,n(i)表示N中出现过词i的文档数量:
4) 实例(来源:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/17/2595249.html,有修改):
例如利用关键字k1,k2,k3进行文档相似度的对比,此时TF1*IDF1+TF2*IDF2+TF3*IDF3,
假设document1的中k1,k2,k3的数目为50,200,100,出现最多的词为300,总文档数为10000,出现k1,k2,k3的文档数分别为1000,2000,10000。
则TF1=50/300,TF2=200/300,TF3=100/300,
IDF1=lg(10000/1000)=1,IDF2= lg(10000/2000),IDF3=lg(10000/10000)=0
5) IF-IDF的改进方法:
a) 停用词和词干还原:如不计算“a”,“the”这类词,如将“running”转为“run”,“went”转为“go”;
b) 精简规模:仅用n个信息量最大的词来减少文档描述的规模,最优个数根据实验而定,一般来说50太少,300过多。不同领域可以选择不同词;
c) 短语:用短语替换词描述的准确可能更好。例如“United Nations”即联合国,可以人工定义出这些列表;
d) 局限,例如一个读者喜欢素食,然后他喜欢了一篇文章,批判了“肉食”是残忍的,可能因为出现了很多肉食的词语,然后系统推荐了肉食的文章给该读者
3、 基于内容内容相似度检索(本节介绍依赖向量空间文档表示模型最为常见的技术):
1)k最近邻(KNN,,k-NearestNeighbor)(来源:http://wenku.baidu.com/link?url=Vhzc6sR04NXDI0HHVRuSMRqXcGlndfs6QPpOgmBpy6ovffsxIVIuHkTdHTB0R1BkXw0qu_Rs9ecO4DKouSV5BgBT9vX8tESboE9T72WALrK):
a) 如想知道A的分类,则需要找出k与A最相近的点,然后统计这k个点的所属分类,选择出分类比例最大的,则将A判断为该类;
b) 例如有一部电影A,打斗为18,接吻为70,那么他属于aciton还是是Romance呢?,我们计算A与下面6部电影的距离,选出最近的k部,然后看这k部是action多还是Romance多,多的即为电影A的类别。
2) 相关性反馈-Rocchio方法(参考:http://blog.csdn.net/sulliy/article/details/6670980):
a) 假定存在一个用户查询,然后我们有一些相关文档和不相关文档,然后通过这些文档来调整这个用户查询;
b) 首先将文档分为两类,Cr表示相关文档集,Cnr表示不相关文档集,其中q0为原始向量,qm为优化后的向量。查询词q0表示为像文档一样的多位单词向量,然后重复的增加相关文档的加权向量,并减去代表不相关文档的加权向量:
c) 效果:
d) 我的理解,例如查询词“计算机”q0最开始可能为(0,0,0,0,0),然后搜索计算机返回一个文档“计算机系统”给用户,用户觉得返回得很正确,则该文档“计算机系统”(1,1,0,1)为相关文档,加权后加到查询词向量q0中,若返回的是“那妹子很漂亮研究论文”(1,0,1,0)文档,用户觉得这是扯淡,即该文档为不相关文档,q0减去该文档加权后的向量;
4) 基于概率模型的方法:
下次继续