CV vs LB

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の切り方がまずいんでしょうか...

Aws4 request&x amz signedheaders=host&x amz signature=ac760271ce0e4aca158c37961b5ef0ebf0b61dd987758d32397c0f8ae777e51f
Tawara
①CV Score(OOF): 0.537, Public LB Score(fold-avg): 0.703
  • model: resnet34d
  • CV Strategy: StratifiedKFold(K=5)
②CV Score(OOF): 0.547, Public LB Score(fold-avg): 0.641
  • model: resnet18d
  • CV Strategy: ①と同じ

Public Test が 497 × 0.13 ~= 65 なので、LB のお飾り感が半端ないですね。

Icon9
skywalker

①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は確かにデータ数が非常に少ないので、どこまで信じてよいものかが難しいですね、、、

Aws4 request&x amz signedheaders=host&x amz signature=ac760271ce0e4aca158c37961b5ef0ebf0b61dd987758d32397c0f8ae777e51f
Tawara

CV 高い & CV と LB の乖離が少ないのいいですね!(僕はかなり乖離してるので...)

一つお聞きしたいのですが、CV の split 数は 5 でしょうか?

Icon9
skywalker

ありがとうございます。 split数は10で試しています。

Aws4 request&x amz signedheaders=host&x amz signature=ac760271ce0e4aca158c37961b5ef0ebf0b61dd987758d32397c0f8ae777e51f
Tawara

なるほど。ありがとうございます。

Icon7
yyama

以下、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がむしろ悪くなったのは、サンプルが少ないとはいえ、なかなかしんどいです。。。

Aws4 request&x amz signedheaders=host&x amz signature=ac760271ce0e4aca158c37961b5ef0ebf0b61dd987758d32397c0f8ae777e51f
Tawara

データが少量の場合 CV を行うのが難しいですよね...

今回のデータだと 10 folds にした場合 fold ごとの validation set が 65 枚ぐらいになってしまうため、validation accuracy/loss が最良の model を test の予測に使うべきなのか何ともです。
val set の数が少ないとある epoch で妙に良い val score が出る(でもそれはその val set に対してたまたま良いだけ)ということもあり得るので。

CV を安定させたい場合はこのトピックを立てた abebe9849 さんのように fold 数を少なくするのも一つの手なのかなとは思います。

Icon7
yyama

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さんも、良い学習の機会を与えてくださり、ありがとうございます!

Aws4 request&x amz signedheaders=host&x amz signature=ac760271ce0e4aca158c37961b5ef0ebf0b61dd987758d32397c0f8ae777e51f
Tawara

ただ LB Score に関しては 10 folds にすることで averaging する際の多様性が出てる説もあるので、僕の言っていることが正しいかは微妙ですね。

いずれにせよ CV が難しいです...

Aws4 request&x amz signedheaders=host&x amz signature=3eb06ed8549fb504918f7f2b6986c3d57c1e6eadc7315876f34b3d0cb4b2462f
chizuchizu

CV: Stratified KFold 4 folds

EFNet b0 CV: 0.472 → LB: 0.531

ResNet34d CV: 0.501 → LB: 0.594

乖離半端ないです!

Icon7
karunru

StratifiedKFold 5folds

CV: 0.522971 → LB: 0.562

CV: 0.539755 → LB: 0.641

でした!

Aws4 request&x amz signedheaders=host&x amz signature=2466fa5d7327c46820fce51605a531789b0af94cab75e2d6ea53fd3499b79199
kuri54

ResNet18d
StratifiedKFold 5folds
CV: 0.475 -> LB: 0.484
CV: 0.470 -> LB: 0.500
CV: 0.599 -> LB: 0.625

EfficientNet B0
StratifiedKFold 5folds
CV: 0.472 -> LB: 0.484
CV: 0.587 -> LB: 0.625
CV: 0.594 -> LB: 0.578
CV: 0.599 -> LB: 0.672

EfficientNet B0
StratifiedKFold 30folds(試しにやってみた)
CV: 0.721 -> LB: 0.672
CV: 0.733 -> LB: 0.656

Fold数を上げるとCVは上がりますが、乖離が大きくなりますね。
Testデータの枚数が非常に少ないことも要因だとは思いますが、Trust CVとするかTrust LBとするか悩ましいですね。
どのモデルをRobustなものと判断すればいいものやら・・・。

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。