2018の11日目の記事です。LBの全てで精度向上に貢献したという話がありました。connpass.com遺伝的プログラミングや遺伝的アルゴリズムは、大学の学部時代から興味があり、ブログでも何度か取り上げてきました。Kaggleなどで試したことはなかったので、自分で手を動かして検証してみようと考えた次第です。遺伝的プログラミングによる特徴量生成の理論的な背景や実装については、昨年に執筆された下記の記事が非常によくまとまっています。qiita.comただし本記事では、Kaggleに用いるという観点から、この手法で生成した特徴量がKaggleでよく使われる分類器「LightGBM」でも効果を発揮するか分からない点が気になりました。本記事では、この点について実験で検証したいと思います。実装はGitHubで公開したので、興味ある方はご参照ください。github.com最初に、実験に用いるデータセットを作成します。特徴量が10個ある10000行のDataFrameを作成しました。20%をtestデータとして分割しておきます。random_state=123)特徴量生成前まずは単純にLightGBMで精度を検証してみます。0.856409testデータで確認したところ、AUC=0.854653164841を得ました。遺伝的プログラミングを用いた特徴量の生成に関しては、先の記事からほとんど変更していません。ベースのモデルはL2正則化ロジスティック回帰、評価方法はtrainデータの5-foldクロスバリデーションAUCを利用しています。ここでのベースのモデルもLightGBMなどの勾配ブースティング系に変更しようと試してみましたが、計算量が膨大になってしまうため、比較的単純なモデルのままとしました。生成された特徴量は以下の通りです。特徴量2」という式で計算される特徴量を意味します。生成された特徴量を眺めてみると、人間ではなかなか思いつかないような式が生成されていると分かります。Proで1時間30分程度かかりました。元にする特徴量の数やDataFrameの行数によっては、かなりの時間がかかると見込まれます。同様に、LightGBMで精度を検証しました。0.854653164841)と、特徴量を加える前より高い精度を示しました。特徴量の重要度を確認したところ、上位5番目から新規に追加した特徴量(インデックスが10以上のもの)が登場しています。おわりに本記事では、遺伝的プログラミングによる特徴量生成について、この手法で生成した特徴量がLightGBMを用いた場合でも効果を発揮すると確認しました。最大のボトルネックとして、計算時間の問題が残ります。遺伝的プログラミングでは大量の試行錯誤を実施するため、今回のさほど大きくないデータセットでも一定の時間が必要となりました。実際のコンペに投入するに当たっては、事前に特徴選択を実施するなどの対応が必要かもしれません。月別アーカイブはてなブログをはじめよう!upuraさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。