如果这样做会对二元 Logistic 回归性能产生负面影响,是否必须对数据集进行规范化?

数据挖掘 机器学习 scikit-学习 逻辑回归 预处理 正常化
2022-03-12 02:56:35

我正在使用具有 4 个特征变量的原始数据集使用逻辑回归算法进行二项式分类。

我确保班级人数是平衡的。即,每个类的出现次数相等。

这四个特征是总胆固醇、收缩压、舒张压和香烟计数。类变量名称为 Stroke。

数据集描述如下图:

       TOTCHOL    SYSBP    DIABP  CIGPDAY   STROKE
count  200.000  200.000  200.000  200.000  200.000
mean   231.040  144.560   81.400    4.480    1.500
std     42.465   23.754   11.931    9.359    0.501
min    112.000  100.000   51.500    0.000    1.000
25%    204.750  126.750   73.750    0.000    1.000
50%    225.500  141.000   80.000    0.000    1.500
75%    256.250  161.000   90.000    4.000    2.000
max    378.000  225.000  113.000   60.000    2.000

偏斜是

TOTCHOL    0.369
SYSBP      0.610
DIABP      0.273
CIGPDAY    2.618
STROKE     0.000

这里使用 Python + sklearn。问题是当我尝试使用标准化数据集时,分类性能会受到非常负面的影响

 X=preprocessing.StandardScaler().fit(X).transform(X)

或者

 X=preprocessing.MinMaxScaler().fit_transform(X)

归一化数据集的分类报告(之前):

            precision    recall  f1-score   support

      1       0.85      0.79      0.81        28
      2       0.82      0.88      0.85        32
avg / total   0.83      0.83      0.83        60

而分类报告(之后)规范化数据集:

         precision    recall  f1-score   support

      1       0.47      1.00      0.64        28
      2       1.00      0.03      0.06        32

  avg/total   0.75      0.48      0.33        60

请注意,类变量包括结果 1(是)和 2(否),而不是通常的 0 和 1。

在这一点上,我看到预处理损害了分类准确性而不是帮助它。对此有什么合乎逻辑的解释吗?我“必须”做标准化步骤吗?

另一个要注意的是,我(在)对数据集进行归一化之前得到的概率分数要高得多,如下所示:

 [ 0.65929838  0.34070162]
 [ 0.40999878  0.59000122]
 [ 0.43592976  0.56407024]
 [ 0.40306785  0.59693215]
 [ 0.92748002  0.07251998]
 [ 0.74173761  0.25826239]

与那些(之后)规范化数据集相比

  [ 0.51636816  0.48363184]
  [ 0.5183946   0.4816054 ]
  [ 0.51410135  0.48589865]
  [ 0.50739794  0.49260206]
  [ 0.52645649  0.47354351]
  [ 0.5308564   0.4691436 ]

有什么解释为什么我会得到这样的结果?

1个回答

我找到了我自己问题的答案,回到 Python 脚本和适合模型的命令中,即

   LR = LogisticRegression (C=0.1, solver = "sag",max_iter=1000).fit (X_train, y_train)

参数 C 设置为 0.001,这是一个非常小的值(意味着 lambda 非常高,因为 C=1/lambda)(C 是正则化强度,值越小表示正则化越强)。可以在此处此处找到有关此问题的更多信息