quantile_transform#
- sklearn.preprocessing.quantile_transform(X, *, axis=0, n_quantiles=1000, output_distribution='uniform', ignore_implicit_zeros=False, subsample=100000, random_state=None, copy=True)[source]#
使用分位数信息转换特征。
此方法将特征转换为服从均匀分布或正态分布。因此,对于给定的特征,此转换倾向于分散最常见的值。它还减少了(边缘)异常值的影响:因此,这是一种稳健的预处理方案。
该转换独立应用于每个特征。首先,使用特征的累积分布函数估计将原始值映射到均匀分布。然后使用相关的分位数函数将获得的值映射到所需的输出分布。对于落入或超出拟合范围的新/未见数据特征值将被映射到输出分布的边界。请注意,此转换是非线性的。它可能会扭曲在同一尺度上测量的变量之间的线性相关性,但使在不同尺度上测量的变量更具直接可比性。
更多信息请参阅 用户指南。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
要转换的数据。
- axisint, default=0
用于计算均值和标准差的轴。如果为 0,则转换每个特征,否则(如果为 1)转换每个样本。
- n_quantilesint, default=1000 or n_samples
要计算的分位数数量。它对应于用于离散化累积分布函数的标志点数量。如果 n_quantiles 大于样本数量,则 n_quantiles 设置为样本数量,因为更多的分位数并不会提供更好的累积分布函数估计器近似。
- output_distribution{‘uniform’, ‘normal’}, default=’uniform’
转换后数据的边际分布。选项为 ‘uniform’(默认)或 ‘normal’。
- ignore_implicit_zerosbool, default=False
仅适用于稀疏矩阵。如果为 True,则丢弃矩阵的稀疏条目以计算分位数统计量。如果为 False,则这些条目被视为零。
- subsampleint or None, default=1e5
用于估计分位数的最大样本数量,以提高计算效率。请注意,对于值相同但类型为稀疏和密集矩阵,子采样过程可能有所不同。通过设置
subsample=None禁用子采样。版本 1.5 新增: 添加了禁用子采样的选项
None。- random_stateint, RandomState instance or None, default=None
确定子采样和平滑噪声的随机数生成。有关更多详细信息,请参阅
subsample。传入一个 int 以在多次函数调用中获得可重现的结果。请参阅 词汇表。- copy布尔值, 默认为 True
如果为 False,则尝试避免复制并就地转换。不能保证总是就地工作;例如,如果数据是具有 int dtype 的 numpy 数组,即使 copy=False,也会返回一个副本。
版本 0.23 更改:
copy的默认值从 False 更改为 True。
- 返回:
- Xt形状为 (n_samples, n_features) 的 {ndarray, sparse matrix}
转换后的数据。
另请参阅
QuantileTransformer使用 Transformer API 执行基于分位数的缩放(例如,作为预处理
Pipeline的一部分)。power_transform使用幂转换将数据映射到正态分布。
scale执行标准化,速度更快,但对异常值不太稳健。
robust_scale执行稳健标准化,消除异常值的影响,但不会将异常值和正常值放在同一尺度上。
注意事项
NaN 被视为缺失值:在拟合过程中忽略,在转换过程中保持。
警告
数据泄露风险
除非您知道自己在做什么,否则请勿使用
quantile_transform。一个常见的错误是在将数据拆分为训练集和测试集之前将其应用于整个数据。这会使模型评估产生偏差,因为信息会从测试集泄漏到训练集。通常,我们建议在 Pipeline 中使用QuantileTransformer以防止大多数数据泄漏风险:pipe = make_pipeline(QuantileTransformer(), LogisticRegression())。有关不同缩放器、变换器和归一器的比较,请参阅:比较不同缩放器对异常值数据的效果。
示例
>>> import numpy as np >>> from sklearn.preprocessing import quantile_transform >>> rng = np.random.RandomState(0) >>> X = np.sort(rng.normal(loc=0.5, scale=0.25, size=(25, 1)), axis=0) >>> quantile_transform(X, n_quantiles=10, random_state=0, copy=True) array([...])