Stacking 実装中
ちょうどよい加減に抽象化された Stacking の例が意外と見つからない。base models での CV、meta model での CV それぞれどうやるべきなのか。meta model は linear で良いのか。 tree base が良いのか。実践的な例をがんばって探してみている。このコンペが終わったらコードを公開しようかな。
Kaggle Ensembling Guide + 実装例
Kaggle Ensembling Guide | MLWave という良記事を読み込む。そして1ミリもごまかさずに理解する過程をメモ。
Creating ensembles from submission files
Voting ensembles
これは分かりやすい。モデルが3つ以上あるときに prediction 結果の多数決をとって精度を上げる方法。 Simple Voting Ensemble for the Titanic | Kaggle に実装例がある。4 つのモデル(train前)を sklearn.ensemble.VotingClassifier に渡して training すると精度が向上するのがわかる。VotingClassifier のドキュメントを読むと voting には hard(class label の voting) と soft(predicted probablitiesの argmax) の種類があるようだ。
Correlation/相関
相関があまりないモデルを組み合わせたほうが精度が上がるという話。これは直感的にも理解できる。
Weighing
モデルが同程度に精度が良いとは限らないので、より良いモデルの voting に weight をかける方法。例:Better predictions: stacking with VotingClassifier | Kaggle
eclf = VotingClassifier(estimators=[ ('rf1', rf1), ('rf2', rf2), ('gbc', gbc), ('xgb',xgb)], voting='soft', weights = [3,1,1,1])
Averaging
bagging submissions ともいわれる。モデルの prediction を平均する。classification と regression どちらでも使える。例:Titanic using ensemble average | Kaggleにて下記のように各モデルのpredictionを単純に足し合わせているのがわかる。4 で割るかわりにしきい値が 2 にしていることに注意。
mix_predict=logreg_predict+RDM_predict+Tree_predict+svm_predict mix_predict[mix_predict<2]=0 mix_predict[mix_predict>=2]=1
Rank averaging
models が同様に calibration されているとは限らない(over-confident だったり under-confident) なので直接比べて average するのは良くない。それぞれのモデルの submission ないで各行の probability が何番目に大きいかのフィールドを作って、それらを複数のモデルで average する。例:Rank Averaging script | Kaggle
Historical ranks
前述の Rank はある test set の prediction 内の rank なので、また新しく別のデータに対する prediction が必要になったらどうするのという話。Rank をとっておいて似たような確率値の rank を使えばよいという話。例は見つけられなかったけど難しくないので良いと思う。
Stacked Generalization & Blending
Stacked generalization
説明を読んでもさっぱり分からなかった。いくつかの解説サイトを読んだが、結局 Stacking - Ensembling | Coursera この動画が一番わかりやすかった(というかこのクラスとったのに覚えてない。やはり実践しないとだめだね)。level 0 で各モデルの predction for valid を training データとして新しいモデルを train するということなのね。例: 2-Level Stacked Generalization | Kaggle
level 1 の model は weight 付きの averaging が best だと学習するかもしれない(しないかもしれない)。
Blending/Stacked Ensembling
out-of-fold でななくて train data で holdout set (10%) を level 0 の training に使う部分が違う。
Feature weighted linear stacking
力尽きた。続くかもしれない。
Kaggle 今日の作業記録
新コンペ。ネタバレ無しで。
- 安定した local CV の確立
- いくつかのモデルを試す
Kaggle 新コンペ Santander Customer Transaction Prediction
とりあえず Starter Kerne 書いた。コンペ開催中はブログに何もかけないのが辛いですね。
www.kaggle.com
Quora コンペ入賞者手法まとめ
自分のコメントはかなり適当。後で更新するかも。
3rd
- 3rd place kernel | Kaggle
- Keras
- embedding load 時に stemmer and lemmetizer してできるだけ dictionary の中から見つける
- bidirectional GRU と LSTM の output の maxpool を concat
- max_length = 55 と短め
- Local solid CV to tune all the hyperparameters と書いてあるがどこだろう
13th
- 13th place solution | Kaggle
- Keras
- latex 記法クリーニング
- https/http/ftp クリーニング
- punct クリーニング
- Embedding:Glove0.64+ Params0.36
- 3 model の ensemble
- bidirectional LSTM and GRU の output をconcat して maxpool1D 後 Dense。
- bidirectional GRU + AttentionWeightedAverage
- bidirectional LSTM + CNN
20th
- Surprising 20th place - 2 models, various embeds, mixed loss | Kaggle
- PyTorch
- concat(GloVe, FastText) embedding + LSTM + TextCNN with kernel size [1, 2, 3, 4] + 2 dense layers, with some batch normalizations and dropout layers
- mean(GloVe, Para) embedding + LSTM + GRU + concat(GlobalAvgPool, GlobalMaxPool) + 2 dense layers, with some dropout layers
22nd
- 22nd Solution - 6 Models and POS Tagging | Kaggle
- Keras
- training 時間が短い軽量モデルで 70%のprediction をする。残りの30%の難しい分類は別のモデルで行う。
- 6 models
27th
- 27th kernel | Kaggle
- embedding load 時に stemmer and lemmetizer してできるだけ dictionary の中から見つける
- average blend of 5 models which includes all 4 embeddings with a local CV of 0.7028
- 長さなどの extra features
- tfidf
- Kernel のCell 出力が長すぎて読めない
70th
Transformer - Attention Is All You Need の概要が理解できるリンク
で教えていただいた [1706.03762] Attention Is All You Need。最初は論文そのものを読もうと思ったが挫折したので。概要を理解できるリンク集。Attention Is All You Need https://t.co/eUZ17XVu8L で提案された Transformer 以降は self-attention が主流な印象です。先日おおきな話題になった BERT も Transformer 系です。
— agatan (@agatan_) February 12, 2019
- 論文解説 Attention Is All You Need (Transformer) - ディープラーニングブログ
- 論文読み "Attention Is All You Need" - Qiita
- Attention Is All You Need · Issue #329 · arXivTimes/arXivTimes
- Google AI Blog: Transformer: A Novel Neural Network Architecture for Language Understanding
- The Annotated Transformer
- The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time 英語に抵抗なければおすすめ
- [DL輪読会]Attention Is All You Need
今回のコンペでやるべきだったこと
今回のコンペでやるべきだったこと、次回のコンペで活かせることに絞って覚書。
- debug mode をつけるべきだった。train/test data のサイズを極端に小さくするモード。
- Kernel を commit する前に小さいデータで動作確認をすべき。特に自分は typo が多いので。
- public kernel を fork して、そこから派生していく時点で1行ずつ読み込んで自分のものにしておくべきだった。
- EDA 後に CV を安定させることに注力。
- Record 専用 Kernel を作って試行錯誤と score を記録。これはコンペ途中からやっていて有用だった。最初は各 Kernel に markdown としてうめこんでいたがパラレルでものを進めると簡単に破綻した。