様々な前処理
データの前処理として、主にStandardScaler、RobustScaler、MinMaxScaler、Normalizerの変換の4つがある。
StandardScaler
平均が0、分散が1になるようにする(z変換)。
※特徴量の最大値や最小値が、ある範囲に入ることを保証するものではない。
RobustScaler
StandardScalerに似ていて、個々の特徴量が一定の範囲に入るように変換する。
平均値や分散の代わりに、中央値と四分位数を用いる。
※外れ値を無視する
MinMaxScaler
データがちょうど0から1の間に入るように変換する。
Normalizerの変換
図からもわかるように他の3つとはかなり異なる。
個々のデータポイントを特徴量ベクトルがユークリッド長1になるように変換する。
ユークリッド長とは
ユークリッド空間の意味を分かりやすく説明する - 具体例で学ぶ数学
言い換えると、データポイントを半径1の円(高次元なら超球面)に投射する。
全てのデータポイントに対して、それぞれ異なるスケール変換が行われる。
方向だけが問題になる場合に用いられる。
勾配ブースティング回帰木(勾配ブースティングマシン)
勾配ブースティングでは一つ目の決定木の誤りを、次の決定木で修正するようにして決定木を作っていく。
乱数性はないが、強力な事前枝切りが用いられる。
浅い決定木(弱学習機)を多数組み合わせるから、メモリが小さくなり予測も速くなる。
パラメータの影響を受けやすいモデルであるが、正しくパラメータを設定すれば勾配ブースティング回帰木の方が性能が良い。
パラメータは事前枝切りとアンサンブル、learning_rate(学習率)がある。
learning_rateを大きくすると、決定木同士の補正が強くなりモデルが複雑になる。
ランダムフォレスト
n_estimatorsで決定木の数を、n_jobsでCPUのコア数を指定することが出来る。
ランダムフォレストは乱数のシード(random_state)を変更すると、構築されるモデルが大きく変わる可能性がある。
決定木の数が増えると、シードの選択の影響を受けにくくなる。
max_featuresを大きくすると、ランダムフォレスト中の決定木が似たようになる。
そのため、max_featuresを小さくすると過剰適合が低減する。
決定木基礎
決定木の事前枝切り、枝切り。
決定木では枝切りをしないと過剰適合が起きやすくなる。
sckit-learnでは事前枝切りしか実装がされていない。
sklearnのDecisionTreeClassifierではmax_depthを指定することで決定木の深さを決めることが出来る。
max_depthを4とした場合は、深さが4になる(決定木の質問を4回する)