機械学習

保険料の予測② 相互情報量とランダムフォレスト【MLC10回目】

こんにちは、チズチズです!

今日もKaggleの続きをやっていきます。

前回の記事を見ていない方、振り返りしたい方は下のボタンからどうぞ

前回の記事(保険料①

相互情報

相互情報を初めて聞いた方が多いと思います。(僕は初めて聞いた

相互情報量(そうごじょうほうりょう、英: Mutual information)または伝達情報量(でんたつじょうほうりょう、英: Transinformation)は、確率論および情報理論において、2つの確率変数の相互依存の尺度を表すである。

(Wikipedia参照

要約:被ってる情報量がどれくらいあるかってことですかね…

トレインの浮動小数点型の説明変数とトレインの目的変数で見ています。

何をしているかと言うとデータの相互情報量については変わらないのですが、被ってる情報量が多ければ多いほど(高依存)0に近くなるものです。

詳しいことはこちらから(sklearn)

n_neightborsはデフォルトでも3らしいので書かなくても大丈夫そうです。

初めて見たので、これが相互情報量が多いのか少ないのか良いデータなのかもわかりませんが、結構0に近いものが多そうです。

バイナリ値の検査

バイナリ (binary) とは二進法のことであるが、コンピュータが処理・記憶するために2進化されたファイルまたはその内部表現の形式(バイナリデータ)のことを指して用いることが多い。

(Wikipedia

要約:0か1

データのバイナリ値についてチェックします。

まず”_bin”の列を取り出します。

そして、0のリストと1のリストを作りデータの中にある0の合計値、1の合計値を足します。

バイナリ値の量を調べているのかな…

可視化

見える… 見えるぞっ

前のようなグラフにします。

ps_ind_bin_10, ps_ind_bin_11, ps_ind_bin_12, ps_ind_bin_13

この4つのデータはほとんどが0でデータとして使ってもほぼ意味がありません。

バイナリ値をチェックする意味がようやくわかってきました。

カテゴリカルと序数

ランダムフォレストで色々

ランダムフォレストのパラメータ一覧

パラメータについては「データ科学便覧」のサイトからがわかりやすいです。

今は、全てのデータを学習させています。

次は説明変数の抽出行うのかな?

散布図で特徴量の重要性を可視化

Plotlyの公式ドキュメント

マーカー等が細かく設定されています。

plotlyはまだ少ししか使ったこと無いので詳しくは語れません。公式ドキュメントが結構わかりやすいです。

1つ言っておきます。

Plotlyの日本語の解説はほぼ無い!

調べようと思ったら英字ばっかりで日本語が前紹介したQiitaの記事と1つのブログ等でほっとんどが英語のものでした。

ps_car_13が飛び抜けて重要度が高いです。

次は高い順に棒グラフにしていきます。

決定木の可視化

ここでは3レベルまでしか表示しません。(max_depth=3

同時に”tree1.dot”というファイルに決定木の情報を保存します。

よく見る決定木です。Yesが1つしかありませんがw

特徴量とGradient Boosting

今度は特徴量を選別させて学習させます。

そこで、Gradient Boostingを使います。

この2つの記事がわかりやすかったです。損失関数を減らすために弱学習器をたくさん使うとかどうとか…

そして、前と同じく可視化

 

というか何かすげぇ… 1個前にやったよりも重要度が上がってる…

ランダムフォレストとGradient Boostedが選んだ1番の重要度は同じくps_car_13です。

Gradient Boostedは使ったほうが良い

参考にしたKernelはここで終わっています。これからは自分で学習モデルを作っていきたいです。

出来るか不安ですが… やってみます

お読みいただいてありがとうございました。

追記

重要度のところでソートさせたものを棒グラフでプロットするところでなぜかPyCharmは表示されませんでした。原因を見つけられなかったので、Kernelから画像を引用しました。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です