第9周:异常检测与推荐系统
课程简介
高斯分布异常检测、协同过滤、矩阵分解、基于内容的推荐。
🎬 本课程视频:吴恩达机器学习 (2014) — 交互式学习笔记
一、异常检测
1.1 什么是异常检测
异常检测(Anomaly Detection)是识别异常数据点的技术。异常点在统计上显著偏离大多数样本的模式。
典型应用:
- 欺诈检测:识别与正常消费模式不符的银行卡交易
- 制造业质检:识别有缺陷的工业产品
- 服务器监控:在数据中心中检测异常的服务器行为
- 入侵检测:检测不正常的网络流量模式
1.2 基于高斯分布的异常检测
异常检测的核心假设是:正常数据服从某个已知的概率分布(通常假设为高斯/正态分布),而异常数据位于概率密度极低的区域。
高斯分布(正态分布):
$$p(x; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$$
参数估计:
$$\mu_j = \frac{1}{m} \sum_{i=1}^{m} x_j^{(i)}$$
$$\sigma_j^2 = \frac{1}{m} \sum_{i=1}^{m} (x_j^{(i)} - \mu_j)^2$$
异常检测算法:
1. 选择可能指示异常行为的特征 x_j
2. 计算每个特征的 μ_j 和 σ_j²
3. 对于新样本 x,计算其联合概率密度:
$$p(x) = \prod_{j=1}^{n} p(x_j; \mu_j, \sigma_j^2)$$
- 如果 p(x) < ε,判定为异常
1.3 如何开发与评估异常检测系统
如果有带标签的数据(已知哪些是异常),可以进行数值评估:
1. 使用正常数据(y=0)拟合高斯参数 μ 和 σ²
2. 在验证集上评估模型性能——使用精确率、召回率和 F1 分数
3. 尝试不同的 ε 值,选择在验证集上 F1 分数最高的 ε
1.4 异常检测 vs 监督学习
| 特性 | 异常检测 | 监督学习 |
|---|---|---|
| 正例数量 | 极少(通常 < 20%) | 通常较多 |
| 异常类型 | 多变,可能出现新模式 | 固定类别 |
| 适用场景 | 欺诈检测、制造质检 | 垃圾邮件、疾病诊断 |
Andrew Ng 的判断标准:如果异常样本非常少(1-20 例)且异常类型不可预测——用异常检测。如果有足够多的正例和负例且异常类型相对固定——用监督学习。
1.5 特征选择与转换
异常检测的效果高度依赖于特征的选择。如果数据的分布不是高斯分布,可以将数据变换为更接近高斯分布。
常用变换:取对数、开平方、取倒数等。误差分析技巧:在验证集上分析被错误分类的样本,看哪些异常被漏掉了——分析这些样本的特征,开发新的特征来捕捉这些异常模式。
二、推荐系统
2.1 问题形式化
推荐系统是机器学习在商业领域最成功的应用之一。从 Amazon 的产品推荐到 Netflix 的电影推荐、从 YouTube 的视频推荐到 TikTok 的 Feed——推荐系统无处不在。
问题设定:
- n_u:用户数量
- n_m:商品/电影数量
- r(i, j) = 1:用户 j 已经评过电影 i
- y^{(i,j)}:用户 j 对电影 i 的评分
2.2 基于内容的推荐
假设每部电影有特征向量 x——例如 x₁ 代表浪漫程度,x₂ 代表动作程度。
对每个用户 j,学习参数 θ^{(j)}。用户 j 对电影 i 的预测评分为:
$$(\theta^{(j)})^T x^{(i)}$$
可以看做是一个线性回归问题——每个用户有一个线性回归模型,使用商品特征 x 来预测评分。
问题是:在大多数推荐系统中,我们没有电影的特征——无法人工定义每部电影有多浪漫或多动作。
2.3 协同过滤
协同过滤(Collaborative Filtering)解决了特征未知的问题。它的核心思想:多个用户的评分数据可以相互帮助——如果用户 A 和用户 B 对多部电影的评分相似,那么他们对新电影的评分也可能相似。
协同过滤的核心洞察:我们既不知道 x 也不知道 θ,但我们可以同时学习它们!这就是协同过滤算法的精髓——同时优化。
2.4 协同过滤算法
- 将 x 和 θ 初始化为小的随机值
- 最小化联合代价函数:
$$J = \frac{1}{2} \sum_{(i,j):r(i,j)=1} ((\theta^{(j)})^T x^{(i)} - y^{(i,j)})^2 + \frac{\lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^{n} (x_k^{(i)})^2 + \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n} (\theta_k^{(j)})^2$$
- 对每个用户 j,对每个电影 i 预测评分:θ^{(j)ᵀ} x^{(i)}
关键点:这个代价函数非凸——但实践中的梯度下降通常能找到好的局部最优。
2.5 均值归一化
如果有一个新用户没有对任何电影评分,他的参数 θ 将只受到正则化项的影响——学习到 θ = [0,0]——对所有电影的预测评分都为零。
解决方案:对评分矩阵 Y 进行均值归一化。计算每部电影的评分均值 μ_i,用 Y_i - μ_i 代替 Y_i 进行协同过滤。预测时:θ^{(j)ᵀ} x^{(i)} + μ_i。
对于新用户:预测评分 = μ_i(即该电影的平均评分)——这是合理的新用户默认推荐。
三、推荐系统的价值
推荐系统是机器学习在商业中创造价值最大的应用之一。Amazon 报告称 35% 的销售额来自推荐;Netflix 估计推荐系统每年节省 10 亿美元的订阅取消成本。
第 9 周我们学习了两个非常实用的算法:异常检测用于识别罕见事件(欺诈、故障),推荐系统用于预测用户偏好。这两个算法的共同点是它们都能在无标签或有稀疏标签的数据上工作——这正是现实世界中最常见的数据形式。
异常检测的多元高斯分布
前面介绍的异常检测假设特征独立——将各特征的高斯概率密度直接相乘。当特征之间存在相关性时,可以使用多元高斯分布:
$$p(x; \mu, \Sigma) = \frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}} \exp\left(-\frac{1}{2}(x-\mu)^T \Sigma^{-1} (x-\mu)\right)$$
其中 Σ 是协方差矩阵。多元高斯分布可以自动捕捉特征之间的相关性——例如 CPU 负载高时内存使用通常也会高。
多元高斯分布的优缺点:
- 优点:自动捕捉特征相关性
- 缺点:需要计算 Σ⁻¹(O(n³)),需要 m > n 才能保证 Σ 可逆
在实践中,如果特征数量不大(< 100),且特征之间有明显的相关性,可以使用多元高斯分布。否则,使用独立高斯分布的乘积通常就足够了。
协同过滤的详细推导
协同过滤的梯度计算:
对于每个用户 j 的参数 θ^{(j)},梯度为:
$$\frac{\partial J}{\partial \theta_k^{(j)}} = \sum_{i: r(i,j)=1} ((\theta^{(j)})^T x^{(i)} - y^{(i,j)}) x_k^{(i)} + \lambda \theta_k^{(j)}$$
对于每个电影 i 的特征 x^{(i)},梯度为:
$$\frac{\partial J}{\partial x_k^{(i)}} = \sum_{j: r(i,j)=1} ((\theta^{(j)})^T x^{(i)} - y^{(i,j)}) \theta_k^{(j)} + \lambda x_k^{(i)}$$
这两个梯度公式是对称的——这正是协同过滤"同时学习特征和参数"的数学体现。
推荐系统评估指标
推荐系统的常用评估指标包括:
- 均方根误差(RMSE):√(平均(预测评分 - 真实评分)²)
- 精准率@K:前 K 个推荐中用户实际喜欢的比例
- 召回率@K:用户喜欢的物品中出现在前 K 个推荐中的比例
- NDCG:考虑推荐顺序的加权指标
在实际产品中,离线指标(如 RMSE)和在线指标(如点击率、转化率)可能不一致——最好的离线模型不一定带来最好的用户体验。因此,A/B 测试是推荐系统评估的黄金标准。
推荐系统的冷启动问题
冷启动(Cold Start)是推荐系统的经典挑战:
1. 新用户冷启动:新用户没有历史行为
2. 新物品冷启动:新物品没有用户评分
解决方案:
- 新用户:使用人口统计学信息(年龄、性别、地域)做初步推荐
- 新物品:使用基于内容的推荐(分析物品的属性特征)
- 混合方法:结合协同过滤和基于内容的推荐
特征选择与高斯变换
异常检测的效果高度依赖于特征的质量。好的特征能使异常明显地区别于正常数据,而不好的特征则难以区分正常和异常。
特征选择的原则:
1. 选择在正常样本中分布集中、在异常样本中有明显偏离的特征
2. 将非高斯分布的特征进行变换:log(x)、x^(1/3)、Box-Cox 变换
3. 构造组合特征:如 CPU 负载与网络流量的比值
特征评估方法:在验证集上计算每个特征对异常检测准确率的贡献。
推荐系统的矩阵分解视角
协同过滤的矩阵分解将评分矩阵 R 分解为两个低秩矩阵的乘积:
R ≈ X · Θᵀ
其中 X 是物品特征矩阵(每行对应一个物品的特征向量),Θ 是用户偏好矩阵(每行对应一个用户的偏好向量)。
矩阵分解的好处:
- 大幅减少了需要学习的参数数量
- 自动学习出"隐式特征"(用户和物品的低维表示)
- 这些低维表示可以用于其他任务(如物品相似度计算、用户聚类)
推荐系统中的探索与利用
推荐系统面临一个经典的权衡:是推荐用户已知喜欢的(利用),还是推荐用户可能也喜欢但不确定的(探索)?
ε-greedy 策略:以 ε 的概率随机推荐新物品(探索),以 1-ε 的概率推荐已知最优物品(利用)。ε 通常在 0.01 到 0.1 之间。
上置信界(UCB)策略:对每个物品维护一个置信区间,推荐置信区间上界最高的物品——那些不确定性大的新物品有机会被推荐。
Thompson 采样:从每个物品的收益分布中采样,选择采样值最高的物品。这种方法在理论上和实践上都表现优秀。
推荐系统的评价体系
推荐系统的评价不仅包括预测准确度,还包括:
- 多样性:推荐结果是否覆盖了广泛的物品类型
- 新颖性:是否推荐了用户可能不知道的新物品
- 用户满意度:通过用户停留时间、点击率、留存率等衡量
- 业务指标:转化率、客单价、用户生命周期价值
在实际的商业推荐系统中,在线指标通常比离线指标更重要。一个预测误差更小的模型,如果推荐的物品用户不感兴趣,也是没有价值的。
异常检测的实践案例
以服务器监控为例,异常检测可以监控多项系统指标:CPU负载、内存使用率、网络带宽、磁盘I/O、请求响应时间等。当其中任何一项指标显著偏离正常范围时,系统应该发出告警。
在实践中,构造好的特征比选择复杂的算法更重要。对于服务器监控,你可以构造以下特征:
- CPU负载与内存使用率的比值(衡量是否存在内存泄漏)
- 请求错误率的变化率(斜率)
- 过去5分钟的平均响应时间与过去1小时的平均响应时间的比值(检测突然变化)
- 当前并发连接数与同时段历史均值的差值(检测流量异常)
协同过滤的向量化实现
协同过滤的向量化实现可以大幅提升计算效率。将用户评分矩阵表示为 Y(m × n),其中 m 是电影数量,n 是用户数量。矩阵分解将 Y 近似为 X × Θᵀ,其中 X(m × k)是电影特征矩阵,Θ(n × k)是用户偏好矩阵。
向量化后的代价函数:
J = (1/2) Σ[(XΘᵀ - Y) ⊙ R]² + (λ/2) ΣX² + (λ/2) ΣΘ²
其中 R 是指示矩阵——只对有评分的项计算误差。这种向量化实现可以利用GPU加速,使训练速度提升数百倍。
低秩矩阵分解的实际应用
矩阵分解不仅用于评分预测,还可以用于计算物品相似度。在两个电影的隐特征向量 xᵢ 和 xⱼ 之间,它们的相似度可以用余弦相似度衡量——cos(xᵢ, xⱼ) = xᵢᵀxⱼ / (||xᵢ||·||xⱼ||)。这可以用来构建"看过这部电影的人还喜欢"的推荐功能。
推荐系统的长尾问题
推荐系统面临的一个核心挑战是长尾问题——大多数物品只有很少的用户评分。解决长尾问题的方法包括:使用正则化防止过拟合、利用内容信息补充协同过滤、引入流行度偏置作为基线预测等。
延伸阅读
- 📺 B 站播放列表:吴恩达机器学习 (2014) — 交互式学习笔记
- 📚 更多学习资源,请访问 deeplearning.ai 官网