外れ値に強い標準化をしたい(RobustScalerを使う)

標準化をするときに、強い外れ値に引っ張られ、うまく行かないことがあります。
それを避けるためにロバストな標準化方法がないか調べたところ、中央値とIQRを用いたものがありました。

また、sklearnに実装されていました。

コード

from sklearn.preprocessing import RobustScaler

# X 適当な特徴量

rs = RobustScaler().fit(X)
rs.transform(X)

コード自体は他のpreprocessingと同じです。
RobustScalerの引数としては、 - with_centering:中央値との距離を使うか(デフォルト: True) - with_scaling:対象範囲で割るか(デフォルト:True) - quantile_range:上記の割る範囲(デフォルト:(25.0,75.0))

になります。

そのため、デフォルトでは、
各値xをmedianをIQR(第1四分位~第3四分位)で割ったものとなります。


\frac{x - Q2 }{ Q3 - Q1}

といった感じですね。
quantile_rangeでは、この分子の範囲を変え、
with_scalingではそもそも割るのか、
with_centeringではQ2で引くのかを調整しています。