逻辑回归中是不是需要对特征进行缩放?

Posted

技术标签:

【中文标题】逻辑回归中是不是需要对特征进行缩放?【英文标题】:Do features need to be scaled in Logistic Regression?逻辑回归中是否需要对特征进行缩放? 【发布时间】:2021-09-10 00:15:47 【问题描述】:

我有一个具有一个特征(信用余额)的训练集 - 数字在 0-20,000 之间变化。响应为 0(默认 = 否)或 1(默认 = 是)。这是使用逻辑函数生成的模拟训练集。可以参考here。

下面的箱线图分别显示了 default=yes 和 default=no 类的余额分布 -

以下是数据的分布-

此外,数据集与每个响应类的 50% 数据完美平衡。所以它是一个适合应用逻辑回归的经典案例。但是,在应用逻辑回归时,得分为 0.5,因为仅预测 y=1。以下是应用逻辑回归的方式 -

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression().fit(df[['Balance']],df['Default'])
clf.score(df[['Balance']], df['Default'])

这证明逻辑回归拟合这些数据的方式一定有问题。但是,当平衡功能被缩放时,分数提高到 87.5%。那么缩放是否在这里起作用?

编辑:为什么缩放在这里起作用? sklearn 中 Logistic Regression 的 documentation 表示 lbfgs 求解器对未缩放的数据具有鲁棒性。

【问题讨论】:

【参考方案1】:

不仅如此,如果将其缩放到任何值,即 df['balances']/2 或 df['balances']/1000 或 df['balance']*2,都可能会给出 ~87%准确率,取决于默认选择的随机状态,它会给出 87% 或 50%

底层实现使用随机数生成器来拟合模型,所以有不同的解决方案并不少见,在有问题的情况下,类不是线性可分的,所以它可能不会给出解决方案,它肯定不会给你总是一个很好的解决方案。

您可以在更改随机状态参数时找到解决方案,因此最好对模型进行多次评分以获得平均性能

[编辑] https://scikit-learn.org/stable/modules/linear_model.html#liblinear-differences 还提到了求解器在大型数据集上不缩放和速度的鲁棒性

【讨论】:

谢谢。我有两点。首先,答案中提到的文档说 lbfgs 求解器对未缩放的数据集是稳健的。这似乎受到挑战,因为缩放大大提高了分数。这与 random_state 无关,因为我尝试了 100 个随机整数并且每次都出现相同的结果。同样缩放数据并没有改变数据分布的性质(有问题的第二个图)。那么为什么缩放在这里起作用呢?它与实现最大似然的方式有关吗?

以上是关于逻辑回归中是不是需要对特征进行缩放?的主要内容,如果未能解决你的问题,请参考以下文章

详解逻辑回归与评分卡-逻辑回归中的特征工程菜菜的sklearn课堂笔记

使用逻辑回归进行特征选择

第九节,线性逻辑回归

在 scikit learn 中训练具有不同特征维度的逻辑回归模型

在实现逻辑回归模型时包括特征

如何获得逻辑回归特征对特定预测的相对重要性?