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是从上面的数据集中提取的。