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
|