そもそもデータをそのままアルゴリズムに突っ込むのは正しいのか?
たとえばPCAの場合データの平均を0にしてからPCAにかける必要があります。
ところでデータは不完全な形でやってきます。今回は次のような車のデータを考えます。 みての通り「文字」「NaN」が混在しています。まずはこれをどうにかする必要があります。対処法は主に次の3パターンかと思います。LabelEncorder
例えば[dog,cat,dog,mouse,cat]をに変換するOneHotEncorder
例えばdog cat monkey dogの4つのデータを[dog, cat, monkey]で表しそれぞれの4つにします
LabelBinarizer
OneHotEncorderとほぼ同じ。 さて、本題のデータの前処理なんですが、- 標準化(standardization)
- 正規化(normalization)
標準化
ただしは平均、分散とする。 こうすると平均、分散の分布へと変換されます。
正規化
ただしはデータの最大値、最小値とする。 こうすると新たなデータはへとスケーリングされます。標準化と違い範囲が固定されるわけではありません。
で、なんでスケーリングする必要があんの?
もちろんです。スケーリングなんかせんでもいい
という場合ももちろんあります。例えば、生徒会長を決めるための投票データは「支持する」or「支持しない」のバイナリになります。この場合スケーリングをする必要がないのは明らかでしょう。他には男女別の五教科の点数のデータを分析する際、僕は前処理をする必要性を感じません。なぜならデータの範囲はですし、数値がめちゃめちゃ大きいわけでもないからです。では、いつスケーリングやねん
これは正直難しい問題だと思います。なにを分析したいのかという状況・目的に大きく左右されると思います。ですが、冒頭でも言ったようにPCAなど特定のアルゴリズムは特定の前処理を必要とします。 僕の経験上、正規化よりも標準化の方がポピュラーです。というか僕は正規化はしたことないです。理由としては標準化にはセンタリングが含まれるからです。また、そもそも世の中のほとんどデータは正規分布に従っているんです。IQのデータとか身長とか標高でさえ正規分布に従うようです。加えて数学の世界にはいい定理があります。「大数の法則」と「中心極限定理」です。- 大数の法則: データ超多かったら、その分布の真の平均と実測値の平均が一致!!
- 中心極限定理: データ超多かったら、正規分布に従うと思ってOK!!
- ロジスティック回帰/ソフトマックス回帰
- ニューラルネットワーク/SVM
- https://www.jeremyjordan.me/batch-normalization/
- https://stats.stackexchange.com/questions/41704/how-and-why-do-normalization-and-feature-scaling-work
- https://www.kaggle.com/rtatman/data-cleaning-challenge-scale-and-normalize-data
- https://towardsdatascience.com/encoding-categorical-features-21a2651a065c
- http://mlr.cs.umass.edu/ml/datasets/Automobile