@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Kaggle: [30 Days of ML] Day 12

今日の課題。だいぶ多い。

  1. Read this tutorial (from Lesson 1 of the Intermediate ML course)
  2. Complete this exercise (from Lesson 1 of the Intermediate ML course)
  3. Read this tutorial (from Lesson 2 of the Intermediate ML course)
  4. Complete this exercise (from Lesson 2 of the Intermediate ML course)
  5. Read this tutorial (from Lesson 3 of the Intermediate ML course)
  6. Complete this exercise (from Lesson 3 of the Intermediate ML course)

これまで↑のリストを Markdown て手書きしていて、リンクは Gmail から直接コピペできないので(リダイレクタが挟まるため)全部リンクを開いてからコピペし直していた。macOS のメモアプリとか Evernote に貼り付けるとリッチテキストとしてリンク付きでペーストできるので、はてなブログ側の編集モードを変えたらリッチテキストそのまま貼り付けできなかったっけ?と思い出してやってみたら案の定一発だった。これまで Google アナリティクス用のクエリストリングを消して貼っていたのが、この方式だと消すのがさらにちょっと手間だけど、まあもういいか、という気分に。

今日学んだことその一、欠損値の埋め方。

  1. 欠損値を含む列を削除する
  2. 欠損値を適当な値で埋める(Imputation)なんでこう呼ぶんだろう?適当な値は、平均値だったり最頻値だったりゼロだったり。
  3. 欠損値を適当な値で埋めた上で、「元々その列の値があったかどうか」を示す真偽値の列を追加する。あまり役に立たないことが多い、らしい。

演習で「さあ、自由に改善してサブミットしよう!」みたいなので、コードの書き方が難しかった。やはり Pandas の演習もやった方がいい。Public score は 16489.64527 まで向上した。

今日学んだことその二、Categorical Variables(日本語では何というんだろう)。要は、値のばらつきが少ないデータのこと。そういう列のデータを学習するとモデルの性能が悪化するらしい。これも扱い方は三つあり、

  1. その列を削除する
  2. 値を順序づけた数値に変換する(Ordinal Encoding)。なぜこれが効果的なのか・・"Good" "Bad" みたいな文字列の値は、どっちが「良い」のか機械的に判定できないが、数値で 1 と 0 なら 1 の方が高い、とか判定できるので、モデルが学習するとき効果的に使える、ということかな?
  3. 値のバリエーションごとに列を作って、値の有無を 0/1 で表すように展開する(One-Hot Encoding)。これも要するに、数値として扱えるように変換しましょう、ということかな。

Ordinal Encoding と One-Hot Encoding のどちらを選ぶかは、値が順序を持つかどうか、で決める。値のバリエーションが 15 以上あるようなデータに対しては、通常は One-Hot Encoding は有効ではない。

最後のエクササイズの末尾に、オプションだけど submit してみよう!というのがあってみようみまねでやってみたらエラーになった。コーディングミスはなさそうなので意味が分からなくて Discussions を見たら同じように困っている人がちらほらいて、どうやらエクササイズの最初の方でデータクレンジングをしているコードに問題があるらしい。難しい。