スキルアップしたい

【kaggle入門】随時更新 よく使う前処理集【営業だってプログラミング】

2019年8月8日

  1. HOME >

【kaggle入門】随時更新 よく使う前処理集【営業だってプログラミング】

2019年8月8日

【随時更新】kaggleでよく使う前処理集【営業だってプログラミング】

kaggleで与えられている学習データ、テストデータは、そのままではアルゴリズムにかけられません。

ほとんどのアルゴリズムは、文字列や欠損値を補完してあげる必要があるからです。

ここでは、アルゴリズムにかけるための最低限の前処理である「文字列のエンコード」や「欠損値の補完」、「外れ値の除外」など、基本的な内容を説明しています。

「アルゴリズムにかけるための最低限の前処理」なので、モデル精度については全く考慮していません。

プログラミング初心者である我々にとっては、submitできる状態に持っていくことが一つのハードル。

まずは最低限、

  • 与えられたデータからモデルを構築する
  • 構築したモデルで予測をして、submitするためのcsvを生成する

事に集中しましょう。

文字列のエンコード

あらかじめ与えられている学習データやテストデータは、データフレームとして読み込まれている前提です。

多くの場合「x_train」「x_test」という名前にしていると思いますので、それを前提とします。

とにかく文字列を数値にしたい場合

コーディング例は以下です。

列のtypeが「object」のものを全て数値にエンコードしています。

ここで説明しているエンコードの手法は「とにかく文字列をカテゴリに当てはめる方法(OrdinalEncording)」です。

同じ文字列は一つの同じ数値として、数値を割り振っていくものです。

当然、文字列と文字列の間の相関性や近さ、序列などの情報は失われてしまいます。

例として、

  • 東京都
  • 神奈川県
  • 千葉県
  • 埼玉県
  • 鳥取県
  • 島根県

というカテゴリ列だった場合、恐らく「東京都・神奈川県・千葉県・埼玉県」の4つは近しい関係、「鳥取県・島根県」の2つは近しい関係であり、この2つのセグメントは遠い関係であることが言えると思いますが、その関係性は考慮されません。

エンコードする数値を明示的に指定したい場合

  • 「雨」を、「0」に
  • 「曇り」を、「1」に
  • 「晴れ」を、「2」に

というように、エンコードする数値を明示的に指定したい場合があります。

その場合のサンプルコードは以下です。

※もっと簡略化して書くこともできますが、分かりやすいように冗長に記述しています。

「雨」「曇り」「晴れ」の3値はそれぞれ、「雨⇔曇り⇔晴れ」という関係性があります(雨と曇りは近く、雨と晴れは遠い)。

何も考えずにOrdinalEncordingやOne-Hot-Encordingするとこの特徴表現が失われてしまいますので、モデル精度向上のためには、上記の通り明示的(序列をつけて)に示してあげる必要があります。

欠損値の補完

これは幾つか方法がありますので、個別に説明していきます。

中央値で補完する場合

その列のmedianで埋めるやり方。無難な方法です。

ゼロで補完する場合(ゼロ埋め)

とりあえず、欠損値を全てゼロで埋めておくやり方です。

一方で、空のカラムには意味があると考えた時に、ゼロではなく「9999」など、途方もない数値で置き換えておくやり方もあります。

上記は全ての列について適用されてしまいますが、特定の列に対し、特定の値で埋めたい時は以下です。

何で埋めるのがベターか?については、元データによって異なります。

外れ値の除外

例えば、特徴量名「年齢」の値が18歳~200歳の範囲を取る場合、200については外れ値です。

200歳の人は現実的ではないので、異常値として除外する必要があります。

例えば「18歳以上、100歳未満の範囲に限定したい」場合のサンプルコードは以下です。

【随時更新】kaggleでよく使う前処理集【営業だってプログラミング】 まとめ

前処理はかなり奥が深い世界です。

ここでは最もシンプルなエンコードと欠損値補完の方法を説明しましたが、今後気が向いたら他のエントリーも書いてみたいと思ってます。

その他、pythonやkaggle、AI・機械学習といった記事のまとめはこちらです。

【2020年版】python・kaggle関連の記事まとめ【営業だってプログラミング】

続きを見る

ここからは、実際に私が購入し、おすすめできると思った本を紹介してみたいと思います。

 

機械学習のための「前処理」入門

 

まずはこちら。「機械学習のための『前処理』入門」です。

 

  • これから機械学習を始めてみたい
  • kaggleやSIGNATEにチャレンジしてみたい

 

という方には最適な本。個人的には一番のおすすめです。

 

データモデルの精度向上には特徴量エンジニアリングが不可欠。

 

というかこれが全てと言っても過言ではないのですが、各種環境準備の方法やコーディングの詳細に至るまで、誰にでも分かりやすく書かれています。

 

この一冊さえあれば、とりあえずkaggleにトライすることができます。

 

 

スラスラ読める Pythonふりがなプログラミング

 

Pythonのコーディングが、全てふりがなで解説されている、究極に親切な解説本です。

 

  • 「機械学習のための『前処理』入門」は、自分には難しすぎた
  • 英語アレルギーがありpythonコードに触れることすらできない

 

という方は、まずはこちらをご一読される事をおすすめします。

 

※但し、慣れてきたらすぐに上記「機械学習のための『前処理』入門」に移行される事をおすすめします。

 

 

仕事ではじめる機械学習

 

定番のオライリーです。

 

こちらはkaggleやSIGNATEなどのコンペティションというよりは、機械学習をビジネスで生かしていくためにはどうすれば良いか?という観点の内容が充実しています。

 

pythonコードの記述に留まらず、

 

  • 機械学習プロジェクトを成功させるにはどうすれば良いか
  • KKD(勘・経験・度胸)を掲げる抵抗勢力とはどう付き合うべきか

 

というような、実務に即した内容は個人的には本当に参考になったのですが、オライリーは初心者にはかなり敷居が高いので、まずは本屋で立ち読みして、レベル感をチェックしてみるのが良いと思います。

 

 

人工知能は人間を超えるか

 

pythonのコーディングからは離れますが、もしこの本を読んでいない人がいたら必ず一度は目を通しておいた方が良いです。

 

この界隈では有名な、東大の松尾豊先生の著書「人工知能は人間を超えるか」。

 

いわゆるAI・人工知能、機械学習といった昨今のキーワードを中心に、過去の歴史からここ最近の動き、今後の動向に至るまでを、平易な表現で丁寧に解説されています。

 

また日本ディープラーニング協会が開催する「ディープラーニング ジェネラリスト検定(通称:G検定)」の推薦図書の一つでもあります。

 

全てのビジネスマンにおすすめできる一冊。中古でもkindleでも構いませんので、これだけは目を通しておいた方が良いです。

 

-スキルアップしたい

Copyright© 営業アップデート , 2020 All Rights Reserved.