牛顿迭代法拟合logsitic regression

不服不行

看着cs229给出的代码,感觉读起来还有点吃力,
先记录一下

X = load('logsitic_x.txt');
Y = load('logsitic_y.txt');
X = [ones(size(X,1),1) X];
[theta,ll] = log_regression(X,Y,20);

m = size(X,1);
figure;hold on;

plot(X(Y<0,2),X(Y<0, 3),'rx','linewidth',2);
plot(X(Y>0,2),X(Y>0, 3),'go','linewidth',2);

x1 = min(X(:,2)):.01:max(X(:,2));
x2 = -(theta(1)/theta(3))-(theta(2)/theta(3))*x1;

plot(x1,x2,'linewidth',2);
xlable = 'x1';
ylable = 'y1';

下面是ps1 answer里面给出的函数

function  [theta,ll] = log_regression(X,Y,max_iters)
mm = size(X,1)
nn = size(X,2)

theta = zeros (nn,1)

ll = zeros(nn,1);
    for ii = 1:max_iters  
        margins = Y .* (X * theta);
        %此步是计算logsitic函数的平均经验损失
        ll(ii) = (1/mm) * sum(log(1+exp(-margins)));
        %可以想象margin此时是99*1的矩阵
        %probs 可以认为是 h(X)=1/exp(x'theta)
        probs = 1 ./ (1+exp(margins));
        %grad梯度 X' * (probds .* Y)
        %就相当于 从1到mm 所有h(yi*xi)*yi*xi之后
        %非常巧妙
        grad = -(1/mm) * (X' * (probs .* Y))
        %下面是求Hessian矩阵
        H = (1/mm) * (X' * diag(probs .* (1-probs)) * X)
        theta = theta - H \ grad;
    end
end

ll是 log loss
H是 Hessian

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值