推荐系统的算法基础
1.数学基础
1.1 线性代数
- 向量点积
点积的定义:
A ⋅ B = ∑ i = 1 n a i b i A·B= \displaystyle \sum_{i=1}^n a_ib_i A⋅B=i=1∑naibi
点积的几何意义是A和B的模乘以二者的夹角余弦函数
点积的意义就是测量两个向量同向的程度
-
余弦相似度
c o s θ = A ⋅ B ∣ ∣ A ∣ ∣ × ∣ ∣ B ∣ ∣ cos\theta = {A·B \over ||A|| \times||B||} cosθ=∣∣A∣∣×∣∣B∣∣A⋅B
余弦相似度的取值范围为[-1,1],值越大表示越相似。 -
向量叉乘
在三维几何中,向量a和向量b的叉乘结果是一个向量,其实为法向量,该向量垂直于a向量和b向量构成的平面。
向量叉乘的意义就是测量两个向量的垂直程度。 -
矩阵乘法
-
矩阵点乘
-
内积/外积
- 内积(Inner Product) 是向量中对应位置的元素相乘,得到相同维度的向量。
- 外积(outer Product)
u ⨂ v = u v T = [ u 1 u 2 u 3 u 4 ] [ v 1 v 2 v 3 ] u\bigotimes v = uv^T = \left[ \begin{matrix} u_1 \\ u_2 \\ u_3 \\ u_4 \end{matrix} \right]\left[ \begin{matrix} v_1 & v_2 & v_3 \end{matrix} \right] u⨂v=uvT=⎣⎢⎢⎡u1u2u3u4⎦⎥⎥⎤[v1v2v3]
1.2 概率与统计
- 条件概率
P ( B ∣ A ) = P ( A B ) / P ( A ) P(B|A)= P(AB)/P(A) P(B∣A)=P(AB)/P(A)
- 联合概率
多个事件同时发生的概率,联合概率公式:
P ( A B ) = P ( A ) × P ( B ∣ A ) P(AB)=P(A)\times P(B|A) P(AB)=P(A)×P(B∣A)
-
边缘概率
单个事件的概率被称为边缘概率 -
极大似然估计
极大似然估计提供了一种给定观察数据来评估模型参数的方法,即“模型已定,参数未知”。通过若干次实验,观察其结果,利用实验结果得到某个能够使样本出现的概率最大的参数值,则称其为极大似然估计。 -
分布函数
- 0-1分布
- 二项分布
- 泊松分布
- 几何分布
- 均匀分布
- 指数分布
- 正态分布
1.3 损失函数
损失函数(Loss Function)用于估计模型的预测值$f(x)$
与真实值 Y Y Y的不一致程度,它是一个非副实值函数,通常使用 L ( Y , f ( x ) L(Y,f(x) L(Y,f(x)来表示。损失函数越小,模型的健壮性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数的重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下这样:
θ ∗ = a r g m i n 1 N ∑ i = 1 N L ( y i , f ( x i ; θ i ) ) + λ Φ ( θ ) \theta ^* = argmin{1\over N} \displaystyle \sum_{i=1}^N L(y_i,f(x_i;\theta_i))+\lambda \Phi(\theta) θ∗=argminN1i=1∑NL(yi,f(xi;θi))+λΦ(θ)
- 均方损失
最小二乘法是一种线性回归方法,将回归问题转化为凸优化问题。最小二乘法的基本原理是,最优拟合曲线应该使所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。
L ( Y , f ( x ) ) = ∑ N ( Y − f ( x ) ) 2 L(Y,f(x))=\sum_N (Y-f(x))^2 L(Y,f(x))=N∑(Y−f(x))2
-
log对数损失函数
逻辑回归的损失函数就是对数损失函数。 -
指数损失函数
AdaBoost就是使用指数损失函数。指数损失函数的标准形式如下:
L ( Y , f ( x ) ) = e x p [ − y f ( x ) ] L(Y,f(x))=exp[-yf(x)] L(Y,f(x))=exp[−yf(x)]
1.4 优化方法
优化问题指的是,给定目标函数 L ( Y , f ( x ) ) L(Y,f(x)) L(Y,f(x)),需要找到一组参数 X X X,使得 L ( Y , f ( x ) ) L(Y,f(x)) L(Y,f(x))的值最小。常见的优化方法主要包含两类:梯度法和牛顿法。
-
SGD
-
动量
-
Nesterov动量
-
AdaGrad
-
Adam
-
L-BFGS
1.5 评价方法
- 混淆矩阵
\ | 正类P | 负类n |
---|---|---|
正类P | TP | FP |
负类n | FN | TN |
-
根据混淆矩阵可计算以下分类指标:
-
精确率 precision = TP/(TP+FP)
模型判断为正的所有样本中有多少是真正的正样本 -
召回率 recall = TP/P
真正的正样本被预测准确的比例 -
准确率 accuracy= (TP+TN)/(P+N))
预测正负样本的准确比例 -
综合评价指标 F-Measure
F = ( α 2 + 1 ) P × R α 2 ( P + R ) F= {(\alpha^2+1)P\times R \over \alpha^2 (P+R)} F=α2(P+R)(α2+1)P×R
α = 1 \alpha = 1 α=1时,就是 F 1 F_1 F1,当 F 1 F_1 F1分数较高时则说明实验方法比较有效。
-
-
ROC曲线
平面的横坐标是False Positive Rate(FPR),纵坐标是True Positive Rate(TPR)。
AUC的值就是处于ROC曲线下方的那部分的面积。通常AUC的值介于0.5到1.0之间,较大的AUC值代表了较好的性能。
ROC曲线最理想的情况就是,按照Score值降序排列样本,TPR值从0开始逐步增加到1.0,而FPR值始终保持0,即前面都是预测为正样本且都是正类样本;而TPR为1.0后,后面的FPR从0开始逐步增加到1.0,而TPR保持1.0,即后面都是预测为负样本且是负类样本,最终该ROC曲线下的面积就是单位面积1,所以AUC为1。
ROC曲线最糟糕的情况就是,ROC曲线是从0到1的一条直线,即FPR和TPR在每次划分时都相等,这时ROC曲线下的面积就是0.5,AUC即为0.5。
2.推荐系统介绍
- 召回模型常见算法
算法类型 | 常见算法 | 算法特点 |
---|---|---|
内容相似 | word2vec | 挖掘相似物品 |
LDA | ||
FastText | ||
LSF-SCNN | ||
LSTM | ||
行为相似 | ItemCF | 挖掘相似用户或者行为的物品 |
UserCF | ||
关联规则 | ||
深度学习 | DNN | 挖掘用户可能感兴趣的物品 |
- 排序模型常见算法
算法类型 | 常见算法 | 算法特点 |
---|---|---|
线性模型 | LR | "刀耕火种" |
FM | ||
特征交叉+LR/FM | ||
树模型 | 决策树 | 自动特征交叉 |
随机森林 | ||
GBDT | ||
XGBoost | ||
GBDT+LR | ||
集成学习 | 树模型集成学习 | “十八般武艺” |
GCForest | ||
非线性模型 | DNN | “记忆与泛化” |
Wide&Deep | ||
FNN | ||
PNN | ||
DeepFM | ||
NFM | ||
AFM | ||
DCN | ||
DIN |
3.推荐算法工具
3.1 Sklearn
3.1.1 SKlearn介绍
- 分类
- 线性
- 决策树
- SVM
- KNN
- 朴素贝叶斯
- 集成分类算法:
- 随机森林
- AdaBoost
- GradientBoosting
- Bagging
- ExtraTrees
- 回归
- 线性
- 决策树
- SVM
- KNN
- 朴素贝叶斯
- 集成回归算法:
- 随机森林
- AdaBoost
- GradientBoosting
- Bagging
- ExtraTrees
- 聚类
- K-means
- 层次聚类
- DBSCAN
- 降维
- LDA
- PC
3.1.1 SKlearn建模流程
- 数据集
- 数据预处理
- 选择模型并训练
- 模型评分
- 模型的保存与恢复
3.2 Spark MLlib
3.3 Tensorflow
3.4 Notebook介绍
- Zeppelin Notebook
常用于Hive和Spark数据分析任务
- Jupyter Notebook
常用于Python和Tensorflow数据分析任务