liblinear L1与L2逻辑回归性能差异

时间:2015-05-24 23:49:13

标签: machine-learning regression liblinear

我正在使用LIBLINEAR训练一个简单的逻辑回归分类器。只有3个功能,标签是二进制0-1。

示例输入文件:

1   1:355.55660999775586    2:-3.401379785      3:5
1   1:252.43759050148728    2:-3.96044759307    3:9
1   1:294.15085871437088    2:-13.1649273486    3:14
1   1:432.10492221032933    2:-2.72636786196    3:9
0   1:753.80863694081768    2:-12.4841741178    3:14
1   1:376.54927850355756    2:-6.9494008935     3:7

现在,如果我使用“-s 6”,即“ L1正则化逻辑回归”,则10倍交叉验证精度约为70%,每个iter在几秒钟内完成。 但如果我使用“-s 7”,即“ L2正则化逻辑回归(对偶)”,那么训练迭代超过1000,而10倍精度仅为60%。

有没有人见过这种奇怪的行为?根据我的理解,L1和L2之间的唯一区别是正则化项是使用abs(x)还是pow(x,2)。

4 个答案:

答案 0 :(得分:0)

感谢您发布此内容!我经常使用liblinear,并且通常总是在不假思索地使用L2损失。本文解释了差异:http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/

基于此,我猜测您不仅拥有少量功能,还可能拥有小型数据集?您是否尝试增加输入点的数量?

答案 1 :(得分:0)

在我的糟糕看法中,不认为这是一种“奇怪”行为。在你没有任何意识之前,你必须进行试验以确认哪一个适合你的情况。从理论上讲,L1-regular是有界的,就像特征选择一样,而l2-regular则更加平滑。

答案 2 :(得分:0)

我刚刚意识到LIBLINEAR提供了两个逻辑回归分类器:

0 -- L2-regularized logistic regression (primal)
7 -- L2-regularized logistic regression (dual)

我使用的是7,即使在1000次迭代后也没有收敛。 在我切换到0之后,它收敛得非常快,并且能够达到约70%的准确度。

我认为双重与原始主要是优化方法的差异,所以我认为这可能是一些数值计算问题。

有关双重形式与原始形式的更多信息: https://stats.stackexchange.com/questions/29059/logistic-regression-how-to-get-dual-function

答案 3 :(得分:0)

基本上,我们添加一个正则化项,以防止系数非常适合过度拟合。

L1和L2之间的差是L1是权重之和,而L2只是权重平方的和。

L1不能用于基于梯度的方法,因为它与L2一样不可微分

L1有助于在稀疏特征空间中执行特征选择。特征选择是要了解哪些特征有用和哪些冗余。

它们的属性之间的差异可以概括为:

L2:由于解析解决方案,输出稀疏且没有特征选择而计算效率高

L1:由于稀疏解决方案,稀疏输出和完成特征选择而导致计算效率低下