在这篇文章中,我们将讨论什么是特征缩放以及为什么我们在机器学习中需要特征缩放。我们还将讨论数据的标准化,以及使用scikit-learn实现同样的标准化。
什么是特性缩放?
特征缩放是对输入数据进行标准化/规范化所需要的重要预处理之一。当每一列的值范围非常不同时,我们需要将它们扩展到公共级别。这些值重新规划成公共水平,然后我们可以对输入数据应用进一步的机器学习算法。
我们有不同的特征,其中一个特征的数据可能以公里表示,另一列的数据可能以米表示,最后一列的数据可能以厘米表示。在将算法应用到数据上之前,首先需要将数据放到“米”、“公里”或“厘米”的公共尺度上进行有效的分析和预测。
缩放前输入数据
在上面的数据集中,我们可以看到列1和列2中的值有非常不同的范围。第一列值表示年龄在30到90岁之间,而工资值在30000到15000之间变化。所以两列值的比例是截然不同的。在进一步分析之前,我们需要将其调整到相同的范围。
缩放后的输出
缩放值的一种方法是将所有列的值从0到1或者我们可以将它们的值放在-3到3之间。将值更新到新的范围的过程通常称为Normalization 或 Standardization.。
下面是标准缩放后的数据输出。从数据中可以看出,所有的值都在-3到3之间。
数据标准化后的数据如下。可以看出,年龄和薪水的数据介于0到1之间。
为什么我们需要特征缩放?
要获得正确的预测和结果,就需要特征缩放。如果某一列的值与其他列相比非常高,则具有更高值的列的影响将比其他低值列的影响高得多。高强度的特征比低强度的特征重得多,即使它们在确定输出中更为关键。因此,预测可能无法给出预期的结果,并且可能无法满足业务用例。
机器学习算法也可能对范围较小的列不敏感,并可能导致不一致
总而言之,功能缩放是必需的,因为:
回归系数直接受特征范围的影响
具有较高比例的功能比具有较低比例的功能更重要
如果我们具有缩放值,则可以轻松实现渐变下降
如果按比例缩放,某些算法将减少执行时间。
一些算法基于欧几里得距离,欧几里得距离对特征尺度非常敏感。
不同的特征缩放技术
我们可以使用不同的缩放技术来缩放输入数据集。我们可以应用以下任一方法:
Normalization 或 Standardization
什么是归一化(Normalization )?
归一化是在0到1之间缩放要素值归一化。这称为最小-最大缩放。
在上式中:
Xmax和Xmin是功能列的最大值和最小值
X的值始终在最小值和最大值之间
使用Scikit Learn进行数据归一化
以下是使用Scikit Learn进行归一化的简单实现。
import pandas
import numpy as np
dataset = pandas.read_csv("./data/FirstDataset.csv")
X = dataset.iloc[:, :].values
from sklearn.preprocessing import MinMaxScaler
norm = MinMaxScaler()
X[:, 1:3] = norm.fit_transform(X[:, 1:3])
print(X)
什么是机器学习的标准化?
标准化基于标准偏差。它衡量功能中价值的传播。这是最常用的之一。
在标准缩放过程中,我们将特征的均值偏移为0,标准偏差为1。应用标准缩放器时,我们获得的值在-3到3范围内
当对特征值应用标准偏差时,特征集中值的99.7%介于-3 SD(标准偏差)至3 SD(标准偏差)之间。
让我们看一下示例:
在上述情况下,值在-3到3之间标准化,因此减小了数据列中值的范围。缩放这些值后,可以将其输入到机器学习算法进行进一步分析。
import pandas
import numpy as np
dataset = pandas.read_csv("./data/FirstDataset.csv")
X = dataset.iloc[:, :].values
from sklearn.preprocessing import StandardScaler
norm = StandardScaler()
X[:, 1:3] = norm.fit_transform(X[:, 1:3])
print(X)
在Scikit-Learn中应用Standard Scaler
当数据遵循高斯曲线时,我们可以应用标准缩放器。如果数据遵循高斯曲线,则标准偏差变得易于计算且有效,并且在预测时会给出出色的结果。
对特征缩放敏感的算法
下面给出了一些对特征缩放非常敏感的算法。这些算法对特征缩放很敏感,因为它们取决于距离和高斯曲线。
线性和逻辑回归
神经网络
支持向量机
K均值聚类
K最近邻居
主成分分析
对特征缩放不敏感的算法
对特征缩放不敏感的算法通常是“基于树的”算法
分类和回归树
森林随机回归
标准化和归一化
这些关键字经常可互换使用。虽然归一化是在0到1之间缩放值,但是标准化大约是将平均值设为0,将标准偏差设为1。在确定我们需要标准化还是归一化时,需要考虑一些要点。
当数据代表高斯曲线时,可以使用标准化
标准化不受异常值的影响。
归一化对异常值的影响很高
非高斯曲线表示时的归一化效果很好
作者:Mayank Gupta
deephub翻译组
领取专属 10元无门槛券
私享最新 技术干货