在逻辑回归中:
假设函数,
h(x) = ( 1 + exp{-wx} )^-1
其中,w – 需要拟合或优化的权重/参数
成本函数(负对数似然函数)定义为:
对于一个单一的训练示例(x,y):
l(w) = y * log ( h(x) ) + (1 - y) * log ( 1 - h(x) )
目标是最大化所有训练样本上的l(w),从而估算w。
问题:
考虑一种情况,其中正样本(y=1)的训练示例远多于负样本(y=0)的训练示例。
为了简化:
如果我们只考虑正样本(y=1):算法运行如下:
maximize ( l(w) ) => maximize ( y * log ( h(x) ) ) => maximize ( log( h(x) ) ) => maximize ( h(x) ); 因为log(z)随z增加而增加 => maximize ( ( 1 + exp{-wx} )^-1 ) => maximize ( wx ); 因为较大的wx会增加h(x)并使其更接近1
换句话说,优化算法会尝试增加(wx)以更好地拟合数据并增加似然性。
然而,算法似乎有可能通过一种非预期的方式增加(wx),但并不会以任何方式改善解决方案(决策边界):
通过缩放w: w' = k*w (其中k为正常数)
我们可以增加(k*wx)而不会以任何方式改变我们的解决方案。
1) 为什么这不是问题?或者这是问题吗?
2) 有人可能会争辩说,在正样本远多于负样本的数据集中,算法会试图不断增加||w||。
回答:
- 这有时是一个问题,但通过正则化可以解决
- 只有在类别完全分离时
如果只有y=1,算法确实会试图使wx
尽可能大,并且永远不会收敛。但如果只有一个类别,你根本不需要逻辑回归。
如果数据集不平衡(y=1远多于y=0),一般来说,逻辑回归不会遇到收敛问题。
让我们来看看为什么。假设你只有一个负样本x_0
,和N个相同的正样本x_1
。那么对数似然将如下所示:
l(w) = N * log(h(x_1)) + log(1-h(x_0))
h(x)
在0和1之间有界,因此两个分量都由0上界,但下界无界。
现在,如果w
足够大并且你继续增加它,第一个项只会略有增加(因为它已经接近0),但第二个项可能会非常快地减少(因为log(x)
在x
接近0时会非常快地趋向于负无穷)。如果你无限增加w
,l(w)
将趋向于负无穷。因此,存在一个有限的w
可以最大化似然。
但有一个重要的例外。当类别被某个超平面完全分离时(这与类别大小几乎无关)。在这种情况下,第一个和第二个项都会趋向于0
,而||w||
趋向于无穷大。
但如果类别完全分离,你可能根本不需要逻辑回归!它的力量在于概率预测,但在完全分离的情况下,预测可能是确定性的!所以你可以对数据应用,例如,SVM。
或者你可以解决一个正则化问题,最大化l(w)-lambda*||w||
。例如,在scikit-learn中,逻辑回归正是这样做的。在这种情况下,如果l(w)
足够接近0,||w||
将占主导地位,并且目标函数最终会在w
中减少。
因此,目标函数中的一个小惩罚解决了你的担忧。这是广泛应用的解决方案,不仅在逻辑回归中,在线性模型(Lasso,Ridge等)和神经网络中也是如此。