数据缩放是数据预处理中的一个关键步骤,它将特征转换为相似的量纲或范围,通常在训练机器学习模型之前进行。数据缩放的主要目的是确保所有特征对模型的贡献是均等的,并提升模型的性能,因为一些算法在特征被缩放后能更快收敛。
常见的数据缩放方法包括标准化(Standardization)和 Min-Max 缩放(Min-Max Scaling):
-
标准化(Standardization)
:将数据转换为均值为 0 和标准差为 1 的分布。这种方法适用于许多机器学习算法(尤其是深度学习算法),它们通常假设数据符合标准正态分布。然而,标准化对异常值较为敏感,更适合于已经呈正态分布的数据。
-
Min-Max 缩放(Min-Max Scaling)
:将数据缩放到介于 0 和 1 之间的范围。这种方法对异常值也敏感,但在处理稀疏数据时能够保留值为 0 的数据,并且能够保持数据的原始分布形状。
此外,如果数据集中存在异常值,
RobustScaler
是一个有用的替代方案。
RobustScaler
使用中位数和四分位距(IQR)进行缩放,对异常值的影响较小。
什么是数据缩放?
当你第一次将数据集加载到 Python 脚本或Data Notebook中,并查看其中的数值特征时,你可能会注意到它们的量纲各不相同。这意味着每个列或特征的取值范围各异。例如,一个特征的取值范围可能是 0 到 1,而另一个特征的取值范围则可能是 1000 到 10000。
数据缩放本质上是将所有特征拉到一个相似或相同的量纲或范围的过程,例如将所有特征的值转化为介于 0 和 1 之间。
以 UCI 机器学习库中的葡萄酒质量数据集(
https://archive.ics.uci.edu/dataset/186/wine+quality
)为例:
wine_red=pd.read_csv('/home/winequality-red.csv',sep=';')
wine_red
何时(以及为何)需要进行数据缩放
在拟合/训练机器学习模型之前对特征进行缩放有几个重要原因:
数据缩放应该在数据清理(如移除空值、移除或填补异常值等)、通过特征工程创建新特征以及进行训练/测试集划分之后进行。它应是数据预处理的最后一步,在模型拟合到缩放后的数据之前完成。
但在决定缩放特征时,需注意以下几点:
-
只对特征进行缩放,不要缩放目标变量。缩放目标变量并非必要。
-
只对数值特征进行缩放。不要缩放类别特征——对于这些特征,应使用独热编码或其他类别编码方法。
-
缩放特征只在某些算法中是必要的。使用梯度下降法最小化损失函数的算法,如线性回归、逻辑回归和神经网络,对特征量纲的差异较为敏感,因此需要进行缩放。使用距离算法如 KNN 也对缩放敏感。然而,基于树的算法如决策树和随机森林则不敏感,因此对这些算法不必进行特征缩放。
标准化还是 Min-Max 缩放?
有两种常见的特征缩放方法:标准缩放和 Min-Max 缩放。标准缩放(也称为标准化)将数据转换为均值为 0、标准差为 1 的形式。在 Python 中,通常使用
StandardScaler
来执行标准化。
Min-Max 缩放将数据转换为每个值都介于 0 和 1 之间。在 Python 中,通常使用
MinMaxScaler
对象来执行 Min-Max 缩放。
通常来说,在训练机器学习模型之前,对数据进行缩放时,无论是标准化还是 Min-Max 缩放都能完成任务。我建议对你的数据集尝试这两种方法,看看哪一种(如果有的话)能带来更好的性能。不过,在选择其中一种方法时,还是有一些考虑因素的。
标准化
:
Min-Max 缩放
:
MinMaxScaler, StandardScaler示例
这两种缩放器都可以通过
sklearn.preprocessing
模块获取,并可以通过以下方式导入:
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.model_selection import