Logistic回归

这篇博客介绍了Logistic回归的基本概念,包括其作为2分类方法的目的,假设后验概率满足二项logistic回归模型。通过梯度上升或梯度下降等优化方法调整判别函数,并通过取对数Log简化求导过程。博主分享了简单的代码实现,并指出Logistic回归背后的假设,即正负类别样本服从同方差的正态分布。



Logistic回归啊...这大抵是最受亲民的方法吧...虽然我完全没懂它相比其他分类方法亲民在哪里...


看看基础面板:

目的:2分类

思想:假设后验概率分布满足二项logistic回归模型

目标问题:

这里N是样本个数,π(x)表示P(Y=1|X),所以上面这个式子就是判别方法在训练集上判断正确的概率(其实就是最大似然估计(づ ̄ 3 ̄)づ),辣么我们的目的是最大化上边这个式子

解决方法:

既然明确了这个问题,我们就要想办法用梯度下降(这里求最大应该是梯度上升,不过差不多啦,你取个负号就梯度下降了嘛~(/▽\=))或者其变种(SGD 啦)然后调整判别函数,但是指数类型的梯度明显是不好求的,所以我们通过取对数Log方便求导,算出来w梯度为((y-π(x))*x),b梯度为y-π(x)


OK,我们开始写代码:

class LR:
    def __init__(self):
        self._w = self._b = None

    def fit(self, x, y, lr=0.001, epoch=1000):
        x, y = np.asarray(x, np.float32), np.asarray(y, np.float32)
        self._b = 0.
        self._w = np.random.random(x.shape[1])
        for _ in range(epoch):

            self._w -= (y-self.predict(x, raw=True)).dot(x)*lr
            self._b -= np.mean(y-self.predict(x, raw=True))*lr

    def predict(self, x, raw=False):
        x = np.asarray(x, np.float32)
        y_pred = np.exp(-x.dot(self._w)-self._b) / (np.exp(-x.dot(self._w)-self._b) + 1)

        if raw:
            return y_pred
        return (y_pred > 0.5).astype(np.float32)

(话说写代码的时候自己可智障了= =,给的y标签是+1/-1导致我还纳闷怎么一直不收敛,哎...被自己蠢哭(;′⌒`)


看下效果



还不错,收...


等等等等


突然想到逻辑回归的假设还得唠两句,实质上逻辑回归中概率服从logistic分布后面隐藏的基础是,正负两个类别的样本服从同方差的正态分布,正态分布其实可以理解(样本一大一般都要屈服于正态分布啊(●'◡'●)),同方差我没有找到合适的解释

但是在基于正态分布的基础上,我们要满足逻辑回归分布正负的概率比相等,就会发现要求方差相等



你问我为什么满足那个式子就要求它们相等,我看出来的=,=

什么你说我字丑?你走...(我字辣叫亲民( ̄▽ ̄)"


好,收工~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值