cancerデータセットでスタッキングを実装。図解を添えて。

Kaggle

しぃたけ
しぃたけ

Kaggleで必須のスタッキングについてまとめます。

背景

Kaggleで上位を目指すうえで必須のアンサンブル学習の手法、スタッキングの使い方を図解付きでまとめました。

スタッキング良くわかってない方の参考になればと思います。

参考文献はだいたいこちらです。



スタッキングについて

概要

スタッキングはアンサンブル学習の1種で、クロスバリデーションを利用して検証データ(valid data)への予測値を特徴量にして、アンサンブル学習を実施します。

以前、アンサンブル学習で記事を書いたのですが、テストデータの予測値に対して加重平均を行った単純なものですが、スタッキングは検証データに対してアンサンブル学習を行うという違いがあります。

参考までに過去の記事です。

【HousePrice】アンサンブル学習使って精度向上した話
しぃ たけKaggle本によく書かれているアンサンブル学習試してみました。概要前回、前処理まで行ったHousePriceのコンペの続きをやっていきます。今回一番やりたいことは、アンサンブル学習を使ってどれくらい...


手順

スタッキングの手順を、図解と番号で示します。

1.学習データをクロスバリデーションでout-of-foldで学習させ、バリデーションデータへの予測値を作成する。(図1)

2.各foldで学習したモデルでテストデータを予測し、平均を作ったものをテストデータの特徴量とする。(図1)

3.上記の2件をスタッキングしたいモデルの数だけ繰り返す。(図2)

4.上記で作成したモデルの予測値を特徴量として提出データの学習と予測を行う。(Linerモデルが一般的。)(図2)

図1 スタッキング図解① fold数=4 の例



図2 スタッキング図解②


ちなみに、検証データから算出した予測値(特徴量)のことを「1層目のデータ」と呼び、「1層目のデータ」を利用して、作成する提出用のデータのことを「2層目のデータ」と呼ぶそうです。

Kaggle業界でもよく使われているので、覚えておいたほうがいいかもです。


使ってみた

データインポート

データセットはCancerデータセット(乳がんデータセット)を利用します。


1層目のデータ作成

1層目のデータを作成していきます。

まずはクロスバリデーション用の関数を定義します。

関数は下記を引用してます。

kagglebook/ch07/ch07-01-stacking.py at master · ghmagazine/kagglebook
Contribute to ghmagazine/kagglebook development by creating an account on GitHub.


上記のクロスバリデーションを利用して、1層目のデータを作成していきます。

1層目のデータはXGBoostとニューラルネットワーク(Keras)で作成します。

なお、時間なかったので載せてませんが、Model1XGBとModel1NNは下記の関数を利用しています。

kagglebook/ch07/models.py at master · ghmagazine/kagglebook
Contribute to ghmagazine/kagglebook development by creating an account on GitHub.

これらを利用して、検証データとテストデータの精度を検証します。

どちらのモデルも

vaidデータで95%以上の正答率、testデータで94%程度の正答率となりました。


2層目モデル作成

最後に、1層目のデータ(予測値)を利用して、アンサンブル学習を実施します。

ちなみに、2層目の予測についてはLinerモデル、もしくはSVMを利用するのが一般的だそうです。今回はLinerモデルを使います。

それでは先ほど作成した、XGBoost、ニューラルネットワークの予測値を利用して、提出用のテストデータの予測を行います。

1層目の予測モデルと比較してどれくらい精度が向上しているのでしょうか?

2層目のLinerモデル精度

validデータ : 97.887% testデータ : 95.104%

1層目と2層目の予測モデルの結果を比較するとこんな感じです。

 valid data test data
1層目 XGBoost 95.539 % 94.405 %
1層目 NN 98.122 % 94.405 %
2層目 Liner 97.887 % 95.104 %
予測結果

2層目のデータの方がtest dataに対する予測値精度が向上するという結果となりました。


まとめ

アンサンブル学習の手法であるスタッキングについてまとめました。

Kaggleで上位を目指すうえでは避けては通れない道であるので、使いこなしましょう。

コメント

タイトルとURLをコピーしました