转载

利用降维方法进行用户为基础的协同过滤优化

原文作者:新浪微博@王小科科科本文由36大数据翻译组-大海翻译,转载必须获得本站、原作者、译者的同意,拒绝任何不表明译者及来源的转载!

如何提高推荐算法的有效性?主要的方法是特征转化,模型选取,数据处理等等。降维是特征加工中的一个重要部分。

这篇博文主要讲述如何利用降维方法来提高以用户为基础的协同过滤方式,协同过滤依赖测量用户的相似性进行物品推荐。我会在接下来章节里阐述所用到的每一种方法。

1、基准值

这个数值的有效性来自R(均方根误差)的计算。我通过三种平均值计算方法设定系统基准值。第一,项目j的评分是所有用户对于项目j的评分均值。

利用降维方法进行用户为基础的协同过滤优化

Nu是用户数量,Rateing(ij)是用户i对于项目j的评分。

第二,用户i的评分是该用户对于所有项目评分的均值。

利用降维方法进行用户为基础的协同过滤优化

利用降维方法进行用户为基础的协同过滤优化

Nm是项目的数量(影片);Rateing(ij)是用户i对于项目j的评分。

第三,用户i对于项目j的评分是“用户i对于所有项目的评分均值”+“所有用户对于项目j的评分均值”-“总体评分均值”

利用降维方法进行用户为基础的协同过滤优化

三种方法的评分如下:

利用降维方法进行用户为基础的协同过滤优化

可以看到,第三种方法既考虑了项目又考虑了用户的偏好,比其他两种方法更好。

2、“简易方法”:用户为基础的协同过滤

这种“简易方法”使用皮尔逊相关的相似度测量(pcs)来发现相似用户,同时使用它们的评分均值作为这个项目的得分。

利用降维方法进行用户为基础的协同过滤优化 利用降维方法进行用户为基础的协同过滤优化

第一种方法,就使用和我想预测的用户最相似的用户,并对这些最相似的用户对项目的评分求平均值。

但是最好的结果不会优于最佳基准值。因此我改变第一种方法,仅仅计算相关系数大于0的用户,这是第二种方法。

利用降维方法进行用户为基础的协同过滤优化

Sim(Ui)是U用户的相似用户组,这里我们没有使用聚类方法,但是count(Sim(Ui)),即相似用户的数量,将会影响评分。

第三种方法,我也使用与我想预测的用户最相似的用户,但是我使用用户给予产品评分权重的相似度。

第四种方法,我们使用标准化的方法,“用户i给项目j的评分”-“项目的平均得分”-“用户的平均给分”+“总体评分的均值”。然后利用标准化矩阵来计算用户的相似度,其他做法同第二种方法,从标准化矩阵计算得分,“用户i给项目j的标准化评分”+“项目的平均得分”+“用户的平均给分”-“总体评分的均值”。(这种方法摘自(大数据挖掘))。四种方法的计算结果如下:

利用降维方法进行用户为基础的协同过滤优化

总体来说,这四种方法表现越来越好,第四种方法表现是最优,它比最佳基准值方法更好。看一下“评分VS前N项”的图表,我们看到从高偏差到高方差的变化过程,尽管高方差看起来不是个很严重的问题。

利用降维方法进行用户为基础的协同过滤优化

3、Kmeans项目聚类

我们使用“简易方法”中的第四种方法作为基准值,使用Kmeans来对项目进行聚类,然后使用聚类信息计算用户相似度。这里有两种方法,第一种方法我们使用原始数据<用户,项目,评分>来计算预测分值,第二种方法我们使用聚类<用户,聚类,评分均值>(评分均值是聚类的评分均值)计算预测得分。

聚类的数值,相似用户的数值,训练次数的数值和很多其他执行细节将会影响结果。我只考虑聚类的数值和相似用户的数值,评分信息的图表如下,每一个分图的标题上的数值是聚类数值,X轴是相似用户或者聚类的数值,Y轴是均方误差的数值。

利用降维方法进行用户为基础的协同过滤优化

我们能看到,从topN越变越大,方法的准确性越来越高,接着变得平稳并有点变差;方法2比方法1更平稳,但是最好的结果仍是方法1。大多数不会比最优简易协同过滤方法,但是最好的结果比它好,比如方法1的参数TopN=50和ClusterNumber =150,RMSE(均方根误差)是0.932186048。

