为什么需要机器学习中的特征缩放及如何使用SciKit Learn来实现?

当您使用一个机器学习模型时,将特征缩放到一个以0为中心的范围是很重要的。这样做是为了使特征的方差在相同的范围内。如果一个特征的方差比其他特征的方差大几个数量级,那么这个特征可能会支配数据集中的其他特征,这不是我们希望在模型中发生的事情。

这里的目标是实现零均值和单位方差的高斯分布。实现这一目标的方法有很多,其中最流行的两种是标准化和归一化。

无论您选择哪种方法,SciKit Learn库都提供了一个类来轻松缩放我们的数据。我们可以使用库中的StandardScaler类。既然我们知道为什么我们需要缩放我们的特征,让我们看看如何去做。

我们将使用的示例数据集如下:

为什么需要机器学习中的特征缩放及如何使用SciKit Learn来实现?

Country,Age和Salary列是此数据集中的特征。“Purchased ”列是因变量。由于第一列是分类的,我们将对其进行标签编码,然后对其进行one hot encoding。我们在其他两列中也有一些缺失数据,因此我们将使用相应列的平均值进行输入和替换。完成所有这些后,我们将拥有一个如下所示的数据集:

为什么需要机器学习中的特征缩放及如何使用SciKit Learn来实现?

正如我们现在所看到的,这些特征完全没有相同的规模。我们肯定需要缩放它们。让我们来看看这样做的Python代码:

from sklearn.preprocessing import StandardScaler

standardScalerX = StandardScaler()

x = standardScalerX.fit_transform(x)

在本例中,我们假设数据集包含在一个名为“x”的变量中。正如你所看到的,代码非常简单。在这种情况下,我们使用了所有的默认值。

首先,fit_transform()函数将创建数据集的副本,这是因为“copy”参数默认为True。然后,数据在缩放前居中,这是因为默认情况下参数“with_mean”设置为True。在此之后,因为参数“with_std”默认为True,所以数据要么按单位方差缩放,要么按单位标准差缩放。

如果您想要有不同的行为,您可以更改这些选项。您可以在数据集上尝试所有的组合,看看哪一个满足您的需求。

现在,在使用上面给出的数据集运行这段代码之后,我们得到了一组很好的特征缩放,如下所示:

为什么需要机器学习中的特征缩放及如何使用SciKit Learn来实现?

现在,我们可以将这些数据传递给我们的模型,得到更好的结果。

相关推荐