stgkrt / kaggle-hms

1 stars 0 forks source link

cvの区切り方 #4

Open tttza opened 3 months ago

tttza commented 3 months ago

どうせならそろえた方がアンサンブル時に幸せになれそう。

tttza commented 3 months ago

みんな GroupKFold で5分割、group は patient_id で設定している模様。 shuffle や random_state はないので、基本的にはデータの区切り方は揃ってるとみてよさそう。 (どっかで混ざってるかもしれないので、念のため実際の出力が同じ分割になってるかは確認したい。)

sgkf.split(train_pop, y=train_pop["target"], groups=train_pop["patient_id"])

https://www.kaggle.com/code/konstantinboyko/hms-resnet1d-gru-train-1-5-dataset?scriptVersionId=166379987 https://www.kaggle.com/code/nartaa/features-head-starter

stgkrt commented 3 months ago

idをyamlで吐き出したりして全員で固定できるようにしたい

tttza commented 3 months ago

とりあえず、参考にしているノートからそのまま GroupKFold の ID を書き出しときました。

https://www.kaggle.com/code/tzl0000/hms-cv-fold?scriptVersionId=167389138

train = pd.read_parquet('/kaggle/input/hms-cv-fold-dataset/folds.parquet')
valid_cols = [f'valid{i}' for i in range(5)]
for c in valid_cols:
    _train, _valid = train[~r_train[c]].drop(columns=valid_cols), train[r_train[c]].drop(columns=valid_cols)

出力はこんな感じ。 image

各 fold で target のサンプル割合にばらつきが出てそうなので要検討?

stgkrt commented 3 months ago

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/477461 これを見るとtotal evaluatorが10以上とそうでないものでだいぶデータの信憑性が変わりそうなので、10以上のデータが均等になるようにfold切るのがよさそう。 また、discussionの雰囲気を見ると、validスコアは10以上のデータに合わせて改善すればpublicは上がりそうな気がするが、privateはどうなるか…?

stgkrt commented 3 months ago

https://github.com/stgkrt/kaggle-hms/commit/e5750f7da156a688288e94706a0ff85d8256078a patient_idのgroupと、vote数合計の//3したやつ+expert_consensusのstratifiedでstratifiedgroupでやっている。fold間のスコア差は小さくなった印象