power_transform#

sklearn.preprocessing.power_transform(X, method='yeo-johnson', *, standardize=True, copy=True)[原始碼]#

參數化的單調轉換,使數據更接近高斯分佈。

冪轉換是一系列的參數化單調轉換,用於使數據更接近高斯分佈。這對於處理異方差性(非恆定變異數)相關的模型問題,或其他需要常態性的情況很有用。

目前,power_transform 支援 Box-Cox 轉換和 Yeo-Johnson 轉換。最佳的參數會透過最大概似估計法來估算,以穩定變異數並最小化偏度。

Box-Cox 轉換要求輸入數據必須是嚴格正數,而 Yeo-Johnson 轉換則支援正數或負數數據。

預設情況下,轉換後的數據會進行零均值、單位變異數的正規化處理。

請參閱使用者指南以了解更多資訊。

參數:
X形狀為 (n_samples, n_features) 的類陣列

使用冪轉換的數據。

method{‘yeo-johnson’, ‘box-cox’}, 預設值為 ‘yeo-johnson’

冪轉換的方法。可用的方法有:

  • ‘yeo-johnson’ [1],適用於正數和負數值

  • ‘box-cox’ [2],僅適用於嚴格正數值

於 0.23 版本變更:在 0.23 版本中,method 參數的預設值從 ‘box-cox’ 變更為 ‘yeo-johnson’。

standardizebool,預設值為 True

設定為 True 會將轉換後的輸出套用零均值、單位變異數正規化。

copybool,預設值為 True

如果為 False,則會盡量避免複製並就地轉換。但這不保證始終可以就地工作;例如,如果數據是帶有整數 dtype 的 numpy 陣列,即使 copy=False,也會回傳一個副本。

回傳值:
X_trans形狀為 (n_samples, n_features) 的 ndarray

轉換後的數據。

另請參閱

PowerTransformer

使用 Transformer API 進行等效轉換(例如,作為預處理Pipeline的一部分)。

quantile_transform

使用參數 output_distribution='normal' 將數據對應到標準常態分佈。

注意事項

NaN 會被視為缺失值:在 fit 中會被忽略,並在 transform 中保留。

如需比較不同的縮放器、轉換器和正規化器,請參閱:比較不同的縮放器對具有離群值的數據的影響

參考文獻

[1]

I.K. Yeo and R.A. Johnson, “A new family of power transformations to improve normality or symmetry.” Biometrika, 87(4), pp.954-959, (2000).

[2]

G.E.P. Box and D.R. Cox, “An Analysis of Transformations”, Journal of the Royal Statistical Society B, 26, 211-252 (1964).

範例

>>> import numpy as np
>>> from sklearn.preprocessing import power_transform
>>> data = [[1, 2], [3, 2], [4, 5]]
>>> print(power_transform(data, method='box-cox'))
[[-1.332... -0.707...]
 [ 0.256... -0.707...]
 [ 1.076...  1.414...]]

警告

有數據洩漏的風險。除非您知道自己在做什麼,否則請勿使用 power_transform。一個常見的錯誤是在將數據拆分為訓練集和測試集之前,將其應用於整個數據。這會使模型評估產生偏差,因為資訊會從測試集洩漏到訓練集。一般來說,我們建議在 Pipeline 中使用 PowerTransformer,以防止大多數數據洩漏的風險,例如:pipe = make_pipeline(PowerTransformer(), LogisticRegression())