【问题标题】:Max- Min Normalization range related confusionMax-Min 归一化范围相关的混淆
【发布时间】:2021-05-03 20:36:13
【问题描述】:

我正在使用 UCI 机器学习银行数据集进行数据预处理。URL 我使用 Max-Min Normalization 方法对数据进行规范化。

据我所知,此方法将数据范围重新调整为 [0,1]。

原始数据的样子

应用数据规范化后

df.duration = df.duration.apply(lambda v:((v df.duration.min())/df.duration.max()-df.duration.min()))

现在数据看起来像

在对持续时间列进行标准化后,所有数据都变为负数。但是根据 Max-Min 归一化数据应该在 (0,1) 之间。因此,哪种归一化可以提供更好的性能?

我很困惑,因为我观看了this video 以获取知识。根据 0,1 之间的视频时长列。然而,当我在我的机器上运行相同的代码时,我得到了一些不同的东西。

【问题讨论】:

  • 根据公式,MinMax 缩放需要从元素中减去 Min 值,但您要减去 Mean 值。这可能是您得到负值的原因。
  • 我编辑我的代码和输出。输出与之前相同。我得到了 (-) 值。
  • 只是为了确保您运行的代码是准确的吗?它在 v 和 df.duration.min() 和 df.duration.max() 之间缺少一个减号 - df.duration.min() 没有在括号内组合在一起,这意味着你从 v 中减去 Min 值,然后除以 max ,以及从结果中减去最小值。这也会导致负值。
  • 谢谢。有用。基本上问题与括号有关。当我将 df.duration.max() - df.duration.min() 分组时效果很好。
  • 我不确定您是要结束这个问题还是让我输入一个答案让您接受,这样问题就结束了,因为我觉得这个问题基本上源于错字(这就是我在 cmets 中澄清事情而不是发布答案的原因)?

标签: python pandas normalization scaling


【解决方案1】:

我认为您需要将行 diff = df['balance'].max() - df['duration'].min() 更改为 diff = df['balance'].max() - df['balane'].min()。您正在从不同的变量计算 diff

还要检查实施。根据sklearn,正确的实现是:

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min

综合起来:

# Compute min and max just once

MIN = df['duration'].min()
MAX = df['duration'].max()

# Max Min Scaler function

def MinMaxScaler(X):
    return (X - MIN) / (MAX - MIN)

# Scale the duration variable

df['duration'] = df['duration'].apply(MinMaxScaler)

【讨论】:

  • 能否请您根据“持续时间”列更改公式?
猜你喜欢
  • 2017-05-10
  • 2016-10-19
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 2020-02-16
  • 1970-01-01
  • 2015-03-09
相关资源
最近更新 更多