推荐算法

推荐算法

1. slope one

在这里插入图片描述

该算法适用于物品更新不频繁,数量相对较稳定并且物品数目明显小于用户数的场景。依赖用户的用户行为日志和物品偏好的相关内容。

  • 优点:
    • 1.算法简单,易于实现,执行效率高;
    • 2.可以发现用户潜在的兴趣爱好;
  • 缺点:
    • 依赖用户行为,存在冷启动问题和稀疏性问题。

参考:https://blog.csdn.net/xidianliutingting/article/details/51916578

2. 协同过滤

2.1 基于用户的 CF(User CF)

一、找到和目标用户兴趣相似的用户集合——计算两个用户的兴趣相似度

二、找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户

在这里插入图片描述

2.2 基于物品的 CF(Item CF)

一、计算物品之间的相似度矩阵或共现矩阵 。W[i][j] = cij / math.sqrt(N[i] * N[j]) #余弦相似度

二、根据物品的相似度和用户的历史行为给用户生成推荐列表

Co-occurrence Matrix(共现矩阵)和User Preference Vector(用户评分向量)相乘得到的这个Recommended Vector(推荐向量)
在这里插入图片描述

​ 使用基于物品的协同过滤,需要维护一个物品相似度矩阵;使用基于用户的协同过滤,需要维护一个用户相似度矩阵。可以设想,如果物品之间的相似度经常变化,那么物品相似度的矩阵则需要经常更新。如果物品经常增加,那么物品相似度的矩阵也会增长的非常快。新闻网站就同时具有这两个特点,所以基于物品的协同过滤并不适用于新闻的推荐。

3. 隐语义模型

N代表用户,M代表物体

第一步:先分解 将用户分解成F个因子的矩阵 将物品也分解成F个因子的矩阵。

在这里插入图片描述

第二步:转成机器学习模型:

  • RUI代表用户对物品的关系

  • Pu代表用户对隐藏因子的关系

  • QI代表物品对隐藏因子的关系

  • 损失值=预测值-真实值 其中预测值即分解的RUI ,真实值就是真实的RUI,我们希望找出P矩阵(用户和隐藏因子的和关系)和Q矩阵(物品和隐藏因子的关系),实际上就是找出对应的参数,所以这些参数就是我们需要求解的模型,我们将这些参数加入到损失函数里面去,做正则化。

在这里插入图片描述

第三步:求解模型

在这里插入图片描述

第四步:建模求解,选择正负样本。

  • 正样本:用户对物品打分就是正样本。

  • 负样本:选取那些很热门,而用户却没有行为的物品。

  • 对每个用户,要保证正负样本的平衡(数目相似)

  • 对于用户—物品集K {(u,i)},其中如果(u, i)是正样本,则有 ???= 1,负样本则???= 0

第五步:参数选择

  • F值越大,表示映射维度越多。

  • 隐特征的个数F,通常F=100

  • 学习速率alpha,别太大

  • 正则化参数lambda,别太大

  • 负样本/正样本比例 ratio

第六步:模型使用

  • 根据求得的P和Q,还原回去可得原用户对物品的评分矩阵,从而进行推荐。

4. 关联分析

4.1 Apriori

发现频繁项集的过程:

  • 由数据集生成候选项集C1(1表示每个候选项仅有一个数据项);再由C1通过支持度过滤,生成频繁项集L1(1表示每个频繁项仅有一个数据项)。
  • 将L1的数据项两两拼接成C2。
  • 从候选项集C2开始,通过支持度过滤生成L2。L2根据Apriori原理拼接成候选项集C3;C3通过支持度过滤生成L3……直到Lk中仅有一个或没有数据项为止。

在这里插入图片描述

4.2 FPGrowth

FPGrowth算法主要分为两个步骤:FP-tree构建、递归挖掘FP-tree。

  • FP-tree构建通过两次数据扫描,将原始数据中的事务压缩到一个FP-tree树,该FP-tree类似于前缀树,相同前缀的路径可以共用,从而达到压缩数据的目的。
  • 接着通过FP-tree找出每个item的条件模式基、条件FP-tree,递归的挖掘条件FP-tree得到所有的频繁项集。
import org.apache.spark.mllib.fpm.FPGrowth
val model = new FPGrowth().setMinSupport(minSupport).run(data)

5. 基于graphx的好友推荐

参考:http://kubicode.me/2015/07/07/Spark/Graphs-Applications/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
├──Package │ ├── Sort 排序篇 │ │ ├── BubbleSort.php 冒泡排序 │ │ ├── HeapSort.php 堆排序 大根堆 │ │ ├── MBaseSort.php 基数排序 MSD │ │ ├── LBaseSort.php 基数排序 LSD │ │ ├── QuickSort.php 快速排序 │ │ ├── ShuttleSort.php 飞梭排序 │ │ ├── ShellSort.php 希尔排序 │ │ ├── MergeSort.php 归并排序 │ │ ├── InsertSort.php 插入排序 │ │ └── SelectSort.php 选择排序 │ │ │ ├── Query 查找篇 │ │ ├── BinaryQuery.php 二分查找 │ │ ├── InseertQuery.php 插入查找 │ │ ├── FibonacciQuery.php 斐波那契查找 │ │ ├── BFSQuery.php 广度优先查找 │ ├── Kmp.php 算法导论-KMP算法 │ ├── DijkstraQuery.php 迪克斯特拉算法 │ │ └── QulickQuery.php 快速查找 │ │ │ ├── Structure 数据结构 │ │ ├── StackExample.php 堆栈 先进后出 LIFO (Last In First Out) │ │ ├── LinearChain.php 线性表 单链存储 │ │ └── LinearOrder.php 线性表 顺序存储 │ │ └── BinarySearchTree.php 二叉搜索树 │ │ │ ├── Tools 小工具集 │ │ └── SystemSwitch.php 堆栈实现进制转换 │ │ │ └── Other 其他 │ ├── MonkeyKing.php 约瑟夫环 │ ├── DynamicProgramming.php 动态规划 │ ├── Fibonacci.php 斐波那契数列 │ ├── StealingApples.php 偷苹果求余 │ ├── HanoiGames.php 汉诺塔游戏 │ ├── BidirectionalQueue.php 双向队列 │ ├── ColorBricks.php 彩色砖块 │ ├── GetCattle.php 牛年求牛 │ ├── OnlyNumbers.php 求唯一数 │ ├── PokerGames.php 洗扑克牌 │ ├── Interval.php 抽奖区间算法 │ ├── Maze.php 迷宫寻址算法 │ ├── AntsClimb.php 蚂蚁爬杆算法 │ ├── Encryption.php 对称加密算法 │ ├── ElevatorDispatch.php 编程之美-电梯调度算法 │ ├── PointInTriangle.php 向量叉集计算点是否在三角形中 │ ├── TraversalOfBinary.php 二叉树非递归遍历算法实现 │ ├── Knapsack.php 贪心算法之背包问题实现 │ └── BigSmallReplace.php Hello World 输出 Olleh Dlrow │ └── Solution.php Facebook面试题之岛屿周长算法 │ └── RotationSort.php Facebook面试题之顺时针回旋算法 │ └── Square.php Facebook面试题之判断四个点能否组成正方形算法 │ └── Prim.php Prim算法(最小生成树算法) │ └── CartesianProduct.php 笛卡尔积算法 │ └── Square.php 面试题之平面任意四点能否组成一个矩形 │ └── Judge.php 面试题之扑克牌中任选五张判断是不是顺子 │ └── Factorial.php 面试题之N的阶乘末尾有多少个0

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值