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]#
使用分位數資訊轉換特徵。
此方法會轉換特徵以符合均勻分佈或常態分佈。因此,對於給定的特徵,此轉換會傾向於分散最常出現的值。它還可以減少(邊緣)離群值的影響:因此這是一種穩健的預處理方案。
此轉換會獨立應用於每個特徵。首先,使用特徵的累積分布函數估計值將原始值映射到均勻分佈。然後,使用相關的百分位函數將獲得的值映射到所需的輸出分佈。對於落在擬合範圍以下或以上的新/未見數據的特徵值,將會映射到輸出分佈的邊界。請注意,此轉換是非線性的。它可能會扭曲以相同尺度測量的變量之間的線性相關性,但會使以不同尺度測量的變量更直接地可比較。
請參閱使用者指南以了解更多資訊。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
要轉換的數據。
- axisint,預設值 = 0
用於計算均值和標準差的軸。如果為 0,則轉換每個特徵;否則(如果為 1),則轉換每個樣本。
- n_quantilesint,預設值 = 1000 或 n_samples
要計算的百分位數。它對應於用於離散化累積分布函數的地標數量。如果 n_quantiles 大於樣本數,則 n_quantiles 會設定為樣本數,因為較大的百分位數並不會更好地近似累積分布函數估計器。
- output_distribution{‘uniform’, ‘normal’},預設值 = ‘uniform’
轉換後數據的邊際分佈。選項為 ‘uniform’ (預設值) 或 ‘normal’。
- ignore_implicit_zerosbool,預設值 = False
僅適用於稀疏矩陣。如果為 True,則會捨棄矩陣的稀疏項目以計算百分位數統計資訊。如果為 False,則這些項目會被視為零。
- subsampleint 或 None,預設值 = 1e5
用於估計百分位數以提高計算效率的最大樣本數。請注意,對於值相同的稀疏和密集矩陣,子採樣程序可能有所不同。設定
subsample=None
以停用子採樣。在版本 1.5 中新增:已新增
None
選項以停用子採樣。- random_stateint、RandomState 實例或 None,預設值 = None
決定用於子採樣和平滑雜訊的亂數產生。如需更多詳細資訊,請參閱
subsample
。傳遞一個 int 以在多個函數調用中產生可重複的結果。請參閱詞彙表。- copybool,預設值 = True
如果為 False,則嘗試避免複製並就地轉換。這不保證始終就地工作;例如,如果資料是具有 int dtype 的 numpy 陣列,即使 copy=False,也會傳回副本。
在版本 0.23 中變更:
copy
的預設值在 0.23 中從 False 變更為 True。
- 傳回值:
- Xt形狀為 (n_samples, n_features) 的 {ndarray, 稀疏矩陣}
轉換後的資料。
另請參閱
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([...])