abebe9849
StratifiedKFold(n_splits=4) model:tf_efficientnet_b0_ns save_weight: best_auc_epoch cv:0.39602 (AUC(CV)====== 0.79269) lb:0.5000
cv:0.41743(AUC(CV)====== 0.8007) lb:0.531
乖離があります。 CVの切り方がまずいんでしょうか...
Public Test が 497 × 0.13 ~= 65 なので、LB のお飾り感が半端ないですね。
①StratifiedKFold CV Score(OOF): 0.602 Public LB Score(fold-avg): 0.594
②StratifiedKFold CV Score(OOF): 0.564 Public LB Score(fold-avg): 0.578
でした。 Publicは確かにデータ数が非常に少ないので、どこまで信じてよいものかが難しいですね、、、
CV 高い & CV と LB の乖離が少ないのいいですね!(僕はかなり乖離してるので...)
一つお聞きしたいのですが、CV の split 数は 5 でしょうか?
ありがとうございます。 split数は10で試しています。
なるほど。ありがとうございます。
以下、5folds
CV: 0.37768 → LB: 0.359
以下、10folds
CV: 0.40367 → LB: 0.375 (上の0.359を10foldsに変えただけ)
CV: 0.47859 → LB: 0.422
CV: 0.54281 → LB: 0.578
CV: 0.54587 → LB: 0.531
CV: 0.60703 → LB: 0.531
やはり訓練データが少ないので5foldsよりも10foldsにしたほうが、CV自体は伸びました。 ただLBに関しては上がっているとはいえ、正解はひとつ増えているだけみたいです。
CVが0.6を超えたものでLBがむしろ悪くなったのは、サンプルが少ないとはいえ、なかなかしんどいです。。。
データが少量の場合 CV を行うのが難しいですよね...
今回のデータだと 10 folds にした場合 fold ごとの validation set が 65 枚ぐらいになってしまうため、validation accuracy/loss が最良の model を test の予測に使うべきなのか何ともです。val set の数が少ないとある epoch で妙に良い val score が出る(でもそれはその val set に対してたまたま良いだけ)ということもあり得るので。
CV を安定させたい場合はこのトピックを立てた abebe9849 さんのように fold 数を少なくするのも一つの手なのかなとは思います。
Tawaraさん、コメントありがとうございます!
たしかに10 foldsより5 foldsとした方がCVの精度は上がりそうな気がします。
そこでちょっと実験してみたのですが、 CV: 0.54281 (LB: 0.578)のモデルを5 foldsで学習させてみました。
CV: 0.56116 (LB:0.531)となりました。
意外ですがCVは上がりLBは下がったのですが、ご指摘のようにパブリックLBのサンプル数が極端に少ないのでこの結果だけでは一概に何かを語ることはできなさそうですね。
結局の所、trust CVが大切そうです。
※ 私はこのコンペをTawaraさんのツイートを拝見して始めました、データの少なさや宗教画のモチーフ分類といった面白いテーマで楽しめています。運営様もTawaraさんも、良い学習の機会を与えてくださり、ありがとうございます!
ただ LB Score に関しては 10 folds にすることで averaging する際の多様性が出てる説もあるので、僕の言っていることが正しいかは微妙ですね。
いずれにせよ CV が難しいです...
CV: Stratified KFold 4 folds
EFNet b0 CV: 0.472 → LB: 0.531
ResNet34d CV: 0.501 → LB: 0.594
乖離半端ないです!
StratifiedKFold 5folds
CV: 0.522971 → LB: 0.562
CV: 0.539755 → LB: 0.641
でした!
ResNet18dStratifiedKFold 5foldsCV: 0.475 -> LB: 0.484CV: 0.470 -> LB: 0.500CV: 0.599 -> LB: 0.625
EfficientNet B0StratifiedKFold 5foldsCV: 0.472 -> LB: 0.484CV: 0.587 -> LB: 0.625CV: 0.594 -> LB: 0.578CV: 0.599 -> LB: 0.672
EfficientNet B0StratifiedKFold 30folds(試しにやってみた)CV: 0.721 -> LB: 0.672CV: 0.733 -> LB: 0.656
Fold数を上げるとCVは上がりますが、乖離が大きくなりますね。Testデータの枚数が非常に少ないことも要因だとは思いますが、Trust CVとするかTrust LBとするか悩ましいですね。どのモデルをRobustなものと判断すればいいものやら・・・。