吴恩达机器学习系列课程作业ex3 matlab实现

目录

  • Matlab实现:
    • lrCostFunction.m
    • oneVsAll.m
    • predictOneVsAll.m
    • predict.m

Matlab实现:

lrCostFunction.m

function [J, grad] = lrCostFunction(theta, X, y, lambda)

m = length(y); % number of training examples

tmp = theta;
tmp(1) = 0;
J = -(y'*log(sigmoid(X*theta)) + (1-y)'*log(1-sigmoid(X*theta)))* 1/m + sum(tmp.^2)*lambda/(2*m);
grad = X'*(sigmoid(X*theta) - y) * 1/m + tmp*lambda/m;

grad = grad(:);

end

oneVsAll.m

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];

for c = 1:num_labels
    initial_theta = zeros(n + 1, 1);
    options = optimset('GradObj', 'on', 'MaxIter', 50);
    [theta] = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)),initial_theta, options);
    all_theta(c,:) = theta';

end

predictOneVsAll.m

function p = predictOneVsAll(all_theta, X)

m = size(X, 1);
p = zeros(size(X, 1), 1);

X = [ones(m, 1) X];

[~,p] = max(sigmoid(X*all_theta'),[],2);

end

predict.m

function p = predict(Theta1, Theta2, X)

m = size(X, 1);
a1 = [ones(m, 1) X];

p = zeros(size(X, 1), 1);

a2 = sigmoid(a1*Theta1');
a2 = [ones(m,1) a2];
a3 = sigmoid(a2*Theta2');
[~,p] = max(a3,[],2);

end

你可能感兴趣的:(matlab,机器学习,开发语言)