[LAB 21 · 研究收束:让划分对应新样本](/course/notebooks/dab894ab6e7e445f9fd05331529ee632.html) # 全讲收束:你的“新样本”究竟新在哪里? · 实现代码 [独立阅读](/course/notebook-blocks/40cd76c6ca1443379cf6e888f570823a.html) 按问题继续 采集批次泄漏、随机/分组划分、两个基线的实测对照 展开完整实现代码 ``` # Writable ephemeral workspace for detached readonly cloud runs. import os, tempfile os.chdir(tempfile.mkdtemp(prefix='lec03_lab24_')) import numpy as np r=np.random.default_rng(24); groups=np.repeat(np.arange(12),20); x=r.normal(size=len(groups)); offsets=r.normal(0,3,12); y=.7*x+offsets[groups]+r.normal(0,.25,len(x)) random_test=np.zeros(len(x),bool); random_test[r.permutation(len(x))[:60]]=True group_test=groups>=9 def compare(test): train=~test; means={g:y[train&(groups==g)].mean() for g in np.unique(groups[train])} memorized=np.array([means.get(g,y[train].mean()) for g in groups[test]]) X=np.c_[x,np.ones(len(x))]; w=np.linalg.lstsq(X[train],y[train],rcond=None)[0] rmse=lambda p:float(np.sqrt(np.mean((p-y[test])**2))) return {'ntrain':int(train.sum()),'ntest':int(test.sum()),'overlapping_groups':len(set(groups[train])&set(groups[test])),'batch_mean_RMSE':rmse(memorized),'x_only_RMSE':rmse(X[test]@w)} print('random sample split',compare(random_test)); print('new batch split',compare(group_test)) assert compare(group_test)['overlapping_groups']==0 print('claim tested: does low random-split error predict performance in unseen acquisition groups?') ```