简介
在本教程中,我们将了解Sklearn库中的各种特征缩放选项--StandardScaler、MinMaxScaler、RobustScaler和MaxAbsScaler。我们将简要地了解这些技术的公式,然后通过实际的例子来实现每一个技术,以方便初学者的理解。
机器学习中的特征缩放
特征缩放是用来规范我们的数据集的数据特征,使所有的特征都达到一个共同的尺度。在建立任何机器学习模型之前,这是一个非常重要的数据预处理步骤,否则,产生的模型将产生令人沮丧的结果。
为了理解为什么特征缩放是必要的,让我们举个例子,假设你有几个独立的特征,如年龄、雇员工资和身高(英尺)。这里,这些特征的可能值分别在(21-100岁)、(25,000-1,50000印度卢比)和(4.5-7英尺)的范围内。正如你所看到的,每个特征都有自己的范围,当这些数字在训练过程中被送入模型时,模型将无法理解数据范围的偏斜性。这是因为它不理解年数、工资、身高,它所看到的只是在很大范围内变化的数字,所有这些都会导致一个糟糕的模型。
特征缩放将有助于将这些差异巨大的数值范围纳入同一范围。例如,年数、工资、身高的值可以在(0,1)的范围内被规范化,从而给ML模型提供更高质量的输入。
- 同时阅读 - 为什么以及如何在机器学习中进行特征缩放
特征缩放技术
标准化
标准化是一种有用的方法,可以对独立变量进行缩放,使其具有均值为0、方差为1的分布。然而,如果我们的数据点不是正态分布,即不遵循高斯分布,那么标准缩放法就不是一个好的选择。

在Sklearn中,标准缩放是通过sklearn.preprocessing模块的StandardScaler()函数来应用的。
最小-最大归一化
在最小-最大归一化中,对于任何给定的特征,该特征的最小值被转化为0,而最大值将转化为1,所有其他的值都在0和1之间进行归一化。

在Sklearn中,使用sklearn.preprocessing模块的MinMaxScaler()函数来应用最小-最大缩放。
MaxAbs缩放器
在MaxAbs-Scaler中,每个特征通过使用其最大值进行缩放。首先,找到特征的绝对最大值,然后用它来划分特征值。就像MinMaxScaler一样,MaxAbs Scaler对离群值也很敏感。

在Sklearn中,MaxAbs-Scaler是通过sklearn.preprocessing模块的MaxAbsScaler()函数来应用的。
健壮缩放器
Robust-Scaler是通过使用四分位数范围(IQR)来计算的,这里,IQR是第一四分位数(25分位数)和第三四分位数(75分位数)之间的范围。它也可以处理离群的数据点。

