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分布后面隐藏的基础是,正负两个类别的样本服从同方差的正态分布,正态分布其实可以理解(样本一大一般都要屈服于正态分布啊(●'◡'●)),同方差我没有找到合适的解释
但是在基于正态分布的基础上,我们要满足逻辑回归分布正负的概率比相等,就会发现要求方差相等
你问我为什么满足那个式子就要求它们相等,我看出来的=,=
什么你说我字丑?你走...(我字辣叫亲民( ̄▽ ̄)"
好,收工~
这篇博客介绍了Logistic回归的基本概念,包括其作为2分类方法的目的,假设后验概率满足二项logistic回归模型。通过梯度上升或梯度下降等优化方法调整判别函数,并通过取对数Log简化求导过程。博主分享了简单的代码实现,并指出Logistic回归背后的假设,即正负类别样本服从同方差的正态分布。
443

被折叠的 条评论
为什么被折叠?



