博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
推荐算法
阅读量:5278 次
发布时间:2019-06-14

本文共 1765 字,大约阅读时间需要 5 分钟。

推荐算法越来越多的运用到我们的生活中,特别是在网站中,当你浏览大大小小的网站,你的行为被时刻记录着,并根据一些依据对你推荐一些物品。下面会简单介绍一下推荐算法,后续会继续对这些算法进行补充。

1.协同过滤算法

2.基于流行度的算法

3.基于模型的算法

4.混合算法

 

协同过滤算法

 

协同过滤算法有两种,一种是基于用户的协同过滤算法,一种是基于物品的协同过滤算法。

基于用户的协同过滤算法

该算法主要是找出用户的相似用户,将相似用户浏览或购买而用户没有购买的商品推荐给用户。

基于用户的协同过滤算法流程如下:

1.分析各个用户对item的评价(通过浏览记录、购买记录等);

2.依据用户对item的评价计算得出所有用户之间的相似度;

3.选出与当前用户最相似的N个用户;

4.将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当前用户。

如下图:

 

基于物品的协同过滤算法

基于物品的协同过滤算法原理为在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。基于物品的协同过滤算法原理大同小异,只是主体在于物品:

1.分析各个用户对item的浏览记录。 依据浏览记录分析得出所有item之间的相似度;

2.对于当前用户评价高的item,找出与之相似度最高的N个item;

3.将这N个item推荐给用户。

如下图:

 

基于流行度的算法

该方法比较简单粗暴,主要是把当前的流行物品或者时间推荐给用户,不考虑用户的偏好,这种算法比较适合应用在新用户上,这类用户没有任何历史数据,可以直接给他们推荐流行的东西,根据用户的点击,再进一步推荐。

 

基于模型的算法

基于模型的方法有很多,用到的诸如机器学习的方法也可以很深,这里只简单介绍下比较简单的方法——Logistics回归预测。我们通过分析系统中用户的行为和购买记录等数据,得到如下表:

     

 

表中的行是一种物品,x1~xn是影响用户行为的各种特征属性,如用户年龄段、性别、地域、物品的价格、类别等等,y则是用户对于该物品的喜好程度,可以是购买记录、浏览、收藏等等。通过大量这类的数据,我们可以回归拟合出一个函数,计算出x1~xn对应的系数,这即是各特征属性对应的权重,权重值越大则表明该属性对于用户选择商品越重要。   

在拟合函数的时候我们会想到,单一的某种属性和另一种属性可能并不存在强关联。比如,年龄与购买护肤品这个行为并不呈强关联,性别与购买护肤品也不强关联,但当我们把年龄与性别综合在一起考虑时,它们便和购买行为产生了强关联。比如(我只是比如),20~30岁的女性用户更倾向于购买护肤品,这就叫交叉属性。通过反复测试和经验,我们可以调整特征属性的组合,拟合出最准确的回归函数。最后得出的属性权重如下:      

       

 

基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。

 

混合算法

通常推荐算法中会使用多种算法的融合,往往会得到比单一算法更好的结果,算法融合可以使用加权融合,赋予不同算法不同的权重,从而得到不同的结果。

 

总结:

以上几类推荐算法中,基于流行度的算法比较适合使用在新用户群体中,不需要分析用户行为数据,就可以直接进行推荐。基于用户的协同过滤算法比较适合使用在用户数目较少的情况下,用户数过大会使得计算量过大。基于物品的协同过滤算法比较适合使用在用户数目大的情况下。基于模型的推荐算法,可以使用多种不同的模型来进行推荐,具体需要根据实际情况。在条件允许的情况下,可以使用模型融合算法,或许会得到更好的结果。

 

参考博客:https://blog.csdn.net/u010670689/article/details/71513133/

参考博客:https://blog.csdn.net/xiaokang123456kao/article/details/74735992

 

转载于:https://www.cnblogs.com/r0825/p/9697962.html

你可能感兴趣的文章
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>