一. 第二周编程作业: Linear Regression
1.computeCost.m
- 公式:
- 代码:
%计算成本J
tmp = (X * theta - y) .^ 2;
J = 1 / (2 * m) * sum(tmp);
2.gradientDescent.m
- 公式:
- 代码:
%计算梯度下降
tmp = X' * (X * theta - y);
theta = theta - alpha * 1/m * tmp;
3.featureNormalize.m
- 代码:
%特征归一化:(X - 均值)/标准差
mu = mean(X); %均值
sigma = std(X); %标准差
tmp = bsxfun(@minus, X, mu);
X_norm = bsxfun(@rdivide, tmp, sigma);
4.computeCostMulti.m
注:应用矩阵计算同computeCost.m
5.gradientDescentMulti.m
注:应用矩阵计算同gradientDescent.m
6.normalEqn.m
- 公式:
- 代码:
% 用正规方程计算theta
theta = pinv(X' * X) * X' * y;
二.第三周编程作业: Logistic Regression
1.sigmoid.m
- 公式:
- 代码:
%sigmoid函数
g = 1 ./ (1 + e .^ (-z));
2.costFunction.m
- 公式:
- 代码:
%成本J
tmp = sigmoid(X * theta);
J = 1 / m * sum(-y' * log(tmp) - (1 - y)' * log(1 - tmp));
%梯度grad
tmp = X' * (sigmoid(X * theta) - y);
grad = (1 / m) * tmp;
3.predict.m
- 代码:
%将大于等于0.5的预测值置为1
p(find(sigmoid(X * theta) >= 0.5)) = 1;
4.costFunctionReg.m
- 公式:
for j = 0:
for j >= 1:
- 代码:
tmp = sigmoid(X * theta);
%成本J
J = 1 / m * sum(-y' * log(tmp) - (1 - y)' * log(1 - tmp)) + ...
lambda/(2 * m) * sum(theta([2:length(theta)], :) .^ 2);
%梯度grad;第1项不惩罚
grad = (1 / m) * X' * (tmp - y) + lambda * theta / m;
grad(1) = (1 / m) * X(:, 1)' * (tmp - y);
三.第四周编程作业: Multi-class Classification and Neural Networks
1.lrCostFunction.m
- 公式:
for j = 0:
for j >= 1:
- 代码:
tmp = sigmoid(X * theta);
%成本J
J = 1 / m * sum(-y' * log(tmp) - (1 - y)' * log(1 - tmp)) + ...
lambda/(2 * m) * sum(theta([2:length(theta)], :) .^ 2);
%梯度grad;第1项不惩罚
grad = (1 / m) * X' * (tmp - y) + lambda * theta / m;
grad(1) = (1 / m) * X(:, 1)' * (tmp - y);
2.oneVsAll.m
- 代码:
%应用fmincg函数
initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);
J = 0;
for c = 1:num_labels
[theta] = ...
fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
initial_theta, options);
all_theta(c,:) = theta';
end
3.predictOneVsAll.m
- 代码:
for r = 1:m,
[maxnum p(r)] = max(sigmoid(X(r,:) * all_theta'), [], 2);
end
4.predict.m
- 代码:
X = [ones(m, 1) X];
for r = 1:m,
tmp1 = sigmoid(X(r,:) * Theta1');
tmp1 = [ones(1,1) tmp1];
tmp2 = sigmoid(tmp1 * Theta2');
[maxnum p(r)] = max(tmp2, [], 2);
end
四.第五周编程作业: Neural Network Learning
1.nnCostFunction.m
- 公式:
成本J:
反向传播:
梯度:
for j = 0:
for j >= 1:
- 代码:
%初始化参数
X = [ones(m, 1) X]; %加x0 = 1
y = eye(num_labels, num_labels)(y, :); %把y值转换为向量num_labels X m
%计算a(2)
z2 = X * Theta1';
a2 = [ones(m, 1) sigmoid(z2)];
%计算a(3)
a3 = sigmoid(a2 * Theta2');
%成本J
tmp1 = sum(sum(-y .* log(a3) - (1 - y) .* log(1 - a3)));
tmp2 = sum(sum(Theta1(:,2 : end) .^ 2)) + ...
sum(sum(Theta2(:,2 : end) .^ 2)); %正则化,第一个Theta不惩罚
J = 1 / m * tmp1 + lambda / (2 * m) * tmp2;
%反向传播,梯度grad
delta3 = (a3 - y);
delta2 = delta3 * Theta2(:, 2 : end) .* sigmoidGradient(z2);
Theta1_grad = 1 / m * (delta2' * X);
Theta1_grad(:,2 : end) = Theta1_grad(:,2 : end) + (lambda / m * Theta1(:,2 : end));
Theta2_grad = 1 / m * (delta3' * a2);
Theta2_grad(:,2 : end) = Theta2_grad(:,2 : end) + (lambda / m * Theta2(:,2 : end));
2.sigmoidGradient.m
- 公式:
- 代码:
g = sigmoid(z) .* (1 - sigmoid(z));