標準化をするときに、強い外れ値に引っ張られ、うまく行かないことがあります。
それを避けるためにロバストな標準化方法がないか調べたところ、中央値と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四分位)で割ったものとなります。
といった感じですね。
quantile_range
では、この分子の範囲を変え、
with_scaling
ではそもそも割るのか、
with_centering
ではQ2で引くのかを調整しています。