推荐系统学习

目前的推荐系统分为三类:

1. 非个性化推荐系统 

特点:基于统计分析技术,推荐销售排行,这样所有的用户看到的推荐信息都是一样的,或者编辑推荐,以及基于平均数值评分。

2. 半个性化推荐系统

特点: 根据用户当前的浏览行为或用户当前的购物车信息产生推荐结果 

3. 完全个性化推荐系统

特点:根据用户历史信息,结合用户当前行为,为用户完全产生个性化的推荐服务

做推荐系统的时候,输入信息分为多种类型:

1). 隐私浏览输入    ;2). 显示浏览输入  ;3). 关键字/商品属性输入  ;4). 用户评分输入  ;5). 用户文本评价输入  ;6). 编辑推荐输入   ;7). 用户购买历史输入

输出形式表示为: 

a). 相关商品输出  ; b). 个体文本评价输出    ;c). 个体评分输出  ;d). 平均数值评分输出  ; e). 电子邮件输出  f). 编辑推荐输出

电子商务推荐算法包括:

1.内存推荐算法:

User_based协同过滤推荐      、Item_based协同过滤推荐 、基于Horting图技术的协同过滤推荐 、

2. 基于模型的推荐算法:

Cluster_based协同过滤推荐 、 基于降维的协同过滤推荐 、基于Bayesian网络技术的推荐 、关联规则推荐

内存推荐算法的不足: 

当用户数据库非常庞大的时候,难以保证实时性

基于模型的推荐算法的不足:

模型相对于原始用户数据而言具有滞后效应,要保证模型的有效性,需周期性的对模型进行更新 

下面分别介绍下几个典型的算法

1.User_based协同过滤

基于假设:如果用户对一些项的评分比较相似,则他们对其他项的评分也相似。

User_based协同过滤处理分为三个阶段:

数据表示------> 最近邻查询(度量用户相似度)------>推荐产生

度量用户自己相似性方法:

1)余弦相似性   

设用户 i 和用户 j  在n维项空间上的评分分别表示为向量 \vec{i}\vec{j}

则用户 i 和用户 j之间的相似性

  sim(i,j)=cos( \vec{i},\vec{j}) =\frac{\vec{i}\cdot\vec{j}}{|\vec{i}|\times|\vec{j}|} 

分子为两个用户评分向量的内积,分母为用户向量模的乘积

2) 相关相似性

用户 i 和用户 j 共同评分过的项集合用I_{ij} 表示

用pearson相关系数度量

sim(i,j)={\sum_{c\in{I_{ij}}}\time{(R_{i,c}-\bar{R_i})}{(R_{j,c}-\bar{R_j})}} /{\surd{\sum_{c\in{I_{ij}}}{(R_{i,c}-\bar{R_i})}^2}\surd{\sum_{c\in{I_{ij}}}{(R_{j,c}-\bar{R_j})}^2}}

R_{i,c}表示用户 i 对项c的评价,\bar{R_i}\bar{R_j}分别表示用户 i 和用户 j 的平均评分。

3) 修正的余弦相似性 

在余弦相似性度量方法中没有考虑不同用户的评分尺度问题,修正的余弦相似性度量方法通过减去用户对项的平均评分改善上述缺陷:

设用户 i 和用户 j  共同评分过的项集合用I_{ij}表示,I_{i}和 I_{j} 分别表示对用户 i 和用户 j评分过的项集合。

sim(i,j)={\sum_{c\in{I_{ij}}}\time{(R_{i,c}-\bar{R_i})}{(R_{j,c}-\bar{R_j})}} /{\surd{\sum_{c\in{I_{ij}}}{(R_{i,c}-\bar{R_i})}^2}\surd{\sum_{c\in{I_{ij}}}{(R_{j,c}-\bar{R_j})}^2}}

R_{i,c} 表示用户  i 对项  c 的评分,\bar{R_i} 和 \bar{R_j}分别 表示用户 i 和用户 j 的平均评分。

推荐产生:

