1 基于人口统计学的推荐算法
1.1 用户画像
2 基于内容的推荐算法
2.1 相似度计算–余弦相似度
2.2 物品标签方式
2.3 基于内容推荐系统的高层次结构
2.4 特征工程
2.4.1 数值型特征处理
a.归一化
b.离散化
2.4.2 类别型特征处理
2.4.3 时间型特征处理
2.4.4 统计型特征处理
2.5 推荐系统常见反馈数据
2.6 基于UGC的推荐
3基于协同过滤的推荐算法
3.1 算法种类
3.2 与CB的区别
但无法解决冷启动问题
3.3 基于近邻的协同过滤
3.3.1 User-CF
3.3.2 Item-CF
用户较多时,物品较稳定,所以用item-cf
物品较多时,用户较稳定,所以用user-cf
3.3.3 两者比较
3.4 协同过滤优缺点
3.5 基于模型的协同过滤
3.6基于近邻V.S.基于模型
3.7 隐语义模型LMF
3.7.1 LMF降维方法—矩阵因子分解
3.7.2 模型求解–损失函数
3.7.3 模型求解算法–ALS
#0.引入依赖
import numpy as np
import pandas as pd
#1.数据准备
]
# 评分矩阵R
R = np.array([[4,0,2,0,1],
[0,2,3,0,0],
[1,0,2,4,0],
[5,0,0,3,1],
[0,0,1,5,1],
[0,3,2,4,1]])
len(R[0])
#2.算法实现
"""
@输入参数:
R:M*N的评分矩阵
K:特征向量纬度
max_iter:最大迭代次数
alpha:步长
lamda:正则化系数
@输出:
分解之后的P,Q
P:初始化用户特征矩阵M*K
Q:初始化物品特征矩阵N*K
"""
# 给定超参数
K = 2
max_iter=5000
alpha = 0.002
lamda = 0.004
# 核心算法
def LFM_grad_desc(R,K=2,max_iter=1000,alpha=0.001,lamda=0.002):
M=len(R)
N=len(R[0])
#P,Q的初始值,随机生成
P=np.random.rand(M,K)
Q=np.random.rand(N,K)
Q=Q.T
# 开始迭代
for step in range(max_iter):
#对所有的用户u、物品i进行遍历
for u in range(M):
for i in range(N):
#对于每一个大于0的评分,求出预测评分误差
if(R[u][i])>0:
eui=np.dot(P[u,:],Q[:,i])-R[u][i]
# 代入公式,按照梯度下降算法更新当前Pu,Qi
for k in range(K):
P[u][k]=P[u][k]-alpha*(2*eui*Q[k][i]+2*lamda*P[u][k])
Q[k][i]=Q[k][i]-alpha*(2*eui*P[u][k]+2*lamda*Q[k][i])
# u,i遍历完成,所有特征向量更新完成,可以得到P,Q,可以计算预测评分矩阵
predR=np.dot(P,Q)
#计算当前损失函数
cost =0
for u in range(M):
for i in range(N):
if R[u][i]>0:
cost+=(np.dot(P[u,:],Q[:,i])-R[u][i])**2
#加上正则化项
for k in range(K):
cost += lamda *(P[u][k]**2+Q[k][i]**2)
if cost<0.001:
break
return P,Q.T,cost
# 3.测试
P,Q,cost = LFM_grad_desc(R,K,max_iter,alpha,lamda)
print(P)
print(Q)
print(cost)
predR = P.dot(Q.T)
print(R)
predR