Stanford 机器学习-Regularization(Week 3)-代码

NG机器学习公开课

7-Regularization

所有的代码整个到一个.m文件里了。

clear; close all; clc
%本次测试集使用的是训练集,预测训练集的准确度
function p = predict(theta, X)
    m = size(X,1);
    p = zeros(m, 1);
    p = sigmoid(X*theta) >= 0.5;
end

function plotData(X, y)
%创建新的图像
figure;
hold on;
%pos中保存的是y=1的在原矩阵的行值
pos = find(y==1); neg = find(y==0);
%X(pos, 1)保存的是y结果为1的所有的第一个属性的值
plot(X(pos, 1), X(pos, 2), 'k+', 'LineWidth', 2, 'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko',  'MarkerSize', 7);
hold off;
end

%sigmoid函数
function g = sigmoid(z)

g = zeros(size(z));
%g = (1 + e.^(-1.*z)).^(-1);
g = 1./(1+exp(-z));
end
%logistic计算损失函数的函数
function [J, grad] = costFunction(theta, X, y)
m = length(y);
J = 0;
grad = zeros(size(theta));
hx = sigmoid(X*theta);
J = -1/m*(y'*log(hx) + ((1-y)'*log(1-hx)));
grad = 1/m*X'*(hx-y);

end


function out = mapFeature(X1, X2)
%返回一个具有更多特征的特征数组
%将两个特征变为多个特征
degree = 6;
out = ones(size(X1(:, 1)));
for i = 1:degree
    for h = 0:i
        out(:, end+1) = (X1.^(i-j)).*(X2.^j);
    end
end

end


function plotDecisionBoundary(theta, X, y)

plotData(X(:,2:3), y);
hold on;
if size(X,2) <= 3

    plot_x = [min(X(:, 2))-2, max(X(:, 2))+2];
    plot_y = [min(X(:, 3))-2, max(X(:, 3))+2];
    %根据两个点画出一条线
    plot(plot_x, plot_y);
    legend('admitted', 'Not admitted', 'Decision Boundary');
    axis([30,100,30,100]);
else
    u = linspace(-1, 1.5, 50);
    v = linspace(-1, 1.5, 50);
    z = zeros(length(u), length(v));
    for i = 1:length(u)
        for j = 1:length(v)
            z(i,j) = mapFeature(u(i), v(j))*theta;
        end
    end
    z = z';
    contour(u, v, z, [0,0], 'LineWidth', 2);
end
hold off    
end


%主程序

data = load('ex2data1.txt');
X = data(:, [1,2]); y = data(:, 3);
plotData(X, y);
hold on;
xlabel('Exam 1 score');
ylabel('Exam 2 score');
%legend函数表示添加图例
legend('Admitted', 'Not admitted');
hold off

%实现logistic regression的cost function和gradient

[m, n] = size(X);
X = [ones(m, 1) X];
initial_theta = zeros(n+1, 1);
[cost, grad] = costFunction(initial_theta, X, y);

%using fminunc进行优化,首先设置优化参数,然后调用优化函数
options = optimset('GradObj', 'on', 'MaxIter','400');
[theta, cost] = fminunc(@(t)(costFunction(t,X,y)), initial_theta, options);
plotDecisionBoundary(theta, X, y);
hold on;
xlabel('Exam 1 socre')
ylabel('Exam 2 score')
legend('admitted', 'not admitted')
hold off

prob = sigmoid([1,45,85]*theta);
fprintf('the pro is %f\n' ,prob);
p = predict(theta, X);
fprintf('Train Accuracy: %f\n', mean(double(p == y)) * 100);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值