推荐系统_七月算法4月机器学习班第9次课程笔记

2016/5/21 星期六 21:38
 
  desc
关于矩阵分解
LSA pLSA  LDA 本质都是矩阵分解
1. LSA 的奇异值分解 A = S·Σ·D,分解获得的是三个矩阵,操做一下,就是
S'  = S·Σ
D' = Σ·D
此时 S' · D' 仍旧可以获得 近似原始矩阵的值
# 或者这里的 Σ 所有取 Σ' 即 :Σ' = sqrt( Σ )
这样的话,乘完毕之后还能获得原始的矩阵 A
这个 trick 将 分解为三个矩阵 转换为 分解为两个矩阵
 
2. pLSA 经过引入 topic A = B·C 两个矩阵
 
3. MF 矩阵分解的方法,与 pLSA 的问题相同,可是不是用 EM算法,而是数值解法,去逼近
   直接获得 A = P·Q
 
4. 而你想要的 是 GloVec 的方法,即 input 矩阵是 一个方阵,是对称方阵
而后 但愿 get 一个 矩阵(list of vector)
这些 vector 两两相乘 能够逼近 原始对称方阵
其实 这部分的代码 与 MF 的代码类似
 
summary 矩阵分解的方法【观点】
· EM 算法 的方法
· 数值逼近的方法 cost
· LDA 吉布斯采样
· SVD 分解
矩阵分解的 tool
libSVD
libMF
libFM
svd feature
均可以作矩阵分解
 
冷启动的概念:
1. 冷启动就是没有用户的历史行为数据,如何给用户作推荐遇到问题
   新加入用户或商品由于没有历史数据因此很难作推荐
2. 只要是推荐系统都会遇到 这个问题,no matter CF or content based
推荐的本质与假设
不要本末倒置
推荐的根本是:知足用户的需求,是挖掘用户的需求再推,这是核心
如今的几个假设:(不必定真)
· 类似,买过A,可能还会买与A类似的A',基于此,才会找类似
· 搭配 是用户需求的补充
 
淘宝如今是,看过的就会推
其实这就是:类似法 和 搭配法 方法的PK
通过内部实验,发现:虽然搭配推荐看似好,可是对于转化率来讲,不如 传统的类似推荐
因此如今的淘宝仍是 以基于类似的方法为主
搭配推荐的思路
1. 基于模型的推荐:learning2rank
    使用待搭配item 的特征向量的融合(拼接,相加,笛卡尔积),而后输入 排序模型,获得分值
2. 能够用是关联规则,基于规则
 
阿里面试的问题,如今才有观点啊
· 推荐中类似度的计算方法
· 协同过滤推荐的基本思路
· 机器学习的通常流程
而这三个 你都没有 回答上来 【观点】
看待RNN 的角度
· 二叉树形状的 网络结构
· 各个不一样的门,其实就是:多个 feature map【观点】
推荐系统与产品
1. 增长推荐理由,会很大提升 卖出率
eg:
你的 5 个朋友有4个买了这个书
我知道你最近买了A,建议你买B,这个是A 的补
 
2. 一个app 着重作这两个点,推荐系统中的 新颖度(他们不知道的) 和 惊喜度(不类似但满意) 这两个 指标
若是这两个作得好,那么这个 app 会很快火起来
工业上的推荐系统
都是 多个 方法的 merge
word2vec
MF
CF
learning2rank
而不是单一的 一个模型的 综合
由于在意稳定性
推荐中的评价指标
RMSE 中文是均方根偏差
root mean square error
利用word2vec
1. 使用 用户的 行为序列,即 次次点击的 商品item 序列
而后 对item 进行 word2vec 尝试,而后将 每一个商品 vector 化
从而 基于第一类假设,能够有 类似的商品 来进行跑排序,以进行推荐
2. word2vec 自己已经体现了 序列的学习,即 next word
 
优势:
 解决的问题是 , CF找回不够,由于:
使用协同过滤的时候 每一个商品id,其实就是 太离散了,因此用 低维度向量表示每一个商品,那么 至关于降维
推荐系统选取的各个feature 的评价
与搜索引擎的关系
对搜索引擎的 两个角度的改善
1. QA,不返回页面,而是具体答案
2. 推荐系统,直接给出猜你想看的
 
因此 QA,推荐系统,CTR ,都依赖于 搜索引擎的原理
提升覆盖率
就是 防止马太效应
即 越热越推,越推越热 
提升多样性
就是:给用户更多的选择
推荐100件衬衫也是只能买一件 
对于打分的预处理须要注意:
每行去均值,再去类似度比较
去均值其实就是 由于有人 偏向高分低分,是为了消除用户的【评分尺度】 
item CF > user CF
工业界:通常用于 item Collaborative filtering 
由于:
1. 用户量> 商品量:好比 电影一共就几万部
2. 稳定度高:即两本书的类似度持久
两本书的类似度 今年 和 去年一半同样
而 user 的类似度会变化
商品关联
两个角度
1. 在电商领域有不少 同款但不彻底同样的商品,会当成两个item
因此须要提早 作好关联 
 其实就是下降稀疏性,合并类似的
2. 若是 A、B 用户不能计算类似度,可是 AC 能够,BC 能够,那么就能够间接获得 AB 的类似度
关于冷启动问题 的解决 
1.对于 新用户
   用户注册的时候就要提供信息,或者使用互动的方式进行 用户信息的获取
  社交数据 或者 标签数据
2. 对于新商品
   根据商品的属性,能够基于规则 给出与 其它商品的 类似度,而后再基于 item based CF 推荐
推荐系统的观点
input 一个 不满的矩阵
output 缺失的值
 
由于是矩阵,因此 才有不少与矩阵相关的操做
基于矩阵分解必需要正则化
由于要防止过拟合,不然 拟合出来 仍是 0
 
打分系统若是增长偏置的化,可能效果会好
关于矩阵分解,由于有打分体系,因此特别指出:要加上偏置
对于 每个 拟合的值
多加了 μ总体平均,和  user 与 item 的各自偏置
 
wordvec经验 通常上 300~ 500 维度才是好的
矩阵拟合的代码
#简单的张量分解进行打分和推荐
#要用到numpy模块
import numpy
 
#手写矩阵分解
#如今有不少很方便对高维矩阵作分解的package,好比libmf, svdfeature等
def matrix_factorization(R, P, Q, K, steps=5000, alpha=0.0002, beta=0.02):
    Q = Q.T
    for step in xrange(steps):
        for i in xrange(len(R)):
            for j in xrange(len(R[i])):
                if R[i][j] > 0:
                    eij = R[i][j] - numpy.dot(P[i,:],Q[:,j])
                    for k in xrange(K):
                        P[i][k] = P[i][k] + alpha * (2 * eij * Q[k][j] - beta * P[i][k])
                        Q[k][j] = Q[k][j] + alpha * (2 * eij * P[i][k] - beta * Q[k][j])
        eR = numpy.dot(P,Q)
        e = 0
        for i in xrange(len(R)):
            for j in xrange(len(R[i])):
                if R[i][j] > 0:
                    e = e + pow(R[i][j] - numpy.dot(P[i,:],Q[:,j]), 2)
                    for k in xrange(K):
                        e = e + (beta/2) * (pow(P[i][k],2) + pow(Q[k][j],2))
        if e < 0.001:
            break
    return P, Q.T
相关文章
相关标签/搜索