我正在使用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)。感谢发帖!我经常使用线性,通常总是不加思考地使用L2损耗。本文很好地解释了它们的区别:http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/
基于此,我猜你不仅有少量的特征,而且可能有一个小的数据集?你是否尝试过增加输入点的数量?
我不认为这是一个'奇怪'的行为。在你没有任何感觉之前,你必须试着确认哪一个更适合你的情况。理论上,L1-regular和特征选择一样是有界的,而l2-regular更平滑。
我刚刚意识到liblilinear提供了两个逻辑回归分类器:
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