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 分为训练集和测试集。这将使模型评估产生偏差,因为信息会从测试集泄露到训练集。一般来说,我们建议使用QuantileTransformer
内 Pipeline 为了防止大部分数据泄露风险:' 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([...])