fkubotaさん(https://zenn.dev/fkubota/articles/3d8afb0e919b555ef068)のkaggle日記
https://github.com/fkubota/kaggle-Cornell-Birdcall-Identification
を参考に作成してみた。
今日は提出までの流れを確認するにとどめる。
結果は661位。 まあ、こんなものでしょう。
明日はDiscussionとNotebookをひたすら読み込むことにする。 早速Disscussionで日本語のnotebookをUPした方がいたので保存。
Notebookを2つ読む。 0818_30dml-eda-xgboost.ipynbはEDAをかなり行っており、手法も含めて勉強になる。
- 訓練データ、テストデータ共に欠損値はなし
- 訓練データのtargetにおいて5未満は外れ値
- 訓練データとテストデータの間にデータの不均衡はなし(もう一つの内容と矛盾する)
- targetと特徴量の間の相関関係は小さい
EDA後はOrdinalEncoderでobject変数を前処理した後、 交差検証でRNSEを確認している。 XGBで見られる特徴量の重みもヒートマップと変わらない。
日本語で読みやすそうなので読んでみた。 擬似ラベリングはリークではないのか疑問。 専門書で確認したい。 勉強になったので次の箇所。
- targetが外れ値の行を除外(targetが4より小さい行を除外)
- 変数"cat6"について"G"は学習データにしか存在しない(テストデータで値がGをとるデータが存在しない)ので、cat6の値がG の行を除外(上のNoteBookと矛盾する)
- cont列に対するRankGauss変換(手法は書いていないが、手元のkaggle本に手法は書いてあるので対応はできる)
- LightBGMのパラメータ(optimizeする必要がなくなった)
Discussionも読んでみた。 https://www.kaggle.com/c/30-days-of-ml/discussion/265963 はEDAやFeature Engineeringの参考手法がかなり掲載されており勉強になりそう。 また、 https://www.kaggle.com/c/30-days-of-ml/discussion/266099 は精神衛生にはちょうど良い。
最後にDistordも覗いてみた。 上位が団子状態というのは変わらない感想の模様。 誰かPytorchのNotebookあげてくれないかなあ。
明日は https://www.kaggle.com/c/30-days-of-ml/discussion/265963 の内容を一読しようと思います。
notebookの方に書いたので概要だけ
- targetが外れ値の行を除外(targetが4より小さい行を除外) →targetが多峰性分布になった。次の記事によればLidge回帰やLassoが有効? https://towardsdatascience.com/anchors-and-multi-bin-loss-for-multi-modal-target-regression-647ea1974617
- 一部のカテゴリ変数は列ごと削除することも考慮に入れる。
- また、cat6のGは学習・テスト両方ともあり
- カテゴリ変数をその他で表す方法を学んだ
- 数値変数同士の相関性は薄い
とりあえずtarget_encodingと交差検証を試してみたかったので、
0820_cats-on-a-hot-tin-roof-cats-encoding-methods
を試してみる。
0.71くらいのスコアが出たので提出してみたが、結果は0.75072という結果に。過剰適合かどうかもわからない。
リッジ回帰も試してみたところ、0.73985と改善した。
コピペだけではどうしようもないので、
明日以降は自分の手でtarget_encoding→Lightbgmとリッジ回帰で交差検証
という流れでやってみようと思う。
順位よりも今の自分に不足している部分を学習するという観点で進めていきたい。
- target_encodingと交差検証を両方試したが混乱した。
target_encodingは一旦置いておいた方がいい。
別の変換方法を試して、リッジ回帰・Lasso・LightGBMの3つでスコアを検証した方が勉強になるだろう。 - ノートブックにも記入したが値は全く変わらなかった。
この点についてはもっと検証したい。
明日はnotebookを読んで上位のカテゴリ変換方法を参考にして、
何か一つの推定方法を試して交差検証する方向で進めようと思う。
- LightGBM×optunaでパラメータ設定したモデルに交差検証を行った。
別のノートから持ってきた手法であるが、
RMSEの値だけでなく、特徴量の重要性を測定することができ非常に使い勝手は良い。
ただし、カテゴリ変数が軒並み低い値であったことが気になる。
連続変数を標準化しても値は変化しなかった。 - また、LightGBMではカテゴリ変数を扱えることを思い出したので
pandasを用いてカテゴリ変数に変換して分析を行った。
結果は次の図の通り順位更新はできたのだが、エラーが発生し、特徴量の重要性を見ることはできなかった。
- LightGBMで特徴量エンジニアリングをしているnotebookを発見したので、
明日はそこから始めることにする。
- LightGBMの特徴量エンジニアリングは大した内容ではなかった。
- 上位陣がほとんどアンサンブルやスタッキングで推論していたが、
- 本当にその内容で上位に行けるのか確認したが、スコアはかなり良化した
- 初心者向けのコンペでこの内容はどうかと思うが仕方がない
- 最後はスタッキングしか良い手段が思い浮かばないので、
- GBRTとDNNとLinearModelを組み合わせて提出することにする。
- PytorchでDNNを実施したが、スコアが全くよくならない。
- 前日のPytorchのモデルの予測値を提出してみた。
- 結果は0.73935で08/21のリッジ回帰と同程度の結果となった。
- tensorflowでやった人のnotebookもこのくらいだったので、
- 妥当かもしれない。
- 上位陣はstackingで埋まっている。
- 一層目でどのモデルを使用しているかでもわかればありがたいのだが…
- foldの分け方から全てをノートに示しているGrandMasterの方がいらっしゃったので、ありがたく参考とする。
- ↑の通りにfoldを作成し、その後stackingを行った。
- 予測と使用モデルは次の通り。
- pred1:GradientBoosting
- pred2:Ridge
- pred3:Random Forest
- pred4:LightGBM
- (以上第1層)
- level1_pred_1:XGBRegressor
- level1_pred_2:RandomForestRegressor
- level1_pred_3:GradientBoostingRegressor
- (以上第2層)
- LinearRegression
- (最終層)
- 後できそうなことは次の内容か - 特徴量:標準化(max_mix) - 目的変数・説明変数の外れ値を削除する - pytorchの結果をスタッキングに混ぜる