最近の読書

「凍りのクジラ」、「旅人」、「羊と鋼の森」が特に良かった。今年は当たりが多い。


凍りのくじら (講談社文庫)

凍りのくじら (講談社文庫)

旅人  ある物理学者の回想 (角川ソフィア文庫)

旅人 ある物理学者の回想 (角川ソフィア文庫)

首折り男のための協奏曲 (新潮文庫)

首折り男のための協奏曲 (新潮文庫)

スコーレNo.4 (光文社文庫)

スコーレNo.4 (光文社文庫)

太陽のパスタ、豆のスープ (集英社文庫)

太陽のパスタ、豆のスープ (集英社文庫)

たった、それだけ (双葉文庫)

たった、それだけ (双葉文庫)

終わらない歌 (実業之日本社文庫)

終わらない歌 (実業之日本社文庫)

よろこびの歌 (実業之日本社文庫)

よろこびの歌 (実業之日本社文庫)

時を刻む湖――7万枚の地層に挑んだ科学者たち (岩波科学ライブラリー)

時を刻む湖――7万枚の地層に挑んだ科学者たち (岩波科学ライブラリー)

羊と鋼の森 (文春文庫)

羊と鋼の森 (文春文庫)

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

。abstract しか読んでない。

力尽きた。続くかもしれない。

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
      1. bidirectional LSTM and GRU の output をconcat して maxpool1D 後 Dense。
      1. bidirectional GRU + AttentionWeightedAverage
      1. 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

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