代码和作业说明下载
这次作业我们需要实现 Multi-class Classification and Neural Networks。
需要完成下列代码文件:
- lrCostFunction.m
- oneVsAll.m
- predictOneVsAll.m
- predict.m
lrCostFunction.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| function [J, grad] = lrCostFunction(theta, X, y, lambda) m = length(y); J = 0; grad = zeros(size(theta)); J = sum(-y .* log(sigmoid(X * theta)) - (1-y) .* log(1 - sigmoid(X * theta)))... / m + lambda * (theta(2:end)' * theta(2:end)) / (2 * m); grad(1) = X(:,1)' * (sigmoid(X * theta) - y) ./ m; grad(2:end) = (X(:, 2:end)' * (sigmoid(X * theta) - y) ./ m)... + (lambda / m) .* theta(2:end); grad = grad(:); end
|
oneVsAll.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| function [all_theta] = oneVsAll(X, y, num_labels, lambda) m = size(X, 1); n = size(X, 2); all_theta = zeros(num_labels, n + 1); X = [ones(m, 1) X]; initial_theta = zeros(n + 1, 1); options = optimset('GradObj', 'on', 'MaxIter', 50); temp_theta = []; for i=1:num_labels [theta] = fmincg(@(t)(lrCostFunction(t, X, (y == i), lambda)), initial_theta, options); temp_theta = [temp_theta; theta']; endfor
all_theta = temp_theta;
% =========================================================================
end
|
predictOneVsAll.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| function p = predictOneVsAll(all_theta, X) m = size(X, 1); num_labels = size(all_theta, 1); p = zeros(size(X, 1), 1); X = [ones(m, 1) X]; for i=1:m [val idx] = max(all_theta * X(i,:)'); p(i) = idx; endfor end
|
predict.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| function p = predict(Theta1, Theta2, X) m = size(X, 1); num_labels = size(Theta2, 1); p = zeros(size(X, 1), 1); X_temp = [ones(m, 1), X]; for i = 1:m h = [1; sigmoid(Theta1 * X_temp(i,:)')]; [val idx] = max(sigmoid(Theta2 * h)); p(i) = idx; endfor
% =========================================================================
end
|