P_{u,i}=\bar{R_u}+{\sum_{n\in{NN_u}}sim(u,n)\times({R_{n,i}-\bar{R_n}})/{\sum_{n\in{NN_u}}\mid{sim(u,n)}\mid{}}

设用户 u 的最近邻居集合用NN_{u}表示,则用户 u 对项 i 的预测评分P_{u,i} 可以通过用户 u  对最近邻居集合NN_{u} 中项的评分得到。

sim(u,n)表示用户 u​​​​​​​  与用户 n 之间的相似性,R_{n,i} 表示用户 n 对项 i  的评分, \bar{R_u} 和 \bar{R_n} 分别表示 用户 u​​​​​​​  与用户 n  对项的平均评分。

通过上述方法预测用户对所有未评分项的评分,然后选择预测评分最高的前若干个项作为推荐结果反馈给当前用户。

若使用交易数据作输入无法预测用户评分,则采用如下方法:

1)  最频项推荐, 用当前用户每一个最近邻居的购买记录,对其购买的商品进行计数,选择频次高未购买的推荐

2)  关联规则推荐

 

Item_based协同过滤算法

基于假设:如果大部分用户对一些项的评分比较相似,则当前用户对这些项的评分也比较相似。

实现阶段: 度量项间相似性

1.最近邻查询  核心 

1).  余弦相似性

sim(i,j)=cos( \vec{i},\vec{j}) =\frac{\vec{i}\cdot\vec{j}}{|\vec{i}|\times|\vec{j}|} 

项评分看作为m 维用户空间上的向量,如果用户对项没有评分,则将用户对项的评分设为0,设项  i 和项 j 在m维用户空间上的评分分别表示为向量 \vec{i}\vec{j} 

2). 相关相似性

sim(i,j)={\sum_{c\in{U_{ij}}}\time{(R_{c,i}-\bar{R_i})}{(R_{c,j}-\bar{R_j})}} /{\surd{\sum_{c\in{U_{ij}}}{(R_{c,i}-\bar{R_i})}^2}\surd{\sum_{c\in{U_{ij}}}{(R_{c,j}-\bar{R_j})}^2}}

R_{c,i} 表示用户c 对项  i 的评分,\bar{R_i}\bar{R_j}分别表示项 i 和项 j 的平均评分。

3). 修正的余弦相似性

设对项 i 和项 j  共同评分过的用户集合用U_{ij}表示,U_{i}和 U_{j} 分别表示对项 i 和项 j评分过的用户集合。

sim(i,j)={\sum_{c\in{U_{ij}}}\time{(R_{c,i}-\bar{R_c})}{(R_{c,j}-\bar{R_c})}} /{\surd{\sum_{c\in{U_{ij}}}{(R_{c,i}-\bar{R_c})}^2}\surd{\sum_{c\in{U_{ij}}}{(R_{c,j}-\bar{R_c})}^2}}

R_{c,i} 表示用户c对项  i​​​​​​​  的评分,\bar{R_c} 表示用户c 对项的平均评分。

在购买商品v的条件下购买商品u 的条件概率

P(u|v)=\frac{Freq(uv)}{Freq(v)}

存在问题,有时  u 与 v 之间不具有相似性,仅仅因为 u 被频繁购买而导致结果相似度很高。

解决方法: 将用户-商品矩阵R的每一行规范化为相同长度。

推荐产生:

目标项 TI的最近邻集合用NN_{TI}={\{NN_1,NN_2,...NN_K}\}

P_{u,TI}={\bar{R_{TI}}}+ \sum_{n\in{NN_{TI}}}sim(TI,n)\times({R_{u,n}-\bar{R_n}})/\sum_{n\in{NN_{TI}}}(|sim(TI,n)|)

基于降维的协同过滤算法 ,缺点: 精确度会有下降

优点:解决数据稀疏性问题,减少计算开销 。

Cluster_based协同过滤算法 

将整个用户空间根据用户的购买习惯和评分特点划分为若干个不同的聚类,从而使得聚类内部用户对项的评分尽可能相似,而不同聚类间用户对商品的评分尽可能不同。

采用K-means聚类算法对整个用户空间进行聚类的主要步骤:

1). 随机选择K个用户作为种子节点,将K个用户对项的评分数据作为初始的聚类中心。

2). 对剩余的用户集合,计算每条用户与K个聚类中心的相似性,将每个用户分配到相似性最高的聚类中。

3). 对新生成的聚类,计算聚类中所有用户对项的平均评分,生成新的聚类中心

4). 重复以上2到3步,直到聚类不再发生改变为止。

猜你喜欢

转载自blog.csdn.net/qq_27575895/article/details/87928179