sklearn.preprocessing.RobustScaler(解释和原理,分位数,四分位差)

本文详细介绍了sklearn.preprocessing.RobustScaler的原理,它使用百分位数进行数据缩放,不受极端值影响。通过示例展示了如何使用该工具并探讨了其在处理少量数据时可能产生的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:sklearn.preprocessing.RobustScaler(解释和原理,分位数,四分位差)

提示:以下是本篇文章正文内容,下面案例可供参考

一、RobustScaler 是什么?

RobustScaler 的居中和缩放统计基于百分位数,因此不会受到少数非常大的边缘异常值的影响。
计算公式如下(具体计算公式以官网提供的代码为准):

value_result = (value-Media)/(Q1-Q3)
Q1的位置 = 1 * (n + 1) / 4
Q3的位置 =  3 *(n + 1) / 4
n : 表示数据的个数。
media : 中位数
Q1 : 是第 1 个四分位数(第 25 个分位数)
Q3 : 第 3 个四分位数(第 75 个分位数)

在这里插入图片描述

二、代码

1.代码

import pandas as pd
from sklearn.preprocessing import RobustScaler

data = pd.DataFrame(
    {
   
        'a': [1, 2, 3, 4, 6, 5, 6],
        'b': 
### 数据量纲不一致的解决方案 在机器学习中,当数据集中的特征具有不同的单位或数量级时,可能会导致某些算法表现不佳。这是因为许多机器学习模型(如支持向量机、K近邻、神经网络等)对输入数据的距离敏感,而距离计算会受到不同量纲的影响。为了缓解这个问题,可以采用 **特征缩放** 方法。 #### 常见的特征缩放方法及其适用场景 1. **最小最大缩放(Min-Max Scaling)** 最小最大缩放是一种线性变换技术,用于将数据映射到指定范围(通常是 [0, 1] 或 [-1, 1])。这种方法适用于需要保持数据分布形状不变的情况。 示例代码如下: ```python import numpy as np from sklearn.preprocessing import MinMaxScaler # 创建示例数据 data = np.array([[1, 2], [2, 4], [3, 6], [4, 8], [5, 10]]) # 定义并应用缩放器 scaler = MinMaxScaler(feature_range=(0, 1)) scaled_data = scaler.fit_transform(data) print("原始数据:\n", data) print("\n区间缩放后的数据:\n", scaled_data) ``` 这种方法的优点在于其简单性直观性[^3],但它对异常值较为敏感。 2. **Z-Score 标准化(Standardization)** Z-Score 标准化通过减去均值并将结果除以标准差的方式,使数据呈现零均值单位方差的特点。该方法适合于假设数据服从正态分布的情形,并能有效减少极端值的影响。 手动实现 Z-Score 的函数可表示为: ```python import numpy as np def z_score(df): N, x_z = df.shape[0], [] for item in df.columns.tolist(): mean = np.mean(df[item]) std = np.std(df[item]) Z = (df[item] - mean) / std x_z.append(Z) return np.array(x_z).T # 调用自定义函数 standardized_data = z_score(df) print(standardized_data[:5]) # 输出前五行标准化后的数据 ``` 使用 `sklearn` 实现则更为简洁: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() standardized_data = scaler.fit_transform(data) print("标准化后的数据:\n", standardized_data) ``` 此外,对于非高斯分布的数据,也可以考虑其他转换方式,比如 Box-Cox 变换或 Yeo-Johnson 变换[^5]。 3. **Robust Scaler** Robust Scaler 是一种基于分位数的方法,它利用中位数四分位距(IQR),而不是平均值标准差来进行缩放。因此,这种技术非常适合存在大量异常值的数据集。 示例代码如下: ```python from sklearn.preprocessing import RobustScaler robust_scaler = RobustScaler() transformed_data = robust_scaler.fit_transform(data) print("经过鲁棒缩放后的数据:\n", transformed_data) ``` 鲁棒缩放的优势在于能够抵抗异常值带来的影响[^4]。 4. **归一化(Normalization)** 归一化通常指 L2 范数归一化,即将每条样本的数值按比例缩小至长度为 1 的向量空间内。此操作特别适配于文本分类等领域内的余弦相似度计算需求。 下面是一个简单的例子: ```python from sklearn.preprocessing import Normalizer normalizer = Normalizer(norm='l2') normalized_data = normalizer.transform(data) print("L2范数归一化后的数据:\n", normalized_data) ``` --- ### 总结 针对因量纲差异引发的问题,推荐优先尝试上述提到的各种特征缩放手段之一。具体选择取决于实际应用场景以及目标算法的要求: - 如果关注的是相对变化幅度而非绝对值,则可以选择 **MinMaxScaling**; - 若需消除单位效应同时保留原有分布特性,应选用 **Standardization**; - 当面临严重偏斜或者含有较多噪声点的数据集合时,不妨试试看更加稳健可靠的 **Robust Scaler** 方案。 以上便是关于如何应对由于量纲不统一所造成困扰的一些见解[^1][^2][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值