satopoooonのブログ

自分向けの備忘録

kaggleに挑戦 その1 決定木を使う

はじめに

機会学習のスキルを身に付けたく、kaggleに挑戦中です。

タイタニック号のデータを、ランダムフォレストでモデル化しました。

今回は、ランダムフォレストの基本となる決定木について書こうと思います。

 

簡単に自己紹介すると、僕は材料系メーカーのエンジニアです。

学生時代に統計分析はそこそこ経験していますが、

機会学習は全くの素人でした。

社会人になって、機会学習に興味を持ち、

色々と勉強していくうちにkaggleを知った次第です。

 

タイタニック号のデータ

初心者向けのコンペとして、

「Titanic:Machine Learning From Disaster 」

があります。

タイタニック号の事故について、

どのような要因(年齢、性別、階級等)が乗客の生死を分けたか?

という物を分析するものです。

初心者は初心者らしく、初心者向けのコンペに挑戦します。

 

データのダウンロード

まずはkaggleのサイトから、以下二つのデータをダウンロードします。

  • train.csv (59.76 kb)
  • test.csv (27.96 kb)

kaggleのアカウントを持っていない人は、先に作っておきましょう。

 

上記二つのデータは、それぞれ訓練用(train)データと評価用(test)データです。

訓練用データで、モデルを作成し、評価用データでそのモデルの妥当性を検証します。

 

「訓練用データでどのようなモデルを作成するか」

これがデータ分析者のキモですね。

モデルを作るときは汎化性能を意識する必要があります。

このあたりが、学生の時にやっていた統計分析と違うのかなーと思っています。

(あくまで個人的な意見です。統計分析という単語も個人的経験を指しています。)

 

今回はscikit-learnのランダムフォレストを使ってモデルを作成していきます。

 

ランダムフォレストと決定木分類器

ランダムフォレストってなんぞや?となりますが、

その前に決定木分類器の説明をします。

 

決定木分類器とは、いくつか質問に基づき決断を下すという分類器。

言葉で書いてもよくわからないと思うので、こちらのHPから下記図を引用させて頂きました。

f:id:satopoooon:20171203150323p:plain

上図では、性別、年齢等に関する問を組み合わせて生存可否の決断をします。

親nodeから子nodeに分岐するTree構造になっているので、決定木と呼ばれています。

 

上記図の年齢に関する質問において、10歳を基準に区切っています。

このとき15歳ではダメなのか?5歳ではダメなのか?という疑問を持ちます。

質問の目的は生存、死亡を分岐することなので、一番正確に分岐できる年齢を設定したいですよね。

このモチベーションを定量化するために、「情報エントロピー」「情報利得」を用います。

上記質問で例えると、

10歳以下の人がすべて生存して、それ以外は亡くなったとしたら、情報エントロピーは0となります。

0に近いと正確(理想的)に分岐できていて、1に近いとその質問では全く分岐できていないことになります。

ここで情報利得とは、親nodeと子nodeの情報エントロピーの差です。

子nodeの情報エントロピーが0に近い程(その質問で正確に分岐できている程)、情報利得は大きくなります。

つまり、情報利得が最大になるように質問を設定すれば良いのです。

 

決定木は、質問が多い程、過学習に陥りやすくなります。

そこでランダムフォレストは、上記対策がなされています。

次回はランダムフォレストについて書こうと思います。