体系原理
该体系运用java编写的依据用户的协同过滤算法(UserCF)和依据物品(此运用中指电影)的协同过滤(ItemtemCF) 运用统计学的相关系数经常皮尔森(pearson)相关系数核算相关系数来完成千人千面的引荐体系。
协同过滤算法
协同过滤引荐算法是诞生最早,并且较为闻名的引荐算法。首要的功能是预测和引荐。协同过滤(Collaborative Filtering,简写CF)是引荐体系最重要得思维之一,其思维是依据用户之前得喜爱以及其他爱好相近得用户得选择来给用户引荐物品(依据对用户前史行为数据的发掘发现用户的喜爱偏向,并预测用户或许喜爱的产品进行引荐),一般仅仅依据用户的行为数据(评价,购买,下载等),而不依靠于物品的任何附加信息(物品自身特征)或许用户的任何附加信息(年纪,性别等)。其思维总的来说就是:人以类聚,物以群分。
目前运用比较广泛的协同过滤算法是依据邻域的办法,而这种办法首要有两种算法: 分别是:
- 依据用户的协同过滤算法(user-based collaboratIve filtering 简称 UserCF) 给用户引荐和他爱好类似的其他用户喜爱的产品
- 依据物品的协同过滤算法(item-based collaborative filtering 简称 ItemCF) 给用户引荐和他之前喜爱的物品类似的物品
皮尔森(pearson)相关系数公式
公式定义为: 两个连续变量(X,Y)的pearson相关性系数(Px,y)等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(X,Y)。系数的取值总是在-1.0到1.0之间,接近0的变量被成为无相关性,接近1或许-1被称为具有强相关性。
皮尔森相关系数反映了两个变量的线性相关性的强弱程度,r的绝对值越大说明相关性越强。
- 当r>0时,标明两个变量正相关,即一个变量值越大则另一个变量值也会越大;
- 当r<0时,标明两个变量负相关,即一个变量值越大则另一个变量值反而会越小;
- 当r=0时,标明两个变量不是线性相关的(注意仅仅非线性相关),可是或许存在其他方法的相关性(比方曲线方法);
- 当r=1和-1时,意味着两个变量X和Y能够很好的由直线方程来描绘,一切样本点都很好的落在一条直线上。
通常情况下经过以下取值范围判断变量的相关强度: 相关系数 0.8-1.0 极强相关 0.6-0.8 强相关 0.4-0.6 中等程度相关 0.2-0.4 弱相关 0.0-0.2 极弱相关或无相关
UserCF依据用户的协同过滤
算法思维
当一个用户A需求特性化引荐的时分,我们能够先找到和他有类似爱好的其他用户,然后把那些用户喜爱的,而用户A没有听说过的物品引荐给A。
过程
一切依据用户的协同过滤算法过程为:
- 找到和方针用户爱好类似的其他用户调集
- 找到这个调集中的用户喜爱的,且方针用户没有听说过的物品引荐给方针用户
缺点
1.数据稀疏性
一个大型的电子商务引荐体系一般有十分多的物品,用户或许买的其中不到1%的物品,不同用户之间购买的物品堆叠性较低,导致算法无法找到一个用户的偏好类似的用户。这导致UserCF不适用与那些正反馈获取较困难的运用场景(如酒店预订,大件产品购买等低频运用)
2.用户类似度矩阵维护度大
UserCF需求维护用户类似度矩阵以便快速的找出Topn类似用户,该矩阵的存储开支十分大,存储空间跟着用户数量的添加而添加,不合适用户数据量大的情况运用。
在互联网运用场景中,绝大多数产品的用户数都要远大于物品数,因此维护用户类似度矩阵的难度要大很多。
其适用于用户少,物品多,时效性较强的场合如新闻引荐场景。
ItemCF依据物品的协同过滤
算法思维
由于UserCF的缺陷,导致很多电商渠道并没有采用这种算法,而是采用了ItemCF算法完成引荐体系。依据物品的协同过滤基本思维是预先依据所以用户的前史偏好数据核算物品之间的类似度,然后把与用户喜爱的物品相类似的物品引荐给用户。ItemCF算法并不运用物品的内容属性核算物品间的类似度,首要经过分析用户的行为记录核算物品之间的类似度。
过程
依据物品的协同过滤算法过程:
- 核算物品之间的类似度
- 依据物品的类似度和用户的前史行为给用户生成引荐列表(购买了该产品的用户也经常购买的其他产品)
缺点
1.数据稀疏性
表中数据0代表用户没有产品打分,1代表用户对产品打分了 想要核算物品类似度矩阵,则两个物品的向量需求满意至少同一行有2个1才能核算,即使有,假如行数过少,得出来得数据就不可靠。 因而ItemCF算法运用与电商渠道等User数量远大于Item数量得运用场景
2.物品类似度矩阵维护难度大
对于有m个用户,n个物品,m>>n 则user类似度矩阵维度为:m_m item类似度矩阵维度为:n_n 在user数量远远高于item数量时,维护item类似度矩阵要比user类似度矩阵简单。 所以ItemCF适用于爱好改变较为稳定,更接近与特性化的引荐。合适物品少,用户多,用户爱好固定耐久,物品更新速度不是太快的场合。如引荐艺术品,音乐电影等.
UserCF和ItemCF的比照
UserCF
ItemCF
场景
适用于用户较少的场合,假如用户很多,核算用户类似度矩阵价值很大
适用于物品数量显着少于用户数的场合,假如物品很多,核算物品类似度矩阵难度很大
范畴
时效性较强,用户特性化爱好不太显着的范畴,着重人与人之间的共性(微博热搜)
长尾物品(小众物品)丰厚,用户特性化需求激烈的范畴,着重人的特性
实时性
在用户有新行为,不一定造成引荐成果的立即改变
用户有新行为,一定会导致引荐成果的实时改变
冷启动
在新用户对很少的物品发生行为后,不能立即对他进行特性化引荐,由于用户类似度表是每隔一段时间离线核算的(只要用户有新行为,那么类似用户就很有或许发生改变,需求更新类似用户,才能做出精确的引荐)
新用户只要对一个物品发生行为,就能够给他引荐和该物品相关的其他物品
新物品
新物品上线一段时间后,一旦有用户对物品发生行为,就能够将新物品引荐给和对它发生行为的用户爱好类似的其他用户
没有办法再不离线更新物品类似度表的情况下将新物品引荐给用户,由于新物品跟其他物品的类似度还没有核算,不能从类似性矩阵中找到对于的类似物品
引荐理由
很难供给令用户服气的引荐解释
运用用户的前史行为给用户做引荐解释,能够令用户比较服气
代码完成
软件架构
Spring boot单项目架构
装置教程
- git下载源码
- maven构建依靠
- idea-java运转
运用说明
1.找到 src / main / java / com / tarzan / recommend / RecommendSystemApplication.java 右键java 运转
2.传入不同的用户id和不同的电影id,得到不同的引荐数据
------依据用户协同过滤引荐---------------下列电影
Pulp Fiction (1994)
While You Were Sleeping (1995)
Four Weddings and a Funeral (1994)
Remains of the Day, The (1993)
Sleepless in Seattle (1993)
Dances with Wolves (1990)
Blues Brothers, The (1980)
Sting, The (1973)
Graduate, The (1967)
Groundhog Day (1993)
Back to the Future (1985)
Young Frankenstein (1974)
M*A*S*H (1970)
When Harry Met Sally... (1989)
Clueless (1995)
Bridges of Madison County, The (1995)
Muriel's Wedding (1994)
Mrs. Doubtfire (1993)
Ghost (1990)
Harold and Maude (1971)
Duck Soup (1933)
Butch Cassidy and the Sundance Kid (1969)
Annie Hall (1977)
Manhattan (1979)
Cool Hand Luke (1967)
Great Dictator, The (1940)
Somewhere in Time (1980)
Being There (1979)
Pretty Woman (1990)
French Kiss (1995)
Big Green, The (1995)
------依据物品协同过滤引荐---------------下列电影
Guilty as Sin (1993)
Colonel Chabert, Le (1994)
3.项目中用到的文件数据集ml-100k 在 src / main / resources目录下
更多引荐体系原理以及规划请看源码和注释
代码下载地址:
gitee.com/taisan/reco…