在逻辑回归中需要缩放特征吗?

问题描述

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

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

enter image description here

以下是数据的分布-

enter image description here

此外,数据集与每个响应类别的 50% 数据完美平衡。所以这是一个适用于Logistic回归应用的经典案例。然而,在应用 Logistic 回归时,得分为 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 中逻辑回归的 documentation 表明 lbfgs 求解器对未缩放的数据具有鲁棒性。

解决方法

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

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

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

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