博主只是初学机器学习的新人一枚,这篇博客旨在分享一下吴恩达机器学习课程编程练习8的答案,同时也是相当于自己对这一章的内容做一个回顾,让自己理解的更加的透彻,理性讨论,不喜勿喷
本章主题:Anomaly Detection and Recommender Systems(异常检测和推荐系统)
1.异常检测
假设特征服从正态分布,通过计算整体概率判断是否小于某个值,从而判断是不是正常的。
estimateGaussian.m
%estimate parameters
mu = sum(X) / m;
m_add = zeros(n-1,n);
mu_tmp = [mu;m_add];
mu_tmp = ones(m,n) * mu_tmp;
sigma2 = sum((X - mu_tmp).^2) / m;
selectThreshold.m
yval_true = find(yval == 1);
yval_false = find(yval == 0);
p_true = find(pval <= epsilon);
p_false = find(pval > epsilon);
%actual class = 1 predicted class = 1
truePositive = size(intersect(yval_true,p_true),1);
%actual class = 0 predicted class = 1
falsePositive = size(intersect(yval_false,p_true),1);
%actual class = 1 predicted class = 0
falseNegative = size(intersect(yval_true,p_false),1);
precision = truePositive / (truePositive + falsePositive);
recall = truePositive / (truePositive + falseNegative);
F1 = 2*precision*recall / (precision + recall);
2.推荐系统
根据已有的信息来进行预测,有点类似于线性回归(或者说叫多元线性回归?)
cofiCostFunc.m
Program 1----for-loop
J = 0.5 * sum(sum(R.*((X*Theta'-Y).^2))) + (lambda/2)*(sum(sum(Theta.^2)) + sum(sum(X.^2)));
for i = 1:num_movies
idx = find(R(i,:) == 1);
Theta_temp = Theta(idx,:);
Y_temp = Y(i,idx);
A = X(i,:);
t = (X(i,:) * Theta_temp' - Y_temp);
X_grad(i,:) = (X(i,:) * Theta_temp' - Y_temp) * Theta_temp + lambda*X(i,:);
end
for i = 1:num_users
idx = find(R(:,i) == 1); %every for all movies
Theta_grad(i,:) = (X(idx,:)*Theta(i,:)' - Y(idx,i))' * X(idx,:) + lambda*Theta(i,:);
end
Program 2----vectorized
J = (1 / 2) * sum(sum(((X * Theta' - Y) .* R) .^ 2));
J = J + (lambda / 2) * sum(sum(Theta .^ 2)) + ...
(lambda / 2) * sum(sum(X .^ 2));
X_grad = ((X * Theta' - Y) .* R) * Theta + lambda * X;
Theta_grad = ((X * Theta' - Y) .* R)' * X + lambda * Theta;
以上
马上结束吴恩达机器学习课程学习了,因此一些理解的东西放到学完课程之后写一个大的总结,这里就不写了,只是放一下习题答案。