Python中的特征缩放

Python中的特征缩放

当我们对机器学习数据集进行预处理时,我们需要对数据进行缩放,以使它们全部具有相同的规模。举个例子,我们来看一个小数据集:

Python中的特征缩放

这里,一个员工的工作时间和工资栏是不同的,一个是小于100,另一个列是上千。这种不同的规模使得机器学习的计算变得困难,因为小尺度的参数可能会更早收敛,而更高尺度的参数可能会缓慢收敛。

我们需要执行特征缩放的主要原因有两个:

  • 大多数机器学习算法是基于欧几里得距离的,如果我们不执行特征缩放,一个特征可能会支配另一个。在以上数据集中,工时列范围为28-58,薪资列范围为1200 - 89000。它们的规模并不相同,如果我们计算第0行和第3行之间的欧式距离,那么(58-34)²与(41000-12000)²相比非常小,所以工资栏可能会支配我们的特征。
  • 即使算法不是基于机器学习,如果我们执行特征缩放,它们运行得更快,并且对于大型数据集,我们具有巨大的性能优势。

特征缩放技术

1、标准化

在这种技术中,我们用它的z-score来替换值。

z =(x−μ)/σ

标准化之后的结果是所有的特性都将被重新调整,这样它们就有了标准正态分布的属性,包括=0(均值)和=1(标准偏差)。

2、均值一化

x = (x — mean(x))/(max(x) — min(x))

这个归一化将创建-1和1之间的特性分布和μ= 0。

3. Mean-Max Scaling

x = (x — min(x))/(max(x) — min(x))

这种缩放使得值介于0和1之间。当我们将要素归一化以适应特定范围时,即在图像处理中,强度值应该在0和255之间。

何时缩放

  • 当我们为基于欧式距离的算法如k近邻准备数据集时。
  • 当执行主成分分析(PCA)进行降维时。
  • 加速梯度下降。
  • 基于树的模型可以处理不同范围的值,从而不需要对它们进行缩放。

现在让我们看看如何在python中实现这一点

from sklearn.preprocessing import StandardScaler

sc_X = StandardScaler()

X_train = sc_X.fit_transform(X_train)

# Since we have already fit our training set we want to scale test set on same scale so we don't need to fit again

X_test = sc_X.transform(X_test)

我们假设X_train和X_test是从上面的数据集中提取的。

相关推荐