在Sklearn中,Robust-Scaler是通过sklearn.preprocessing模块的RobustScaler()函数来应用的。
Sklearn特征缩放实例
在本节中,我们将看到Sklearn特征缩放技术的例子:StandardScaler、MinMaxScaler、RobustScaler和MaxAbsScaler。为此,我们将在住房数据集上做回归,首先,看到没有特征缩放的结果,然后比较应用特征缩放的结果。
关于数据集
该数据集是加利福尼亚州的住房数据集,包含了房屋的各种特征,如位置、房龄、房间数、房屋价值等。问题是要预测数据集中其他独立特征变量的房屋价值。它包含20433行和9列。
导入必要的库
首先,让我们加载我们的例子所需的所有库。
在[1]中。
import
加载数据集
接下来,我们在一个数据框中加载数据集,并删除非数字特征ocean_proximity。然后观察数据集的前10行。
在[2]中。
#reading the dataset
Out[2]:
| 经度 | 纬度 | 住房中位数_年龄 | 卧室总数 | 总卧室数 | 人口 | 家庭 | 收入中位数 | 房屋价值中位数 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | -122.23 | 37.88 | 41.0 | 880.0 | 129.0 | 322.0 | 126.0 | 8.3252 | 452600.0 |
| 1 | -122.22 | 37.86 | 21.0 | 7099.0 | 1106.0 | 2401.0 | 1138.0 | 8.3014 | 358500.0 |
| 2 | -122.24 | 37.85 | 52.0 | 1467.0 | 190.0 | 496.0 | 177.0 | 7.2574 | 352100.0 |
| 3 | -122.25 | 37.85 | 52.0 | 1274.0 | 235.0 | 558.0 | 219.0 | 5.6431 | 341300.0 |
| 4 | -122.25 | 37.85 | 52.0 | 1627.0 | 280.0 | 565.0 | 259.0 | 3.8462 | 342200.0 |
| 5 | -122.25 | 37.85 | 52.0 | 919.0 | 213.0 | 413.0 | 193.0 | 4.0368 | 269700.0 |
| 6 | -122.25 | 37.84 | 52.0 | 2535.0 | 489.0 | 1094.0 | 514.0 | 3.6591 | 299200.0 |
| 7 | -122.25 | 37.84 | 52.0 | 3104.0 | 687.0 | 1157.0 | 647.0 | 3.1200 | 241400.0 |
| 8 | -122.26 | 37.84 | 42.0 | 2555.0 | 665.0 | 1206.0 | 595.0 | 2.0804 | 226700.0 |
| 9 | -122.25 | 37.84 | 52.0 | 3549.0 | 707.0 | 1551.0 | 714.0 | 3.6912 | 261100.0 |
无特征缩放的回归
让我们先用KNN创建回归模型,不应用特征缩放。可以看出,在没有特征缩放的情况下,回归模型的准确率仅为24%。
In[3]:
# Train Test Split
Out[3]:
Accuracy for our testing dataset without Feature scaling is : 24.722%
应用Sklearn StandardScaler
现在让我们通过在数据预处理期间应用标准缩放器来创建回归模型。
首先,数据集被分割成训练和测试。然后创建一个StandardScaler对象,用它来拟合和转换训练数据集,用同样的对象,测试数据集也被转换了。
在[4]。
# Train Test Split
输出[4]。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
|---|---|---|---|---|---|---|---|---|
| 776 | -1.277402 | 0.948735 | -0.765048 | -0.812050 | -0.880144 | -0.898309 | -0.827732 | 0.249804 |
| 1969 | -0.653503 | 1.379387 | -1.638653 | 0.357171 | 0.156937 | 0.245374 | 0.323227 | 0.111380 |
| 20018 | 0.150079 | -0.633443 | 1.855769 | -0.181906 | -0.279729 | -0.427070 | -0.267947 | 0.133652 |
| 8548 | 0.579322 | -0.820683 | 0.426233 | -0.533359 | -0.545525 | -0.818004 | -0.615851 | 1.691745 |
| 9847 | -1.397190 | 1.262362 | 0.029139 | -0.351683 | -0.585869 | -0.583267 | -0.563534 | 0.502220 |
现在,标准标度器已经应用,现在让我们训练回归模型并检查其准确性。可以看出,该模型的准确率现在达到了惊人的98.419%。
在[5]。
# Creating Regression Model
model
Out[5]:
Accuracy for our testing dataset using Standard Scaler is : 98.419%
应用Sklearn MinMaxScaler
就像先前一样,创建了一个MinMaxScaler对象,使用该对象对训练数据集进行拟合和转换,并使用同一对象对测试数据集进行转换。
在[6]。
# Train Test Split
输出[6]。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.211155 | 0.567481 | 0.784314 | 0.022331 | 0.019863 | 0.008941 | 0.020556 | 0.539668 | 0.902266 |
| 1 | 0.212151 | 0.565356 | 0.392157 | 0.180503 | 0.171477 | 0.067210 | 0.186976 | 0.538027 | 0.708247 |
| 2 | 0.210159 | 0.564293 | 1.000000 | 0.037260 | 0.029330 | 0.013818 | 0.028943 | 0.466028 | 0.695051 |
| 3 | 0.209163 | 0.564293 | 1.000000 | 0.032352 | 0.036313 | 0.015555 | 0.035849 | 0.354699 | 0.672783 |
| 4 | 0.209163 | 0.564293 | 1.000000 | 0.041330 | 0.043296 | 0.015752 | 0.042427 | 0.230776 | 0.674638 |
现在,这个比例的数据被用来创建回归模型,同样可以看出,模型的准确性相当好,达到98.55%。
在[7]。
# Creating Regression Model
输出[7]。
Accuracy for our testing dataset using MinMax Scaler is : 98.559%
在Sklearn中应用MaxAbsScaler
创建一个MaxAbsScaler对象,然后在训练数据集上应用fit_transform方法,然后用同一个对象转换测试数据集。
在[8]中。
# Train Test Split
接下来,我们使用缩放后的数据创建KNN回归模型,可以看出,测试准确率为99.38%。
在[9]中。
# Creating Regression Model
Out[9]:
Accuracy for our testing dataset using MaxAbs Scaler is : 99.382%
在Sklearn中应用RobustScaler
创建一个RobustScaler对象,然后在训练数据集上应用fit_transform方法,然后用同一个对象转换测试数据集。
在[10]中。
# Train Test Split
最后,我们创建回归模型并测试准确率,结果是98.295%。
在[11]中。
# Creating Regression Model
Out[11]:
Accuracy for our testing dataset using Robust Scaler is : 98.295%
总结
从下面的观察可以看出,在创建ML模型之前,特征缩放是数据预处理的一个非常重要的步骤。 在没有特征缩放的情况下,准确率非常低,在应用了不同的特征缩放技术后,测试准确率达到了98%以上。
| 缩放类型 | 测试精度 |
|---|---|
| 无特征缩放 | 24.722% |
| 标准缩放器 | 98.419% |
| 最小最大缩放器 | 98.559% |
| 诊断书 | 99.382% |
| 稳健型缩放器 | 98.295% |
The postSklearn Feature Scaling with StandardScaler, MinMaxScaler, RobustScaler and MaxAbsScalerappeared first onMLK - Machine Learning Knowledge.