【问题标题】:Scaling columns pandas DataFrame缩放列 pandas DataFrame
【发布时间】:2022-01-03 01:53:56
【问题描述】:

对于具有不同数值列的数据集,它们通常具有不同的范围和分布。例如,我使用了 Iris 数据集。显示了它的 4 列的分布:

我的问题是:

具有相似分布的列是否应该使用相同的缩放器?在这种情况下,花瓣长度和花瓣宽度具有相似的分布。此外,萼片长度和萼片宽度具有(大约)相似的分布。因此,我对列使用了 Min-Max 缩放器 - 花瓣长度和花瓣宽度,而标准缩放器用于萼片长度和萼片。

这组操作的示例代码是:

# According to distribution visualizations from above, appropriate scalers are used-
std_scaler = StandardScaler()
iris_data[['sepallength', 'sepalwidth']] = std_scaler.fit_transform(iris_data[['sepallength', 'sepalwidth']])

# 'StandardScaler' subtracts the mean from each feature/attribute and then
# scales to unit variance

# Sanity checks-
iris_data['sepallength'].min(), iris_data['sepallength'].max()
# (-1.870024133847019, 2.4920192021244283)

iris_data['sepalwidth'].min(), iris_data['sepalwidth'].max()
# (-2.438987252491841, 3.1146839106774356)


mm_scaler = MinMaxScaler()
iris_data[['petallength', 'petalwidth']] = mm_scaler.fit_transform(iris_data[['petallength', 'petalwidth']])

# Sanity checks-
iris_data['petallength'].min(), iris_data['petallength'].max()
# (0.0, 1.0)

iris_data['petalwidth'].min(), iris_data['petalwidth'].max()
# (0.0, 1.0)

由于标准缩放器,萼片长度和萼片宽度的范围不同。而花瓣长度和花瓣宽度的范围是相同的。这是一个问题吗,因为不同的列在不同的范围内,这可能会影响使用它们进行训练的 ML 模型?

是否有一套黄金规则用于缩放/处理给定数据集中的不同数字列/属性?

【问题讨论】:

    标签: python-3.x pandas scikit-learn


    【解决方案1】:

    这在一定程度上取决于您用于任务的算法。例如,基于树的算法(RandomForest、XGBoost)往往受尺度差异的影响较小(例如尺度不变,尽管这并不完全正确,因为如果你对变量进行缩放,它的性能会提高)。另一方面,SVM 和逻辑回归需要缩放以防止具有大值和高方差的特定特征主导模型。

    一般来说,我倾向于使用StandardScaler(),但有时使用MinMaxScaler(),模型的性能会更好。我想这是一种反复试验的方法。我不知道一种缩放形式比另一种更好的共识,但我绝不是专家。尽管如此,为了可比性和解决您的不同分布问题,从而解决权重问题。

    我确实认为这个问题可能更适合 CrossValidated 而不是 StackOverflow。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2019-01-05
      • 1970-01-01
      • 2013-11-09
      • 2021-05-07
      • 2021-04-18
      相关资源
      最近更新 更多