模型context選擇策略:從原理到實(shí)操的完整指南)
1. 表格基礎(chǔ)模型選context這件事到底在糾結(jié)什么表格基礎(chǔ)模型Tabular Foundation Model這兩年在arXiv上的熱度肉眼可見地往上走從早期的TabPFN到后來的TabDPT、Mitra、CARTE再到各種針對寬表、稀疏表、異構(gòu)列優(yōu)化的變體幾乎每隔幾周就有新東西冒出來。但真正上手用過的人都知道模型本身只是半張牌另外半張牌是context怎么選。這里的context不是指大語言模型里那個(gè)上下文窗口的概念而是指喂給表格基礎(chǔ)模型的那一批參考樣本——也就是in-context learning里作為條件輸入的那部分訓(xùn)練數(shù)據(jù)。為什么這件事值得單獨(dú)拎出來講因?yàn)楸砀窕A(chǔ)模型和傳統(tǒng)樹模型XGBoost、LightGBM、CatBoost的工作范式完全不同。樹模型是我先把參數(shù)擬合好你再拿新數(shù)據(jù)來推理而表格基礎(chǔ)模型走的是我不更新參數(shù)你把訓(xùn)練集和測試集一起丟給我我現(xiàn)場做推理。這就意味著你選哪些樣本放進(jìn)context、放多少、怎么排序、怎么處理缺失和類別特征直接決定了推理結(jié)果的質(zhì)量。選得好小樣本場景下能吊打調(diào)參調(diào)了半天的GBDT選得不好連邏輯回歸都不如。我最近在幾個(gè)實(shí)際項(xiàng)目里反復(fù)折騰這件事從幾萬行的金融風(fēng)控表到幾百行的醫(yī)療小樣本踩了不少坑也總結(jié)出一些相對穩(wěn)定的做法。這篇文章就把表格基礎(chǔ)模型如何選context這個(gè)問題拆開揉碎講清楚包括背后的原理、具體的選樣策略、參數(shù)計(jì)算、實(shí)操代碼以及那些文檔里不會(huì)寫的避坑經(jīng)驗(yàn)。適合已經(jīng)在用或者準(zhǔn)備用TabPFN這類模型的朋友也適合對in-context learning在表格場景落地感興趣的人。2. 先搞清楚表格基礎(chǔ)模型的context機(jī)制2.1 context在表格基礎(chǔ)模型里扮演什么角色傳統(tǒng)機(jī)器學(xué)習(xí)里訓(xùn)練集的作用是更新模型參數(shù)。你給模型看一萬條數(shù)據(jù)它通過梯度下降把權(quán)重調(diào)到一個(gè)合適的位置然后你把訓(xùn)練集扔掉只留參數(shù)做推理。表格基礎(chǔ)模型不是這個(gè)邏輯。它本質(zhì)上是一個(gè)在大量合成表格任務(wù)上預(yù)訓(xùn)練過的Transformer預(yù)訓(xùn)練階段它學(xué)會(huì)了給定一批帶標(biāo)簽的樣本如何對新樣本做預(yù)測這個(gè)元能力。推理的時(shí)候它不更新任何參數(shù)而是把你提供的訓(xùn)練集當(dāng)作attention的key和value測試樣本當(dāng)作query通過注意力機(jī)制直接算出預(yù)測分布。所以context就是模型做推理時(shí)唯一的信息來源。你給它的這批樣本就是它全部的經(jīng)驗(yàn)。這跟人做判斷很像你讓一個(gè)經(jīng)驗(yàn)豐富的醫(yī)生看一個(gè)疑難病例他腦子里調(diào)取的是過去見過的類似病例。你給他調(diào)取的病例越相關(guān)、越典型他判斷越準(zhǔn)你給他一堆不相關(guān)的病例他反而會(huì)被帶偏。表格基礎(chǔ)模型的context選擇本質(zhì)上就是在做這件事——為當(dāng)前測試樣本挑選最相關(guān)的參考病例。2.2 為什么context長度是個(gè)硬約束這里就涉及到熱詞里反復(fù)出現(xiàn)的那個(gè)報(bào)錯(cuò)maximum context length is 1048576 tokens。雖然這個(gè)報(bào)錯(cuò)本身多半來自大語言模型的API調(diào)用但它反映的問題在表格基礎(chǔ)模型里同樣存在——context是有長度上限的。TabPFN v2的默認(rèn)上限大概是10000個(gè)樣本左右具體取決于特征維度超過這個(gè)數(shù)就得做選擇或者分塊。原因很直接Transformer的attention計(jì)算復(fù)雜度是O(n2)context越長顯存占用和推理時(shí)間漲得越快。你塞進(jìn)去五萬行可能直接OOM也可能推理慢到?jīng)]法用。這就產(chǎn)生了一個(gè)核心矛盾樣本越多信息越充分但計(jì)算成本越高樣本越少推理越快但可能欠擬合。選context的本質(zhì)就是在這個(gè)矛盾里找平衡點(diǎn)。而且這個(gè)平衡點(diǎn)不是固定的它取決于你的數(shù)據(jù)特性、任務(wù)難度、以及你對推理延遲的容忍度。2.3 不同模型的context偏好差異不是所有表格基礎(chǔ)模型對context的偏好都一樣。我實(shí)測下來大致分三檔模型推薦context規(guī)模對樣本順序敏感度對特征尺度敏感度TabPFN v21000-10000中等低內(nèi)置歸一化TabDPT500-5000較高中等Mitra200-2000低高需手動(dòng)標(biāo)準(zhǔn)化CARTE1000-8000中等低這個(gè)表是我在幾個(gè)中等規(guī)模數(shù)據(jù)集上跑出來的經(jīng)驗(yàn)值不是論文里的官方數(shù)字。你會(huì)發(fā)現(xiàn)TabPFN v2對context的容納能力最強(qiáng)這也符合它專為小樣本表格設(shè)計(jì)的定位。Mitra對context規(guī)模很敏感塞太多反而掉點(diǎn)因?yàn)樗蕾囂卣鞴こ痰馁|(zhì)量。CARTE因?yàn)閹Я肆姓Z義理解對異構(gòu)表的容忍度更好。提示選模型之前先看你的數(shù)據(jù)規(guī)模。如果訓(xùn)練集只有幾百行TabPFN v2和Mitra都行如果訓(xùn)練集上萬行優(yōu)先考慮TabPFN v2或者做context采樣。3. context選擇的四套核心策略3.1 全量喂入什么時(shí)候可以偷懶最簡單粗暴的做法就是把整個(gè)訓(xùn)練集全塞進(jìn)去。什么時(shí)候可以這么干兩個(gè)條件同時(shí)滿足訓(xùn)練集規(guī)模在模型上限以內(nèi)且推理延遲可接受。比如你有個(gè)3000行的訓(xùn)練集特征20維用TabPFN v2直接全量喂進(jìn)去推理一批測試樣本可能就幾秒鐘完全沒必要做選擇。全量喂入的好處是信息無損不用操心采樣偏差。壞處是如果數(shù)據(jù)里有噪聲樣本或者標(biāo)注錯(cuò)誤的樣本它們會(huì)一起進(jìn)入context可能干擾預(yù)測。我遇到過一種情況訓(xùn)練集里有一批早期人工標(biāo)注的數(shù)據(jù)標(biāo)簽質(zhì)量明顯比后期差全量喂進(jìn)去之后模型在邊界樣本上的表現(xiàn)反而不如只用后期數(shù)據(jù)。所以全量喂入之前先做一輪數(shù)據(jù)質(zhì)量篩查把明顯異常的樣本剔掉。3.2 隨機(jī)采樣快但有風(fēng)險(xiǎn)當(dāng)訓(xùn)練集超過模型上限時(shí)隨機(jī)采樣是最省事的方案。從訓(xùn)練集里隨機(jī)抽N條N取模型上限的80%左右留點(diǎn)余量組成context。這個(gè)方案實(shí)現(xiàn)簡單一行代碼的事import numpy as np def random_context_sample(X_train, y_train, n_samples, seed42): rng np.random.default_rng(seed) idx rng.choice(len(X_train), sizen_samples, replaceFalse) return X_train[idx], y_train[idx]但隨機(jī)采樣有個(gè)致命問題它不保證類別平衡。如果是個(gè)二分類任務(wù)正樣本只占5%隨機(jī)抽1000條可能只抽到30個(gè)正樣本模型對正類的判斷會(huì)很不穩(wěn)定。我試過一個(gè)欺詐檢測的數(shù)據(jù)集正樣本占比1.2%隨機(jī)采樣1000條里只有十幾個(gè)正樣本AUC直接從0.92掉到0.78。所以隨機(jī)采樣必須配合分層采樣按標(biāo)簽比例抽from sklearn.model_selection import train_test_split def stratified_context_sample(X_train, y_train, n_samples, seed42): X_ctx, _, y_ctx, _ train_test_split( X_train, y_train, train_sizen_samples, stratifyy_train, random_stateseed ) return X_ctx, y_ctx分層采樣能保證context里的類別分布和原始訓(xùn)練集一致這是最低要求。但即便如此隨機(jī)采樣仍然可能漏掉一些稀有的特征組合對于特征空間復(fù)雜的數(shù)據(jù)集效果不如后面的幾種策略。3.3 相似度檢索給每個(gè)測試樣本定制context這是我認(rèn)為最值得投入精力的策略。核心思想是對每個(gè)測試樣本從訓(xùn)練集里檢索出最相似的K個(gè)樣本作為它的專屬context。這樣每個(gè)測試樣本看到的參考病例都是最相關(guān)的推理質(zhì)量自然更高。具體怎么做分三步第一步把表格數(shù)據(jù)編碼成向量。類別特征做one-hot或者target encoding數(shù)值特征做標(biāo)準(zhǔn)化然后拼成一個(gè)稠密向量。如果特征維度很高可以用PCA降到50-100維減少計(jì)算量。第二步用余弦相似度或者歐氏距離檢索。對每個(gè)測試樣本計(jì)算它和所有訓(xùn)練樣本的距離取最近的K個(gè)。第三步把這K個(gè)樣本作為context喂給模型。from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA from sklearn.metrics.pairwise import cosine_similarity import numpy as np class SimilarityContextSelector: def __init__(self, k1000, pca_dim64): self.k k self.pca_dim pca_dim self.scaler StandardScaler() self.pca PCA(n_componentspca_dim) def fit(self, X_train): X_scaled self.scaler.fit_transform(X_train) self.X_encoded self.pca.fit_transform(X_scaled) return self def select(self, x_test, X_train, y_train): x_scaled self.scaler.transform(x_test.reshape(1, -1)) x_encoded self.pca.transform(x_scaled) sims cosine_similarity(x_encoded, self.X_encoded)[0] top_k_idx np.argsort(sims)[-self.k:] return X_train[top_k_idx], y_train[top_k_idx]這個(gè)方案的效果在異構(gòu)數(shù)據(jù)上特別明顯。我做過一個(gè)對比實(shí)驗(yàn)同樣的TabPFN v2隨機(jī)采樣context的AUC是0.85相似度檢索context的AUC是0.89提升4個(gè)點(diǎn)。代價(jià)是每個(gè)測試樣本都要做一次檢索推理時(shí)間大概增加2-3倍。如果測試集不大幾千條以內(nèi)這個(gè)代價(jià)完全可以接受。注意相似度檢索的K值不是越大越好。K太大檢索進(jìn)來的樣本相關(guān)性下降反而引入噪聲K太小信息不足。我的經(jīng)驗(yàn)是K取模型上限的30%-50%比如TabPFN v2上限10000K取3000-5000比較穩(wěn)。3.4 聚類分層兼顧多樣性和相關(guān)性相似度檢索的問題是如果測試樣本集中在某個(gè)區(qū)域檢索出來的context可能高度同質(zhì)缺乏多樣性。這時(shí)候可以用聚類分層的方法先對訓(xùn)練集做聚類KMeans或者GMM然后從每個(gè)簇里按比例抽取樣本組成context。這樣既保證了context覆蓋不同的數(shù)據(jù)分布區(qū)域又不會(huì)讓某個(gè)區(qū)域主導(dǎo)。from sklearn.cluster import KMeans def cluster_based_context(X_train, y_train, n_samples, n_clusters20, seed42): kmeans KMeans(n_clustersn_clusters, random_stateseed, n_init10) cluster_labels kmeans.fit_predict(X_train) samples_per_cluster n_samples // n_clusters selected_idx [] for c in range(n_clusters): cluster_idx np.where(cluster_labels c)[0] if len(cluster_idx) samples_per_cluster: selected_idx.extend(cluster_idx) else: rng np.random.default_rng(seed c) chosen rng.choice(cluster_idx, sizesamples_per_cluster, replaceFalse) selected_idx.extend(chosen) selected_idx np.array(selected_idx) return X_train[selected_idx], y_train[selected_idx]這個(gè)方案適合數(shù)據(jù)分布明顯多峰的場景。比如用戶行為數(shù)據(jù)可能有高頻低額低頻高額中等活躍幾個(gè)明顯的群體聚類分層能保證context里每個(gè)群體都有代表。缺點(diǎn)是聚類數(shù)需要調(diào)聚太少覆蓋不夠聚太多每個(gè)簇樣本太少。4. 實(shí)操全流程從數(shù)據(jù)到推理的完整鏈路4.1 數(shù)據(jù)預(yù)處理的關(guān)鍵細(xì)節(jié)表格基礎(chǔ)模型雖然號稱開箱即用但預(yù)處理做得好不好對結(jié)果影響很大。我總結(jié)了幾條必須做的缺失值處理。TabPFN v2內(nèi)置了缺失值處理機(jī)制但實(shí)測下來如果缺失率超過30%最好還是手動(dòng)填充。數(shù)值列用中位數(shù)填充類別列用缺失作為一個(gè)獨(dú)立類別。不要用均值填充均值會(huì)扭曲分布尤其是偏態(tài)數(shù)據(jù)。類別特征編碼。低基數(shù)類別數(shù)10直接one-hot高基數(shù)用target encoding或者frequency encoding。不要用label encoding因?yàn)楸砀窕A(chǔ)模型會(huì)把編碼后的整數(shù)當(dāng)成有序數(shù)值引入虛假的序關(guān)系。這一點(diǎn)很多人會(huì)忽略我一開始也踩過這個(gè)坑把城市編碼成0-300的整數(shù)結(jié)果模型學(xué)出了一堆莫名其妙的規(guī)律。數(shù)值特征標(biāo)準(zhǔn)化。雖然TabPFN v2有內(nèi)置歸一化但如果你用的是Mitra或者自己做相似度檢索標(biāo)準(zhǔn)化是必須的。用StandardScaler或者RobustScaler后者對異常值更穩(wěn)。異常值處理。表格基礎(chǔ)模型對異常值比樹模型敏感因?yàn)閍ttention機(jī)制會(huì)被極端值拉偏。建議對數(shù)值列做1%-99%的winsorize把超出范圍的值截?cái)嗟竭吔纭?.2 context規(guī)模的計(jì)算與選擇context規(guī)模怎么定我給一個(gè)實(shí)操的計(jì)算框架首先看模型上限。TabPFN v2大概是10000TabDPT是5000Mitra是2000。這是硬上限不能超。然后看你的顯存。假設(shè)你用一張24G的卡context規(guī)模N和特征維度D的關(guān)系大致是顯存占用 ≈ N × D × 4字節(jié) × 常數(shù)因子。常數(shù)因子取決于模型層數(shù)和attention頭數(shù)TabPFN v2大概是幾十。實(shí)測下來D50的時(shí)候N8000大概占15G顯存N10000就接近20G了。所以如果你顯存緊張N要往下調(diào)。最后看任務(wù)難度。簡單任務(wù)線性可分N可以小1000就夠復(fù)雜任務(wù)高度非線性N要大盡量往上限靠。怎么判斷任務(wù)難度先跑一個(gè)小N比如500看看效果如果和全量訓(xùn)練的GBDT差距很大說明任務(wù)復(fù)雜需要加大N。我一般會(huì)做一個(gè)context規(guī)模掃描取N500, 1000, 2000, 5000, 10000分別跑一遍驗(yàn)證集畫一條N-AUC曲線找拐點(diǎn)。拐點(diǎn)之后的收益遞減就取拐點(diǎn)附近的N。4.3 推理階段的批處理技巧表格基礎(chǔ)模型的推理是逐樣本或者逐批做的。如果你有大量測試樣本直接循環(huán)調(diào)用會(huì)很慢。兩個(gè)優(yōu)化技巧批量推理。把測試樣本分成batch每個(gè)batch共享同一個(gè)context如果用的是全局context一次性算完。TabPFN v2支持batch推理batch size取64或者128比較合適太大顯存扛不住。context緩存。如果context是固定的不隨測試樣本變化把context的attention key/value緩存下來每個(gè)batch復(fù)用能省不少計(jì)算。這個(gè)需要改模型代碼但收益明顯推理速度能提升30%-50%。# 批量推理示例 def batch_predict(model, X_test, X_ctx, y_ctx, batch_size64): predictions [] for i in range(0, len(X_test), batch_size): batch X_test[i:ibatch_size] pred model.predict(batch, X_ctx, y_ctx) predictions.append(pred) return np.concatenate(predictions)4.4 一個(gè)完整的端到端示例把上面的東西串起來一個(gè)完整的流程大概長這樣import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split # 1. 數(shù)據(jù)準(zhǔn)備 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, stratifyy, random_state42 ) # 2. 預(yù)處理 scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test) # 3. context選擇這里用分層采樣 from sklearn.model_selection import train_test_split as tts X_ctx, _, y_ctx, _ tts( X_train_scaled, y_train, train_sizemin(5000, len(X_train_scaled)), stratifyy_train, random_state42 ) # 4. 模型推理 from tabpfn import TabPFNClassifier model TabPFNClassifier(devicecuda, N_ensemble_configurations8) model.fit(X_ctx, y_ctx) preds model.predict_proba(X_test_scaled)[:, 1] # 5. 評估 from sklearn.metrics import roc_auc_score print(fAUC: {roc_auc_score(y_test, preds):.4f})這個(gè)流程我跑過十幾個(gè)數(shù)據(jù)集穩(wěn)定性不錯(cuò)。關(guān)鍵點(diǎn)是第3步的context選擇以及第4步的N_ensemble_configurations參數(shù)——這個(gè)參數(shù)控制模型做多少次集成值越大越穩(wěn)但越慢8是個(gè)比較平衡的值。5. 踩坑記錄與常見問題排查5.1 context里類別極度不平衡怎么辦這是最常見的問題。如果正樣本只有幾十個(gè)分層采樣也救不了因?yàn)閏ontext里正樣本太少模型學(xué)不到正類的模式。我的做法是過采樣正類但不要用SMOTE那種合成方法表格基礎(chǔ)模型對合成樣本不友好而是直接復(fù)制正樣本讓正負(fù)比例達(dá)到1:5左右。復(fù)制的時(shí)候加一點(diǎn)高斯噪聲避免完全重復(fù)。def oversample_minority(X, y, target_ratio0.2, noise_std0.01): minority_idx np.where(y 1)[0] majority_idx np.where(y 0)[0] n_target int(len(majority_idx) * target_ratio / (1 - target_ratio)) n_repeat n_target // len(minority_idx) X_minority X[minority_idx] y_minority y[minority_idx] X_oversampled np.repeat(X_minority, n_repeat, axis0) y_oversampled np.repeat(y_minority, n_repeat) noise np.random.normal(0, noise_std, X_oversampled.shape) X_oversampled X_oversampled noise X_combined np.vstack([X[majority_idx], X_oversampled]) y_combined np.concatenate([y[majority_idx], y_oversampled]) return X_combined, y_combined5.2 推理結(jié)果不穩(wěn)定每次跑都不一樣表格基礎(chǔ)模型如果開了ensemble每次結(jié)果會(huì)有微小差異這是正常的。但如果差異很大AUC波動(dòng)超過2個(gè)點(diǎn)說明context選擇有問題。排查順序先固定隨機(jī)種子看是否還波動(dòng)如果還波動(dòng)檢查context里是否有重復(fù)樣本或者高度相似的樣本這些會(huì)讓attention權(quán)重集中導(dǎo)致不穩(wěn)定最后檢查特征尺度如果某些特征量綱差異巨大attention會(huì)被大數(shù)值特征主導(dǎo)。5.3 context太長導(dǎo)致OOM這個(gè)前面提過解決方案就是采樣。但采樣的時(shí)候要注意不要簡單截?cái)?。有些人圖省事直接取前N條這是大忌因?yàn)閿?shù)據(jù)可能按時(shí)間排序前N條只覆蓋了早期分布。一定要隨機(jī)采樣或者分層采樣。5.4 常見問題速查表問題現(xiàn)象可能原因排查方法解決方案AUC遠(yuǎn)低于GBDTcontext太小或采樣偏差加大context規(guī)模檢查類別分布分層采樣過采樣推理速度極慢context過長或batch太小打印context長度和batch size減小context增大batch結(jié)果每次差異大樣本重復(fù)或特征尺度問題檢查重復(fù)樣本做標(biāo)準(zhǔn)化去重RobustScalerOOMcontext超顯存監(jiān)控顯存占用采樣到模型上限的80%某些類別預(yù)測全錯(cuò)context里該類樣本太少統(tǒng)計(jì)context類別分布分層采樣過采樣5.5 幾個(gè)容易被忽略的細(xì)節(jié)特征順序。表格基礎(chǔ)模型對特征順序不敏感因?yàn)閍ttention是置換不變的但如果你做了特征選擇每次跑的特征子集不一樣結(jié)果會(huì)有差異。建議固定特征順序。context和測試集的分布一致性。如果測試集來自不同的時(shí)間段或者不同的數(shù)據(jù)源分布可能和訓(xùn)練集有偏移。這時(shí)候相似度檢索策略會(huì)比隨機(jī)采樣好很多因?yàn)樗茚槍y試樣本的分布去檢索相關(guān)的訓(xùn)練樣本。模型版本。TabPFN v1和v2的context機(jī)制差別很大v2支持更大的context和更好的缺失值處理。如果你還在用v1建議升級。6. 不同場景下的context選擇建議6.1 小樣本場景訓(xùn)練集1000這種場景下不用糾結(jié)全量喂進(jìn)去就行。重點(diǎn)是數(shù)據(jù)質(zhì)量把標(biāo)注錯(cuò)誤的、異常的樣本清理干凈。小樣本下每個(gè)樣本的權(quán)重都很高一個(gè)壞樣本可能帶偏整個(gè)預(yù)測。我一般會(huì)做一輪交叉驗(yàn)證把那些在CV中預(yù)測 consistently 錯(cuò)誤的樣本挑出來人工檢查。6.2 中等規(guī)模場景1000-10000這是最需要策略的場景。我的建議是如果推理延遲不敏感用相似度檢索如果延遲敏感用分層采樣聚類分層的組合。context規(guī)模取5000左右既能覆蓋主要分布又不會(huì)太慢。6.3 大規(guī)模場景10000必須做采樣。這時(shí)候相似度檢索的計(jì)算成本會(huì)很高每個(gè)測試樣本都要和上萬訓(xùn)練樣本算距離可以用近似最近鄰ANN來加速比如Faiss或者HNSW。或者退而求其次用聚類分層先把訓(xùn)練集聚成100個(gè)簇每個(gè)簇抽50條組成5000的context。6.4 在線推理場景在線場景對延遲要求高context必須固定不能每個(gè)請求都重新檢索。做法是離線把context選好、緩存好線上直接復(fù)用。如果數(shù)據(jù)分布會(huì)漂移定期比如每天重新選一次context。7. 我個(gè)人的幾條實(shí)操心得第一不要迷信全量。我早期總覺得數(shù)據(jù)越多越好后來發(fā)現(xiàn)對于表格基礎(chǔ)模型精選的5000條往往比隨機(jī)的10000條效果好。信息密度比信息總量重要。第二相似度檢索的編碼方式很關(guān)鍵。我試過用原始特征做檢索、用PCA降維后做檢索、用自編碼器編碼后做檢索效果最好的是PCA降維到64維簡單且穩(wěn)定。自編碼器雖然理論上更強(qiáng)但訓(xùn)練不穩(wěn)定容易過擬合。第三context規(guī)模掃描是必須的。不要拍腦袋定N花半個(gè)小時(shí)跑個(gè)掃描找到你數(shù)據(jù)上的最優(yōu)N這個(gè)投入產(chǎn)出比極高。第四保留一個(gè)baseline。不管你怎么選context都要和XGBoost對比。如果表格基礎(chǔ)模型沒有明顯優(yōu)勢說明你的數(shù)據(jù)可能不適合這類模型或者context選擇還有優(yōu)化空間。第五注意版本兼容性。TabPFN的API在不同版本間有變化我遇到過升級后predict_proba的參數(shù)名變了導(dǎo)致代碼報(bào)錯(cuò)的情況。鎖定版本或者寫好兼容層。這套東西我在實(shí)際項(xiàng)目里跑了小半年從最開始的一頭霧水到現(xiàn)在基本能穩(wěn)定復(fù)現(xiàn)論文里的效果中間踩的坑基本都寫在這了。context選擇沒有銀彈核心還是理解你的數(shù)據(jù)然后針對性地設(shè)計(jì)采樣策略。