机器学习中数据特征的处理 归一化vs标准化,哪个更好

​ 众所周知,特征工程是将原始数据转换为数据集的过程。 有各种可用的功能工程技术。 两种最广泛使用且最容易混淆的特征工程技术是:

  • 标准化
  • 归一化

​ 今天我们将探讨这两种技术,并了解数据分析师在解决数据科学问题时所做出的一些常见假设。 另外,本教程的全部代码都可以在下面的GitHub存储库中找到:

https://github.com/Tanu-N-Prabhu/Python/blob/master/Normalization_vs_Standardization.ipynb

归一化

理论

​ 归一化是将数字特征转换为标准值范围的过程。 值的范围可以是[-1,1]或[0,1]。 例如,假设我们有一个数据集,其中包含两个名为“年龄”和“体重”的特征,如下所示:

​ 假设一个名为“年龄”的要素的实际范围是5到100。我们可以通过从“年龄”列的每个值中减去5,然后将结果除以95( 100-5)。 为了使您清晰可见,我们可以将以上内容写为公式。

​ 其中**min ^(j)max ^(j)**是数据集中特征j的最小值和最大值。图像来源于Andriy Burkov的《百页机器学习书》

实例

​ 现在您已经了解了背后的理论,现在让我们看看如何将其投入实际。 通常,有两种方法可以实现此目的:传统的Old school手动方法,另一种使用sklearn预处理库。 今天,让我们借助sklearn库进行归一化。

使用sklearn预处理-Normalizer

​ 在将“ Age”和“ Weight”值直接输入该方法之前,我们需要将这些数据帧转换为numpy数组。 为此,我们可以使用to_numpy()方法,如下所示:

# Storing the columns Age values into X and Weight as YX = df['Age']
y = df['Weight']
X = X.to_numpy()
y = y.to_numpy()

​ 上面的步骤非常重要,因为fit()transform()方法仅适用于数组。

from sklearn.preprocessing import Normalizernormalizer = Normalizer().fit([X])
normalizer.transform([X])

normalizer = Normalizer().fit([y])
normalizer.transform([y])

​ 如上所示,两个数组的值都在[0,1]范围内。

我们何时应实际对数据进行归一化?

​ 尽管归一化不是强制性的(必须做的事)。 它可以通过两种方式为您提供帮助

  • 归一化数据将提高学习速度。 它将在构建(训练)和测试数据期间提高速度。 试试看!!
  • 它将避免数值溢出。 意思是归一化将确保我们的输入大致在相对较小的范围内。 这样可以避免问题,因为计算机通常在处理非常小或非常大的数字时会遇到问题。

标准化

理论

​ 标准化和z分数标准化和最小-最大缩放是一种重新缩放数据集值的技术,以使其具有标准正态分布的属性,其中μ= 0(均值-特征的平均值)且σ= 1( 均值的标准偏差)。 可以这样写:

实例

​ 现在有很多方法可以实现标准化,就像标准化一样,我们可以使用sklearn库并使用StandardScalar方法,如下所示:

from sklearn.preprocessing import StandardScalersc = StandardScaler()
sc.fit_transform([X])
sc.transform([X])sc.fit_transform([y])
sc.transform([y])

Z分数标准化

​ 同样,我们可以使用pandasmeanstd来实现。

# Calculating the mean and standard deviation
df = (df - df.mean())/df.std()
print(df)

最小-最大缩放

​ 在这里我们可以使用pandasmaxmin来做有需要的

# Calculating the minimum and the maximum 
df = (df-df.min())/(df.max()-df.min())
print(df)

​ 通常,最好使用Z分数标准化,因为最小-最大缩放容易过度拟合。

什么时候使用标准化?

​ 上述问题没有答案。 如果您的数据集较小且有足够的时间,则可以尝试上述两种技术并选择最佳的一种。 以下是您可以遵循的经验:

  • 您可以对无监督学习算法使用标准化。 在这种情况下,标准化归一化更有利。
  • 如果您在数据中看到一个曲线,那么标准化是更可取的。 为此,您将必须绘制数据。
  • 如果您的数据集具有极高或极低的值(离群值),则标准化是更可取的,因为通常,归一化会将这些值压缩到较小的范围内。

​ 除上述情况外,在任何其他情况下,归一化都适用。 同样,如果您有足够的时间可以尝试两种特征工程技术。

作者:Tanu N Prabhu

翻译:孟翔杰

在这里插入图片描述

原创文章 68 获赞 122 访问量 23万+

猜你喜欢

转载自blog.csdn.net/m0_46510245/article/details/105943288
今日推荐