Open takapy0210 opened 4 years ago
Training: https://www.kaggle.com/takanobu0210/basemodel-lightgbm (ver.3) submittion: https://www.kaggle.com/takanobu0210/baselinemodel-submit
c-
カラムの集計特徴量を生成(g-
カラムは時間の都合で試していません)0.016317790747151707
0.02417
N/A
Training: https://www.kaggle.com/takanobu0210/basemodel-lightgbm?scriptVersionId=42348176
0.015926739456905037
0.02008
https://www.kaggle.com/sinchir0/moa-pytorch-nn-starter
NakamaさんNotebookをそのままSubmitしてます。ベースラインとして。
・特徴量 : オリジナルから変更なし ・CV : MultilabelStratifiedKFold 5 folds ・Loss : BCEWithLogitsLoss ・Optimizer : Adam ・Scheduler : OneCycleLR ・SeedAveraging : 3 seed
0.014805003594543058
0.01909
・時間 : Commit 約32分 Submit ?分
このnotebookをアレンジしてsub ver.2: https://www.kaggle.com/takanobu0210/new-baseline-pytorch-moa?scriptVersionId=42667922 ver.3: https://www.kaggle.com/takanobu0210/new-baseline-pytorch-moa?scriptVersionId=42681153
VarianceThreshold(threshold=0.5)
で特徴量選択して学習(feature = 1,010個)ver.2: 0.014638007006513873 ver.3: 0.01464625646558292
ver.2: 0.01873 ver.3: 0.01875
ver.2, ver.3共通
EDA : https://www.kaggle.com/sinchir0/eda-sig-id-ctl-vehicle Submit : https://www.kaggle.com/sinchir0/case2-org-mean-ctrl-vehicle-diff
ctl_vehicleのデータによるg-,c-のヒストグラムは 全データのヒストグラムよりも裾が小さくなる傾向にある。
例:
ここで触れているように、「ctl_vehicleとtrt_cpの差分を見て、MoAを決定している」という仮説が正しい場合、 ctl_vehicleのg-とc-の平均値をtrt_cpの特徴量から引いてあげれば、モデルから見てより分かりやすい特徴量になるかもしれない。
今回 : 0.014808928458122645 元々 : 0.014805003594543058 差分 : +0.00000392486358
今回 : 0.01911 元々 : 0.01909 差分 : +0.00002
微妙に悪化しただけで終わった😂
https://www.kaggle.com/takanobu0210/pytorch-pca-svc-cv-0-01461-lb-0-01871
基本的には https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-692385207 と一緒 変更点は下記
0.01461
0.01871
一応公開notebookのスコアは超えた(csvをsubするだけのnotebookを除いて) テーブルデータのNN、どうやって改善していけば良いのか全然ワカラン・・・
https://www.kaggle.com/masatakashiwagi/pytorch-umap-kmeans-multi-input-model
CV log_loss: 0.016118987564545894
0.01984
umapの結果を可視化すると、クラスターがいくつかあることが分かる --> 特徴量/Validationに活かせないか?
lossがnanになるケースが何回かあり、学習率を下げる or BN層を追加する or ELUを使うなどで対応した
他にはgradient clippingが有効みたい: 参考
genes: 学習データをクラスタリングした結果
cells: 学習データをクラスタリングした結果
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-690871592
https://www.kaggle.com/sinchir0/i13-try-group-k-fold-moa-pytorch-nn-starter?scriptVersionId=44257757
g-,c-特徴量に対し、k-meansを行い、20個までクラスターを作成。 そのクラスター単位でgroup k-foldを実施。 お気持ちとしては、CVとLBの乖離が酷い原因として 「似たようなデータが入っていて、それがtrainとvalidに分かれるため、 CVだけ妙に良くなってしまう」を仮定し、group k-foldでそれを防げるかの検証。
UMAPで特徴量を2次元まで落とし、クラスターを可視化した結果は下記(びみょう・・・)
今回 : 0.015959673292945387 元々: 0.014805003594543058 差分 : +0.001154669698402
今回 : 0.01889 元々 : 0.01909 差分 : -0.0002
多少はCVとLBが近づいたので良い気がする。やはりMultiLabel Stratified group k-foldが必要か🤔
https://www.kaggle.com/takanobu0210/pytorch-pca-svc-ss-aggfeatures?scriptVersionId=44228109
cell特徴量に対して、cp_type
, cp_dose
, cp_time
ごとに歪度と尖度の特徴量を追加して学習
cf. https://github.com/team90s/kaggle-MoA/issues/12#issuecomment-704629547
(元のnotebookはこちら)
今回 : 0.01459 元々 : 0.01456 差分 : 0.00003
今回 : 0.01871 元々 : 0.01868 差分 : 0.00003
https://www.kaggle.com/takanobu0210/pytorch-pca-svc-ss-aggfeatures?scriptVersionId=44245521
gene特徴量に対して、cp_type
, cp_dose
, cp_time
ごとに歪度と尖度の特徴量を追加して学習
cf. https://github.com/team90s/kaggle-MoA/issues/12#issuecomment-704629547
(元のnotebookはこちら)
今回 : 0.01499 元々 : 0.01456 差分 : 0.00043
今回 : 0.01883 元々 : 0.01868 差分 : 0.00015
https://www.kaggle.com/takanobu0210/pytorch-pca-svc-standardscaler?scriptVersionId=43224413
https://www.kaggle.com/takanobu0210/pytorch-pca-svc-standardscaler-elu?scriptVersionId=44360228
活性化関数をReLu→ELUに変更した
今回 : 0.01533 元々 : 0.01456 差分 : 0.00067
今回 : 0.01930 元々 : 0.01868 差分 : 0.00062
元kernel : https://www.kaggle.com/kailex/moa-transfer-recipe ↑をPythonで行ったkernel : https://www.kaggle.com/chriscc/kubi-pytorch-moa-transfer それを多少自分で書き換えたもの : https://www.kaggle.com/sinchir0/i14-transfer-base?scriptVersionId=44404999
https://www.kaggle.com/sinchir0/i14-transfer
転移学習 最初はnon-scoredをtargetにして学習。 そのweightを本番のモデルに転移。 最後の出力層だけ改めて付け替えて再度学習。
7-fold 特徴量はそのまま
今回 : 0.014906081960468448 元々 : 0.01555747767960319 差分 : -0.000651395719135
今回 : 0.01876 元々 : 0.01910 差分 : -0.00034
https://www.kaggle.com/kailex/moa-transfer-recipe のコメントで
Transfer learning (without changing the recipe) helped me to improve the public score of the model from 0.01883 to 0.01878. The relative difference is not that big, but noticeable.
とある。0.01883 - 0.01878 = 0.00005のため、このコメントよりかはLB下がっている。
Transfer Learning未経験なので、誰かレビューしてくれると嬉しいです😂
Pytorchによる発展ディープラーニング p.17-31「転移学習の実装」も参考にしてます。
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-706531858
https://www.kaggle.com/sinchir0/i14-transfer-pca-var-thr
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-706531858 に対し、PCAを行い、VarianceThresholdを行ったもの。 元々の特徴量数876に対し、PCAで33個追加し合計909個。 VarianceThresholdで4個減らし、905個。
今回 : 0.014850493316133343 元々 : 0.014906081960468448 差分 : -0.000055588644335
今回 : 0.01873 元々 : 0.01876 差分 : -0.00003
ほぼ変わりませんでした😣
基礎統計量の特徴量を追加した
def feature_stats(df):
"""基礎統計量の追加
"""
df['g_sum'] = df[GENES].sum(axis=1)
df['g_mean'] = df[GENES].mean(axis=1)
df['g_std'] = df[GENES].std(axis=1)
df['g_kurt'] = df[GENES].kurtosis(axis=1)
df['g_skew'] = df[GENES].skew(axis=1)
df['c_sum'] = df[CELLS].sum(axis=1)
df['c_mean'] = df[CELLS].mean(axis=1)
df['c_std'] = df[CELLS].std(axis=1)
df['c_kurt'] = df[CELLS].kurtosis(axis=1)
df['c_skew'] = df[CELLS].skew(axis=1)
df['gc_sum'] = df[GENES + CELLS].sum(axis=1)
df['gc_mean'] = df[GENES + CELLS].mean(axis=1)
df['gc_std'] = df[GENES + CELLS].std(axis=1)
df['gc_kurt'] = df[GENES + CELLS].kurtosis(axis=1)
df['gc_skew'] = df[GENES + CELLS].skew(axis=1)
return df
今回 : 0.01455 元々 : 0.01456 差分 : -0.00001
今回 : 0.01867 元々 : 0.01868 差分 : -0.00001
baseにしたモデルとスコアはほぼ変わらず。。。
今回 : 0.01455 元々 : 0.01455 差分 : 0
今回 : 0.01867 元々 : 0.01867 差分 : 0
関連ISSUE: #22
https://www.kaggle.com/takanobu0210/pytorch-pca-svc-standardscaler?scriptVersionId=43224413
モデル: g- / c- / all feats(g-/c-/cp-)の特徴量をそれぞれ分けて3 inputとしてMLPを行った
今回: 0.015264159755005106 元々: 0.014564886043488417 差分: 0.0006992737115
今回: 0.01927 元々: 0.01867 差分: 0.0006
今回: 0.015213956350176748 元々: 0.014564886043488417 差分: 0.0006490703067
今回: 0.01924 元々: 0.01867 差分: 0.00057
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-706621572
https://www.kaggle.com/sinchir0/transfer-pca-var-thr-with-label-smoothing?scriptVersionId=44694641
label smoothingの実施。loss関数の中に組み込んでいる。(tensorflowの実装を再現している) 例えばsmoothing=0.001の場合、 target=[1,0,0]→[0.995,0.005,0.005]とするような変換。 これで精度が改善する理由がいまいち想像つかない・・・🤔 今週MTGでも相談させてください。
今回 : 0.015036533616153038 元々 : 0.014850493316133343 差分 : +0.00018604030002
今回 : 0.01866 元々 : 0.01873 差分 : -0.00007
CVは悪化、一方LBは改善。これはCVとLBが近づいたとみるべきなのか、 それともCVとLBの相関が取れなくなって悲しむべきなのか・・・😂
loss関数の中に組み込むのではなくてpostprocess的に出力値を0.001と0.999でclipするのもやってみたい。
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-708697621
https://www.kaggle.com/sinchir0/transfer-pca-var-thr-lab-sm-pp?scriptVersionId=44736004
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-708697621 に加えて、更にpostprocessとして predの値を0.005~0.995に調整
今回 : 0.015194962540935726 元々 : 0.015036533616153038 差分 : +0.000158428924783
今回 : 0.01878 元々 : 0.01866 差分 : +0.00012
悪化した、postprocessとしてpredの値を変えるのは有効に機能しない?
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-708697621
元々はlable smoothingしたloglossをlossにもEarlyStopping用のmetricにも使っていたが、 lossは維持したまま、metricのloglossのみ元(pytorchのBCEWithLogitsLoss)に戻した。
今回 : 0.015021585144778013 元々 : 0.015036533616153038 差分 : -0.000014948471375
今回 : 0.01863 元々 : 0.01866 差分 : -0.00003
label smoothingによるloglossの最適化のためには、lossの計算時のみlabel smoothingして、EarlyStoppingは普通のmetricにするのがよさそう。
https://www.kaggle.com/optimo/tabnetregressor-2-0-train-infer
https://www.kaggle.com/sinchir0/tabnetregressor-2-0-train-infer
元々のNotebookをそのまま出した。Tabnetのベースライン。
今回 : Overall AUC : 0.752557483010363 Average CV : 0.015532370835690834 元々 : 差分 :
今回 : 0.01864 元々 : 差分 :
N/A
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-710709431
https://www.kaggle.com/sinchir0/remove-vehicle-tabnetreg/notebook
trainからctrl_vehicleを削除
今回 : Overall AUC : 0.7372828271871401 Average CV : 0.01675025880546272 元々 : Overall AUC : 0.752557483010363 Average CV : 0.015532370835690834 差分 : Overall AUC : -0.0152746558232229 Average CV : -0.0012178888
今回 : 0.01867 元々 : 0.01864 差分 : 0.00003
trainのctrl_vehicle削除すると、CVは下がったけどLB上がった。うーん、という感じ。AUCに関してはどう評価すればいいのかよくわからない。
https://github.com/team90s/kaggle-MoA/issues/6#issuecomment-710711925
https://www.kaggle.com/sinchir0/lable-smoothing-remove-vehicle-tabnetreg
label smoothingの追加、trainのlossのみに適用。EarlyStoppingはpytorchのBCEWithLogitsLoss
今回 : Overall AUC : 0.7272430082348218 Average CV : 0.01691540708796658 元々 : Overall AUC : 0.7372828271871401 Average CV : 0.01675025880546272 差分 : Overall AUC : -0.0100398189523183 Average CV : +0.00016
今回 : 0.01857 元々 : 0.01867 差分 : -0.00010
CVはあがって、LBは下がる🤔
submissionを共有するISSUEです. コメントにsubの詳しい内容を、↓のテーブル(sub履歴)にそのリンクをまとめていきましょう💪 (コメントはテンプレをうまく使ってください〜!)
sub履歴
スプレッドシートに移行しました!末尾に追記していってください!(リンク知ってる人は全員見れるので、拡散注意でお願いします🙏) →https://docs.google.com/spreadsheets/d/1ulNrt4Mo__D5ihxYcp0dwDKm1qa8sfbYJxus1kjyquo/edit