"""Phase 1 ensemble components. python ens.py CUT TAG [--seeds 0,1] [--folds f|fe] [--stale] [--rc] [--drop re] [--params json] [--rounds 400] CUT=25/26: train f1..f(CUT-21) (+e/d folds) full data, predict val{CUT}; CUT=27: train f1..f6 (+E1..E6), predict eval. Saves ens/{tag}_c{CUT}_s{seed}.npy with raw scores at rounds 300,400(,500) (columns).""" import sys, re, json, gc, time, argparse, numpy as np, lightgbm as lgb from cl import matrix from sklearn.metrics import roc_auc_score ap=argparse.ArgumentParser(); ap.add_argument('cut',type=int); ap.add_argument('tag'); ap.add_argument('--seeds',default='0') ap.add_argument('--folds',default='f'); ap.add_argument('--stale',action='store_true'); ap.add_argument('--rc',action='store_true') ap.add_argument('--drop',default=None); ap.add_argument('--params',default='{}'); ap.add_argument('--rounds',type=int,default=400); ap.add_argument('--threads',type=int,default=5); ap.add_argument('--lr',default='') a=ap.parse_args(); t0=time.time() extra=(('feat_rc',) if a.rc else ())+((a.lr,) if a.lr else ()); var='stale' if a.stale else 'notime' efold={25:[f'e{k}' for k in range(1,5)],26:[f'd{k}' for k in range(1,6)],27:[f'E{k}' for k in range(1,7)]}[a.cut] trn=([f'f{k}' for k in range(1,a.cut-20)] if 'f' in a.folds else [])+(efold if 'e' in a.folds else []) Xs=[];ys=[];feats=None for n in trn: X,m,f=matrix(n,1.0,variant=var,extra=extra); feats=f; Xs.append(X); ys.append(m['clicked'].to_numpy()); del X,m; gc.collect() X=np.concatenate(Xs); del Xs; gc.collect(); y=np.concatenate(ys) keep=[i for i,c in enumerate(feats) if not (a.drop and re.search(a.drop,c))]; fl=[feats[i] for i in keep] if len(keep)