当前位置: 代码迷 >> 综合 >> Exercise 8:异常检测和推荐系统(Coursera-吴恩达Machine Learning编程作业)
  详细解决方案

Exercise 8:异常检测和推荐系统(Coursera-吴恩达Machine Learning编程作业)

热度:26   发布时间:2024-02-25 05:47:58.0

1 Anomaly detection

1.1 Gaussian distribution

高斯分布函数为
在这里插入图片描述
其中,μ\muμ为平均值(控制中心位置),σ2\sigma^2σ2为方差(控制分布展宽)。

1.2 Estimating parameters for a Gaussian

高斯分布函数中的参数由下式计算:
在这里插入图片描述
在这里插入图片描述
任务:完成estimateGaussian.m,实现高斯分布函数的参数计算。

输入:

  1. 数据矩阵X

输出:

  1. 平均值mu
  2. 方差sigma2

思路:按照公式即可。需要注意的是,MATLAB内置方差函数中的系数为1m?1\frac{1}{m-1}m?11?,而非1m\frac{1}{m}m1?

mu = mean(X);
sigma2 = var(X)*(m-1)/m;

完成后可见到下图所示的高斯函数等值线。
在这里插入图片描述

1.3 Selecting the threshold, ?\epsilon?

基于交叉验证数据集,我们可以选择合适的阈值?\epsilon?

  • F1值:F1=2×prec×recprec+recF_1=\frac{2×prec×rec}{prec+rec}F1?=prec+rec2×prec×rec?,该值可以有效地评价偏斜类数据的算法表现。
  • 准确率:prec=tptp+fpprec = \frac{tp}{tp+fp}prec=tp+fptp?
  • 召回率:rec=tptp+fnrec = \frac{tp}{tp+fn}rec=tp+fntp?
符号 表示 含义
tptptp 真阳(true positive) 算法分类为1,数据标签为1
fpfpfp 假阳(false positive) 算法分类为1,数据标签为0
tntntn 真阴(true negative) 算法分类为0,数据标签为0
fnfnfn 假阴(false negative) 算法分类为0,数据标签为1

任务:完成selectThreshold.m,实现阈值?\epsilon?的选择。

输入:

  1. yval,交叉验证数据集的标签
  2. pval,交叉验证数据集的概率

输出:

  1. bestEpsilon,最优的阈值?\epsilon?
  2. bestF1,最优的F1F_1F1?

思路:
epsilon以一定步长从pval的最小值到最大值进行遍历。每次循环中,依次计算以epsilon为阈值得到的cvPrediction(小于?\epsilon?为1), prec, recF1,保存最优的F1epsilon分别为bestF1bestEpsilon

stepsize = (max(pval) - min(pval)) / 1000;
for epsilon = min(pval):stepsize:max(pval)% ====================== YOUR CODE HERE ======================%该部分为需要完成的代码cvPrediction = zeros(size(yval));cvPrediction(pval < epsilon) = 1;tp = sum(cvPrediction == 1 & yval == 1);fp = sum(cvPrediction == 1 & yval == 0);fn = sum(cvPrediction == 0 & yval == 1);prec = tp / (tp + fp);rec = tp / (tp + fn);F1 = 2*prec*rec / (prec + rec);% =============================================================if F1 > bestF1bestF1 = F1;bestEpsilon = epsilon;end
end

在这里插入图片描述

2 Recommender Systems

2.1 Movie ratings dataset

该数据集有 nu=943n_u=943nu?=943 个用户, nm=1682n_m=1682nm?=1682 个电影评分(5分制)。
矩阵 YYYnum_movies×num_users)的元素为评分 y(i,j)y^{(i,j)}y(i,j)。矩阵RRR为0-1矩阵,其中R(i,j)=1R(i,j)=1R(i,j)=1代表用户 jjj 对电影 iii 有过评分,R(i,j)=0R(i,j)=0R(i,j)=0 代表用户 jjj 对电影 iii 无评分。

协同过滤算法的目的是预测那些没有被某些用户评价的电影的评分,即 R(i,j)=0R(i,j)=0R(i,j)=0 的情况。

X的第 iii 行表示第 iii 部电影的特征向量 x(i)x^{(i)}x(i)
Theta的第 jjj 行表示第 jjj 个用户的参数向量 θ(j)\theta^{(j)}θ(j)

2.2 Collaborative filtering learning algorithm

2.2.1 Collaborative filtering cost function

协同过滤损失函数为:
在这里插入图片描述

任务:完成cofiCostFunc.m,返回正确的损失J。注意,应当累积 R(i,j)=1R(i,j)=1R(i,j)=1 时用户 jjj 和电影 iii 的损失函数。

输入:

  1. params,储存XTheta矩阵的参数
  2. Y,电影评分矩阵
  3. R,是否评分矩阵
  4. num_movies,电影数
  5. num_features,特征数
  6. lambda,正规化参数

输出:

  1. J,代价函数
  2. grad,代价函数梯度
M = (X * Theta' - Y).^2;
J = sum(sum(R .* M)) / 2;

2.2.2 Collaborative filtering gradient

协同过滤损失函数梯度为:
在这里插入图片描述
任务:完成cofiCostFunc.m,返回正确的损失函数偏导数X_gradTheta_grad

X_grad = R.*(X * Theta' - Y) * Theta;
Theta_grad = (R.*(X * Theta' - Y))' * X;

2.2.3 Regularized cost function

正规化的协同过滤损失函数为:
在这里插入图片描述

2.2.4 Regularized gradient

正规化的协同过滤损失函数梯度为:
在这里插入图片描述

  相关解决方案