機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践という本を読んだので、今日はその備忘録です。
今回は対数変換について。具体的には、高校で習う対数関数(でお馴染みのやつ)を使って、特徴量のスケール*1を変換しようというお話しです。
早速、説明に入っていきましょう。
(以下、図は原著者のGitHub*2より引用。)
上のグラフは、底10の対数関数(俗に言う常用対数)のグラフです。
今回は、これを使って特徴量の数値データを変換(写像)します。変換とか写像なんて大そうなことを言っていますが、要はのに数値を代入するだけです。
例えば、上記グラフで横軸が200のときは縦軸が2.3辺りを示していますよね()。
こんな感じで変換していくので、例えば]の範囲は]、]の範囲は]に写されます。軸の1から100までの(小さな)範囲が軸の0から2に、軸の100から1000までの(大きな)範囲が軸で2から3に写されるということです。
つまり対数変換によって、のスケールの小さい部分が拡大され、大きい部分が縮小されるんですね。
ではこの変換の何が嬉しいのか?
例えば、以下の図の、上側のグラフのようなヒストグラムで表されるデータがあったとしましょう。
値の小さい範囲(0付近)にデータが集中していて、やや裾が長い分布になっています。
これを対数変換することで、下側のヒストグラムのように値の集中が緩和され、横軸上でのデータの広がりが大きくなっています。(0.0に位置するデータを無視すると)お馴染みの正規分布のような分布になっていますね。詳しくは他に譲りますが、対数変換によって、このように扱いやすい分布に近似できるのです。
こういった変換があることを頭の片隅に置いておくと、生データを見て「このままじゃ扱いにくいな」と感じた時に役立つかもしれませんね。
*1:数値データのとる範囲とその規模のこと
コメント