何时使用 MinMaxScaler、何时使用 StandardScaler 或其他方法
什么是缩放?欢迎来到雲闪世界。
当您第一次将数据集加载到 Python 脚本或笔记本中,并查看数值特征时,您可能会注意到它们都处于不同的尺度上。
这意味着每个列或特征将具有不同的范围。例如,一个特征的值可能在 0 到 1 之间,而另一个特征的值可能在 1000 到 10000 之间。
以UCI 机器学习库(CC by 4.0 许可证)中的葡萄酒质量数据集为例。
UCI 葡萄酒质量数据集中的一些特征。图片由作者提供
缩放本质上是使所有特征更接近相似或相同的范围或比例的过程,例如对它们进行转换,使所有值都在 0 和 1 之间。
何时(以及为什么)需要扩展
在拟合/训练机器学习模型之前缩放特征很重要,原因如下:
- 确保所有特征对模型的贡献均等。当一个特征的数值范围很大时,它可能会对预测产生过高的影响,而其他较小的特征则会被忽略。
- 性能改进。当特征被缩放时,某些算法收敛得更快。
特征缩放应在数据清理(删除空值、删除/插入异常值等)、通过工程创建新特征以及执行训练/测试拆分之后进行。在模型拟合缩放数据之前,这应该是数据预处理的最后一步。
不过,在决定扩展功能时,请务必记住以下几点:
- 仅缩放特征,而不缩放目标变量。无需缩放目标变量。
- 仅缩放数值特征。不要缩放分类特征 — — 而是使用独热编码或其他分类编码方法将这些特征输入模型。
- 缩放特征仅对某些算法是必要的。使用梯度下降来最小化损失函数的算法(例如线性回归、逻辑回归和神经网络)对特征尺度的差异很敏感,因此缩放是必要的。距离算法(例如 KNN)也对缩放很敏感。但是,基于树的算法(例如决策树和随机森林)则不敏感,因此这些算法不需要缩放特征。
标准化还是最小-最大缩放?
有两种流行的特征缩放方法:标准缩放和最小-最大缩放。
标准缩放(也称为标准化)对数据进行转换,使其平均值为 0,标准差为 1。在 Python 中,StandardScaler 用于执行标准化。
给定数据点 Xi 的标准化方程。图片来源:作者
最小-最大缩放(有时称为规范化,尽管 scikit-learn 文档并未这样提及它)转换数据,使得每个值都介于 0 和 1 之间。在 Python 中,MinMaxScaler 对象用于执行最小最大缩放。
给定数据点 Xi 的归一化方程。图片来自作者
在大多数情况下,在训练 ML 模型之前缩放数据时,标准化或最小-最大缩放都可以完成工作。我建议使用这两种方法尝试你的数据集,看看哪种方法(如果有的话)能产生更好的性能。
然而,在选择一种方法时需要考虑一些因素。
标准化:
- 结果分布为 0 均值和 1 标准差
- 许多机器学习算法(尤其是深度学习算法)假设数据具有标准正态分布,即均值为 0、方差为单位
- 对异常值敏感
- 更适合已经呈正态分布的数据
最小-最大缩放比例:
- 将值范围限制为 [0,1]
- 对异常值敏感
- 因为它将值的范围限制在 0,1 内,所以在数据稀疏的情况下,它会保留 0 值
- 保留数据的原始分布/形状
执行
这两个缩放器都可以通过 sklearn.preprocessing 模块获得,并且可以按如下方式导入:
从sklearn.preprocessing导入MinMaxScaler、StandardScaler
重要提示:在缩放数据之前,请务必先将其拆分为训练集和测试集。您不希望将缩放器安装在整个数据集上,因为这会导致数据泄漏。
缩放器应仅适合训练集。要使缩放器适合数据并同时转换数据,请在训练集上调用 .fit_transform。对于测试集,您应该只调用 .transform,因为您不想使用测试集来拟合或“训练”缩放器。
# 首先将 X 和 y 分成训练和测试
X_train, X_test,y_train,y_test=train_test_split(X,y) # 定义缩放器对象 - 可以是 MinMaxScaler、StandardScaler 或其他
# 缩放对象
scaler = MinMaxScaler() # 将缩放器拟合到训练集并同时进行变换
X_train = scaler.fit_transform(X_train)
# 仅在测试集上进行变换
X_test = scaler.transform(X_test)
现在,您有一个可用于训练模型的缩放测试和训练集。
其他缩放方法
由于 StandardScaler 和 MinMaxScaler 都对异常值敏感,scikit learn 提供了一个有用的替代方案:RobustScaler。RobustScaler删除中位数并使用四分位距 (IQR) 作为缩放的参考点。IQR 是一种众所周知的稳健异常值检测方法,这意味着它不受异常值的影响。
另一种选择是在将缩放器拟合到数据之前简单地移除或估算异常值。但是,如果某些方法无法捕获数据集中的所有或大部分异常值,RobustScaler 可能是一个安全的选择。
结论
最终,StandardScaler 和 MinMaxScaler 都是缩放具有不同范围、标准偏差和方差的特征的良好选择。测试两者并查看每个方法如何影响模型的性能是有益的。
以 StandardScaler 作为默认值可能是一个很好的起点,因为许多深度学习算法都假设正态性为平均值 0 和标准差为 1 — — 只要您的数据集不是高度倾斜或异常。
这就是为什么在开始预处理之前探索数据、仔细检查分布和检查异常值非常重要。
感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)
订阅频道(https://t.me/awsgoogvps_Host)
TG交流群(t.me/awsgoogvpsHost)
#aws CLI cheat sheet #aws cli Debug #aws cli get S3 object #aws cli login with access key #aws cli to download from s3 #aws command line download from s3 #homebrew install aws cli#aws sdk get caller identity #aws s3 cli get object #aws s3 put object#aws s3 headobject#aws s3 put-object #aws s3 sync vs cp