吴恩达机器学习 逻辑回归作业 正则化逻辑回归 决策边界绘制

观察原始数据分布

function plotData(X,y)

figure;
%一种类别一种画法 

one=find(y==1)
zero=find(y==0)%返回类别为0的下标

plot(X(one,1),X(one,2),'rx','MarkerSize',10);
hold on;
plot(X(zero,1),X(zero,2),'ro','MarkerFaceColor','y','MarkerSize',10);%填色操作
end

在这里插入图片描述
计算代价函数,求导

function g = sigmoid( z )

g=1./(1+exp(-z));%因为z是一个矩阵 除法运算不能将矩阵作为分母要./ 加法可以 代表每个元素加

end

function [J grad] = costFunction(theta, X, y);
m=length(y);
grad=zeros(size(theta));%返回倒数
J=0;
J=-(  y'*log(sigmoid(X*theta))+(1-y)'*log(1-sigmoid(X*theta))  )/m;
%sigmoid的结果是m*1矩阵 X是m*3矩阵 grad是3*1 
grad=X'*(sigmoid(X*theta)-y)/m;
end


正则化
1.两个特征映射为多个特征

function X = mapFeature(X1, X2)

degree=6;%最高次为6次 
X=ones(size(X1(:,1)));
for i=1:degree
    for j=0:i
        X(:,end+1)=(X1.^(i-j)).*(X2.^j);%11828列 end+1在末列递增
    end
end
end

2.正则化代价函数

function [J, grad] = costFunctionReg(theta, X, y, lambda)
m=length(y);
J=0;
grad=zeros(size(theta));%指定大小 后面用end
zhengzexiang= (lambda/(2*m))*sum(theta(2:end).^2); %theta0不算 
J=-(y'*log(sigmoid(X*theta))+(1-y)'*log(1-sigmoid(X*theta)))/m+ zhengzexiang;
grad(1,1)=X(:,1)'*(sigmoid(X*theta)-y)/m;
grad(2:end,1)=X(:,2:end)'*(sigmoid(X*theta)-y)/m+lambda/m*theta(2:end);
end

3.绘制决策边界

function plotDecisionBoundary(theta, X, y);
%PLOTDECISIONBOUNDARY 此处显示有关此函数的摘要
%   此处显示详细说明
plotData(X(:,2:3),y);
hold on;

if size(X,2)<=3
    plot_x=[min(X(:,2))-2,max(X(:,2))+2];%第一个特征量的范围为横轴
    plot_y=(-1./theta(3)).*(theta(2).*plot_x+theta(1));
    %决策边界是X*theta=0的值 theta0+theta1.x1+theta2.x2
    plot( plot_x, plot_y);
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)
            %u,v表示待映射的特征量 
            z(i,j)=mapFeature(u(i),v(j))*theta;
        end;
    end;
    z=z';
    
    contour(u,v,z,[0,0],'LineWidth',3);%决策边界的方程是X*theta=0 即z=0
end
end


在这里插入图片描述
4.算法准确度度量

function p = predict(theta, X)

%p=X*theta>0;
m=size(X,1)
p=zeros(m,1);
p=(sigmoid(X*theta)>=0.5);

end

p = predict(theta, X);

fprintf('Train Accuracy: %f\n', mean(double(p == y)) * 100);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值