Sklearn数据预处理:scale, StandardScaler, MinMaxScaler, Normalizer

本文介绍了Sklearn库中数据预处理的三个关键步骤:一、标准化,通过(X-X_mean)/std进行处理,使得数据集中在0附近,方差为1;二、缩放到指定范围,如1-0之间,增强数据稳定性;三、正则化,计算p-范数并除以其值,使样本的p-范数等于1。涉及的工具有StandardScaler, MinMaxScaler和Normalizer。" 51434365,5636344,Hive中的Lateral View详解,"['大数据开发', 'Hive', '数据处理']

一、标准化

去除均值和方差缩放:通过(X-X_mean)/std计算每个属性(每列),进而使所有数据聚集在0附近,方差为1.

(1)、sklearn.preprocessing.scale()
直接将给定数据进行标准化

from sklearn import preprocessing
import numpy as np
X = np.array([[ 1., -1.,  2.],[ 2.,  0.,  0.],[ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X)
array([[ 0.        , -1.22474487,  1.33630621],
       [ 1.22474487,  0.        , -0.26726124],
       [-1.22474487,  1.22474487, -1.06904497]])
X_scaled.mean(axis=0)
array([ 0.,  0.,  0.])
X_scaled.std(axis=0)
array([ 1.,  1.,  1.])

(2)、sklearn.preprocessing.StandardScaler()
可保存训练集中的均值、方差参数,然后直接用于转换测试集数据。

scaler = preprocessing.StandardScaler().fit(X)
scaler.transform(X)  
array([[ 0.        , -1.22474487,  1.33630621],
       [ 1.22474487,  0.        , -0.26726124],
       [-1.22474487,  1.22474487, -1.06904497]])
scaler.mean_
array([ 1.        ,  0.        ,  0.33333333])
scaler.var_
array([ 0.66666667,  0.66666667,  1.55555556])

二、缩放到指定范围

将属性缩放到一个指定的最大和最小值(通常是1-0)之间,这样处理可对方差非常小的属性增强其稳定性,也可维持稀疏矩阵中为0的条目。
preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)
计算公式:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
其中
feature_range : tuple (min, max), default=(0, 1)

minmaxscaler = preprocessing.MinMaxScaler().fit(X)
minmaxscaler.transform(X)
array([[ 0.5       ,  0.        ,  1.        ],
       [ 1.        ,  0.5       ,  0.33333333],
       [ 0.        ,  1.        ,  0.        ]])
minmaxscaler.scale_
array([ 0.5       ,  0.5       ,  0.33333333])
 minmaxscaler.min_ 
 array([ 0.        ,  0.5       ,  0.33333333])

也可直接应用fit_transform(X)实现fit和transform功能。

三、正则化

对每个样本计算其p-范数,再对每个元素除以该范数,这使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。如果后续要使用二次型等方法计算两个样本之间的相似性会有用。
preprocessing.Normalizer(norm=’l2’, copy=True)

normalizer = preprocessing.Normalizer().fit(X)
normalizer.transform(X)
array([[ 0.40824829, -0.40824829,  0.81649658],
       [ 1.        ,  0.        ,  0.        ],
       [ 0.        ,  0.70710678, -0.70710678]])

几个概念

1-范数:向量各分量绝对值之和
2-范数:向量长度
最大范数:向量各分量绝对值的最大值
p-范数的计算公式:||X||p=(|x1|^p+|x2|^p+…+|xn|^p)^1/p

### 特征缩放方案对比分析 对于存在异常值的均匀分布数据,选择合适的特征缩放方案至关重要。以下是四种常见缩放器(`StandardScaler`、`MinMaxScaler`、`RobustScaler` 和 `Normalizer`)的特点及其适用性的详细分析。 #### StandardScaler `StandardScaler` 将数据标准化为零均值和单位方差。其计算方式基于整个样本的均值和标准差。然而,在存在异常值的情况下,这种缩放可能会受到显著影响,因为异常值会拉高或压低整体统计量[^1]。因此,当数据集中含有较多异常值时,`StandardScaler` 的表现可能不够理想。 #### MinMaxScaler `MinMaxScaler` 通过将特征重新调整到指定范围(通常是 `[0, 1]` 或 `[-1, 1]`),实现线性转换。该方法依赖于最小值和最大值来定义新的尺度。如果数据中存在极端异常值,则它们可能导致其他正常数值被压缩在一个非常小的范围内,从而降低模型的学习能力[^3]。因此,`MinMaxScaler` 对异常值较为敏感,不适用于含大量异常值的数据集。 #### RobustScaler `RobustScaler` 使用四分位数(即第25百分位和第75百分位之间的区间)代替传统的均值和标准差来进行缩放。这种方法能够有效减少异常值对缩放过程的影响,因为它仅关注中间部分的数据分布而非全局极值。对于包含异常值的均匀分布数据而言,`RobustScaler` 是一种更为稳健的选择。 #### Normalizer `Normalizer` 主要用于将每个样本规范化为其欧几里得范数等于1的形式。这意味着它会对每条记录单独操作而不是跨列处理全体特征。尽管此技术可以保持某些特定类型的结构不变形,但它并不特别适合解决因异常值引起的问题;相反,它的主要用途在于文本挖掘等领域中的向量化表示优化[^3]。所以,除非特殊需求指向使用 `Normalizer`,否则一般不会推荐将其作为应对异常值的主要手段。 综合以上讨论可以看出: - **`StandardScaler`** 不适合作为首选项,因其易受异常值干扰; - **`MinMaxScaler`** 同样面临相似局限性,不适合强噪声环境下的应用场合; - **`RobustScaler`** 则凭借其中心趋势评估机制成为抗噪性能最佳候选者之一; - 而 **`Normalizer`**, 更倾向于专门领域内的应用场景,并非通用解决方案。 最终结论是在面对带有明显离群点且服从近似均匀分布特性之资料状况下,选用 **`RobustScaler`** 可能最为恰当合理。 ```python from sklearn.preprocessing import RobustScaler scaler = RobustScaler() X_scaled = scaler.fit_transform(X) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值