Sklearn特征缩放与StandardScaler、MinMaxScaler、RobustScaler和MaxAbsScaler的关系

776 阅读6分钟

简介

在本教程中,我们将了解Sklearn库中的各种特征缩放选项--StandardScaler、MinMaxScaler、RobustScaler和MaxAbsScaler。我们将简要地了解这些技术的公式,然后通过实际的例子来实现每一个技术,以方便初学者的理解。

机器学习中的特征缩放

特征缩放是用来规范我们的数据集的数据特征,使所有的特征都达到一个共同的尺度。在建立任何机器学习模型之前,这是一个非常重要的数据预处理步骤,否则,产生的模型将产生令人沮丧的结果。

为了理解为什么特征缩放是必要的,让我们举个例子,假设你有几个独立的特征,如年龄、雇员工资和身高(英尺)。这里,这些特征的可能值分别在(21-100岁)、(25,000-1,50000印度卢比)和(4.5-7英尺)的范围内。正如你所看到的,每个特征都有自己的范围,当这些数字在训练过程中被送入模型时,模型将无法理解数据范围的偏斜性。这是因为它不理解年数、工资、身高,它所看到的只是在很大范围内变化的数字,所有这些都会导致一个糟糕的模型。

特征缩放将有助于将这些差异巨大的数值范围纳入同一范围。例如,年数、工资、身高的值可以在(0,1)的范围内被规范化,从而给ML模型提供更高质量的输入。

特征缩放技术

标准化

标准化是一种有用的方法,可以对独立变量进行缩放,使其具有均值为0、方差为1的分布。然而,如果我们的数据点不是正态分布,即不遵循高斯分布,那么标准缩放法就不是一个好的选择。

Sklearn StandardScaler

在Sklearn中,标准缩放是通过sklearn.preprocessing模块的StandardScaler()函数来应用的。

最小-最大归一化

在最小-最大归一化中,对于任何给定的特征,该特征的最小值被转化为0,而最大值将转化为1,所有其他的值都在0和1之间进行归一化。

Sklearn Feature Scaling with MinMaxScaler

在Sklearn中,使用sklearn.preprocessing模块的MinMaxScaler()函数来应用最小-最大缩放。

MaxAbs缩放器

在MaxAbs-Scaler中,每个特征通过使用其最大值进行缩放。首先,找到特征的绝对最大值,然后用它来划分特征值。就像MinMaxScaler一样,MaxAbs Scaler对离群值也很敏感。

Sklearn Feature Scaling with MaxAbsScaler

在Sklearn中,MaxAbs-Scaler是通过sklearn.preprocessing模块的MaxAbsScaler()函数来应用的。

健壮缩放器

Robust-Scaler是通过使用四分位数范围(IQR)来计算的,这里,IQR是第一四分位数(25分位数)和第三四分位数(75分位数)之间的范围。它也可以处理离群的数据点。

Sklearn Feature Scaling with RobustScaler

在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.2337.8841.0880.0129.0322.0126.08.3252452600.0
1-122.2237.8621.07099.01106.02401.01138.08.3014358500.0
2-122.2437.8552.01467.0190.0496.0177.07.2574352100.0
3-122.2537.8552.01274.0235.0558.0219.05.6431341300.0
4-122.2537.8552.01627.0280.0565.0259.03.8462342200.0
5-122.2537.8552.0919.0213.0413.0193.04.0368269700.0
6-122.2537.8452.02535.0489.01094.0514.03.6591299200.0
7-122.2537.8452.03104.0687.01157.0647.03.1200241400.0
8-122.2637.8442.02555.0665.01206.0595.02.0804226700.0
9-122.2537.8452.03549.0707.01551.0714.03.6912261100.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]。

01234567
776-1.2774020.948735-0.765048-0.812050-0.880144-0.898309-0.8277320.249804
1969-0.6535031.379387-1.6386530.3571710.1569370.2453740.3232270.111380
200180.150079-0.6334431.855769-0.181906-0.279729-0.427070-0.2679470.133652
85480.579322-0.8206830.426233-0.533359-0.545525-0.818004-0.6158511.691745
9847-1.3971901.2623620.029139-0.351683-0.585869-0.583267-0.5635340.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]。

012345678
00.2111550.5674810.7843140.0223310.0198630.0089410.0205560.5396680.902266
10.2121510.5653560.3921570.1805030.1714770.0672100.1869760.5380270.708247
20.2101590.5642931.0000000.0372600.0293300.0138180.0289430.4660280.695051
30.2091630.5642931.0000000.0323520.0363130.0155550.0358490.3546990.672783
40.2091630.5642931.0000000.0413300.0432960.0157520.0424270.2307760.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.