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)[源代码]#

使用分位数信息变换要素。

此方法将特征转换为遵循均匀或正态分布。因此,对于给定的功能,这种转换往往会分散最频繁的值。它还减少了(边缘)异常值的影响:因此,这是一个强大的预处理方案。

转换独立应用于每个特征。首先,使用特征累积分布函数的估计将原始值映射到均匀分布。然后使用相关的分位数函数将获得的值映射到所需的输出分布。低于或高于适合范围的新/未见数据的特征值将被映射到输出分布的边界。请注意,这种变换是非线性的。它可能会扭曲以相同尺度测量的变量之间的线性相关性,但使以不同尺度测量的变量更具直接可比性。

阅读更多的 User Guide .

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

要转换的数据。

axisint,默认=0

轴用于计算平均值和标准差。如果为0,则变换每个特征,否则(如果为1)变换每个样本。

n_quantilesint,默认=1000或n_samples

要计算的分位数。它对应于用于离散化累积分布函数的地标数量。如果n_分位数大于样本数量,则将n_分位数设置为样本数量,因为越大的分位数不会给出累积分布函数估计器的更好逼近。

output_distribution'uniform','normal'},default='uniform'

转换数据的边缘分布。选择是“统一”(默认)或“正常”。

ignore_implicit_zeros布尔,默认=假

仅适用于稀疏矩阵。如果为True,则丢弃矩阵的稀疏项以计算分位数统计量。如果为假,这些条目将被视为零。

subsampleint或无,默认= 1 e5

用于估计计算效率的分位数的最大样本数。请注意,对于值相同的稀疏矩阵和密集矩阵,子采样过程可能会有所不同。通过设置禁用子采样 subsample=None .

Added in version 1.5: 的选项 None 添加了禁用子采样的功能。

random_stateint,RandomState实例或无,默认=无

确定子采样和平滑噪音的随机数生成。请参阅 subsample 了解更多详细信息。传递int以获得跨多个函数调用的可重复结果。看到 Glossary .

copy布尔,默认=True

如果为假,请尝试避免复制并就地转换。并不能保证这始终有效;例如,如果数据是具有int dype的numpy数组,即使具有Copy=False,也会返回副本。

在 0.23 版本发生变更: 的默认值 copy 0.23中从False更改为True。

返回:
Xt{ndarray,sparse matrix}的形状(n_samples,n_features)

转换后的数据。

参见

QuantileTransformer

使用Transformer API执行基于分位数的缩放(例如,作为预处理的一部分 Pipeline ).

power_transform

使用功率变换将数据映射到正态分布。

scale

执行更快的标准化,但对异常值的稳健性较差。

robust_scale

执行强有力的标准化,消除异常值的影响,但不会将异常值和内部值置于相同的范围内。

注意到

NaN被视为缺失值:在适应中被忽略,并在变换中被保留。

警告

数据泄露风险

不要使用 quantile_transform 除非你知道你在做什么。一个常见的错误是将其应用于整个数据 before 分为训练集和测试集。这将使模型评估产生偏差,因为信息会从测试集泄露到训练集。一般来说,我们建议使用 QuantileTransformerPipeline 为了防止大部分数据泄露风险:' pipe = make_pipeline(QuantileTransformer(),LogisticRegulation())'。

有关不同缩放器、转换器和规范器的比较,请参阅: 比较不同缩放器对数据的影响与离群值 .

示例

>>> 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([...])