4、我们用简易方法的第四种方法作为基准值, 使用EM方法进行项目聚类 ,然后利用聚类信息计算用户相似度,这里我们能选择很多种方法:

(1)仅使用最大概率的类作为预测聚类或者使用聚类信息的初始概率;

(2)使用<用户,项目,评分>矩阵来计算预测分数或者使用聚类信息<用户,聚类,评分均值>来计算预算分数。

(3)EM算法中有很多种不同的参数可供选择,例如方差类型,可能是球形、带形、矩形或者完整形。

这里由于时间有限,我们只介绍两种方法。首先,我们使用最高概率的聚类作为预测聚类,使用初始<用户,项目,评分>矩阵来计算预测分数。第二种方法,我们使用聚类概率信息找出最高的n个相似用户,并使用<用户,聚类,评分均值>(均值评分是聚类的评分均值)矩阵来计算预测分数。结果如下:

利用降维方法进行用户为基础的协同过滤优化

我们也看到,从topN越变越大,两种方法的准确性越来越高,接着变得平稳并有点变差;方法1已经足够好了,它们的最佳得分比简易方法的基准值得分还要好,例如:topN=50/ ClusterNumber =80(RMSE:0.925359902),topN=50/ ClusterNumber =150(RMSE:0.926167057)。第二种方法更加平稳,一些结果也很好,如topN=100/ ClusterNumber =150(RMSE:0.931907),随着聚类数值越来越大,准确性越来越高,但是时间成本也越来越高。

5、相似性计算

在上一章节,我刚使用了皮尔逊相关的相似度测量(pcs)找到相似用户,但是有很多其他方法可以尝试,例如:

(1)余弦相似度(cosine similarity),是测量一个内积空间中两个向量间相似度的一种测量,测量两者之间的夹角余弦。我们可以将一个用户的评分看做一个向量。

(2)欧式距离(Euclidean distance),将数据看做点,数据x和数据x的距离是连接x和y的连线部分的长度。

利用降维方法进行用户为基础的协同过滤优化

利用降维方法进行用户为基础的协同过滤优化

操作第一步,我们先做标准化(同简易方法的第四种方法相同),用户i对项目j的标准化评分是用户i给项目j的初始分值-项目的平均分值-用户的平均分值+所有分值的总体平均。

第二步,我们也能选择不同评价权重的计算方法,这里我们用相同评分作为相同用户的权重或者将它视为1。上面的那个我们叫做SWM (同权重方法),,下面的那个我们叫OWM(“1”权重方法)。具体如下:

利用降维方法进行用户为基础的协同过滤优化

我比较皮尔逊相关系数相似性策略(pcs)/余弦相似度(cosine similarity)/ 欧式距离(Euclidean distance)相似方法, 将每个相同的用户的权重看做1 (OWM method)。下面是评分VS前n(计算相似用户)的图表,我们看出余弦相似度方法是最好的,欧式距离方法是最差的。

接下来,我利用余弦相似度方法来比较两种不同的权重计算方法。

利用降维方法进行用户为基础的协同过滤优化

我们看到,SWM更加稳定,但是最高的得分是OWM,参数topN=100 (数值是0.924696436)。

利用降维方法进行用户为基础的协同过滤优化

6、降维方法

这一章,我来讲解更深层次的降维方法:

(1)主成分分析法(Principal component analysis),它是利用数据的奇异值分解一种线性降维方法,只保持最显著的特征向量将向量投影到低维的空间。

(2) 独立成分分析(Independent component analysis),是将一个多变量符号划分为具有最大独立性的附加子成分。

我使用余弦作为相似度的计算方法,尝试了结合SWM和OWM的两种方法。结果会更好。我们看到两种方法都适用于SWM,PCA的最好得分是0.917368073(topN==5/SWM),,ICA最好的得分是0.916354841(ton==5/SWM),这是我报告中所有方法中最好的。

利用降维方法进行用户为基础的协同过滤优化

7、结论

从以上章节,我们可以看出,聚类和直接的降维方法在协同过滤推荐的小型计算系统中是行之有效的。它能够帮助我们处理大方差问题。同时也有很多不同的技术影响推荐引擎的准确性,例如LDA主题模型,使用组合算法和逻辑回归将很多方法组合起来。我将更进一步做这些介绍。

代码托管: https://github.com/wangkobe88/Mercury/tree/master/ubcf

原文地址: http://www.wangke.me/?p=142  非常感谢原作者@王小科科科给我们巨大的支持。

End.

正文到此结束
Loading...