ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【老计带你懂AI算法】22:模型选型速查与怎么判断模型好不好,系列收官

【老计带你懂AI算法】22:模型选型速查与怎么判断模型好不好,系列收官 【老计带你懂AI算法】22模型选型速查与怎么判断模型好不好系列收官开头走完了一整圈到这一篇《老计带你懂AI算法》整个系列就要收官了。回头看我们从最朴素的线性回归出发走过了决策树、随机森林、XGBoost、SVM、朴素贝叶斯、聚类、降维、异常检测走过了时序和推荐又一路穿过神经网络、CNN、RNN、GNN、GAN、扩散模型、强化学习最后抵达了Transformer和大模型。从统计学习到深度学习再到大模型这一整圈走下来你已经建立起了理解绝大多数AI模型的底层认知。这最后一篇我不再讲新模型而是做两件更实用的事一是给你一份拿到问题怎么选模型的速查思路二是回答那个比选模型更重要的问题怎么判断一个模型到底好不好。给整个系列画一个圆满的句号。第一件事拿到问题怎么选模型还记得第02篇总览说的核心原则吗先问要解决什么任务别先问用什么模型。这里给你一套更具体的决策思路。第一步看你的数据是什么类型。这基本决定了大方向表格数据一行行样本、一列列特征首选树模型尤其XGBoost、LightGBM又准又省心要强解释性或做基线用线性/逻辑回归数据量小也可试试。这是工业界最常见的场景别一上来就想深度学习。图像、视频用CNN或视觉Transformer且优先考虑迁移学习拿预训练模型微调。文本、语言小任务可用朴素贝叶斯、逻辑回归做基线正经做用Transformer类的预训练模型如BERT或直接调大模型。序列、时序经典规律用ARIMA、Prophet要融合外部特征首选XGBoost加特征工程超长复杂序列考虑LSTM或时序Transformer。图、网状数据用GNN。要生成内容图像用扩散模型文本用大模型。连续决策、试错强化学习。第二步看你有没有标签。有标签用监督学习分类回归那套没标签用无监督聚类、降维、孤立森林。第三步权衡三件事效果、可解释性、成本。有时候一个可解释、够快、够省的简单模型比一个高一点点精度但又贵又黑盒的复杂模型更适合上线。贯穿始终的一条铁律能用简单的就别上复杂的先用简单模型打个基线再看复杂模型是否真的值得。这是我在整个系列里反复强调的也是工程上最实在的智慧。除了数据类型和标签实际选型还有两个特别现实、却常被新手忽略的考量我结合工程经验多说两句。一是数据量。深度学习、大模型是吃数据长大的你只有几百上千条数据硬上复杂神经网络多半过拟合、还不如一个逻辑回归或树模型来得稳。数据量小的时候简单模型往往是更明智的选择这条经验能帮你少走很多弯路。二是团队和工程成本。一个模型不是跑通就完了它要上线、要维护、要有人能看懂能调优、要考虑推理的算力和延迟成本。一个团队人人都能维护的XGBoost很多时候比一个只有一个博士能碰、还要一堆GPU伺候的复杂模型更适合真实业务。选模型从来不只是选精度最高的那个而是在效果、数据、成本、可维护性之间选那个综合最划算的这是从写代码到做技术决策的一次认知升级。我见过太多团队为了追时髦上了压不住的复杂方案最后维护不动、悄悄下线教训深刻。第二件事怎么判断一个模型好不好这件事其实比会选模型更重要也是新手最容易犯错的地方。很多人以为准确率高就是好模型这是一个危险的误解。我们把它讲透。陷阱一准确率会骗人先说那个最经典的坑。假设你做一个癌症筛查模型人群里真正的病人只占1%。你训练一个无脑模型不管三七二十一把所有人都判为健康它的准确率是多少99%。准确率高得吓人可它一个病人都没查出来是个彻头彻尾的废物模型。这就是准确率在数据不均衡时的陷阱。光看准确率会被严重误导。所以我们需要更细致的指标精确率模型说是病人的那些人里真正是病人的比例查得准不准、有没有冤枉好人。召回率所有真正的病人里被模型成功查出来的比例有没有漏掉病人。F1分数精确率和召回率的综合平衡。精确率和召回率往往是一对矛盾你得根据业务权衡。癌症筛查宁可错报也别漏诊要保召回率垃圾邮件过滤宁可漏几封也别把重要邮件误杀要保精确率。选对评估指标比追求高准确率重要得多这是做AI的基本功。还有个在实际中特别常用的指标叫AUC也一并讲给你。前面说过很多分类模型输出的是概率你要设一个阈值比如0.5才能变成是/否。可这个阈值定在哪很影响精确率和召回率定死了不好比较。AUC的妙处在于它衡量的是模型在所有可能的阈值下的综合排序能力直白说就是随便挑一个正样本和一个负样本模型给正样本打的分比负样本高的概率有多大。AUC等于1是完美等于0.5等于瞎猜。它不受阈值和数据不均衡的影响所以在评价分类模型尤其风控、广告这类不均衡场景时被广泛使用。打个比方准确率是看一次考试的分数而AUC是看这个模型有没有本事把好的和坏的整体排对顺序后者往往更能反映真本事。记住AUC你看别人的模型报告时就不会一脸茫然了。回归任务的评估则用另一套常见的是平均绝对误差和均方根误差衡量预测值和真实值差多少越小越好这些第10篇时序里已经见过。总之不同任务有不同的评估标尺用错了标尺再努力优化也是南辕北辙。陷阱二在训练数据上表现好没有意义第二个大坑前面无数篇都在敲打的过拟合。一个模型在它见过的训练数据上表现再好都没有意义因为它可能只是把答案背下来了。真正重要的是它在没见过的新数据上表现如何这才叫泛化能力才是我们真正要的。怎么发现过拟合、怎么公正评估泛化能力靠划分数据集训练集用来训练模型。验证集训练过程中调参、选模型用帮你及时发现过拟合。测试集最后才用一次模拟真实的新数据给出模型的最终成绩绝不能拿它来调参。判断过拟合有个简单信号模型在训练集上分数很高、在测试集上却差很多说明它背下了训练数据、没学到普遍规律过拟合了。更稳健的评估还会用交叉验证把数据轮换着分成好几份训练和验证取平均让评估结果更可靠、不受某一次划分的运气影响。别忘了脱离业务的指标都是空谈最后一点也是最重要的一点。所有这些技术指标最终都要服务于业务目标。一个F1分数很漂亮的推荐模型如果上线后用户点击和成交没提升它就是失败的。模型好不好最终的裁判是它在真实场景里创造的价值而不是实验室里的某个数字。这也是我做技术这么多年最深的体会技术指标是手段解决真实问题、创造真实价值才是目的。上代码一次看全模型评估用sklearn把这些评估指标一次性演示出来。输入模型预测。输出各种评估指标。# 依赖pip install scikit-learnfromsklearn.datasetsimportmake_classificationfromsklearn.model_selectionimporttrain_test_split,cross_val_scorefromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimport(accuracy_score,precision_score,recall_score,f1_score,confusion_matrix)# 造一份不均衡数据:90%负类,10%正类,模拟癌症筛查这种场景X,ymake_classification(n_samples2000,weights[0.9,0.1],random_state0)Xtr,Xte,ytr,ytetrain_test_split(X,y,test_size0.3,random_state0)modelRandomForestClassifier(random_state0)model.fit(Xtr,ytr)predmodel.predict(Xte)# 一次看全各种指标,别只看准确率print(准确率(会骗人):,round(accuracy_score(yte,pred),3))print(精确率(说是正类的准不准):,round(precision_score(yte,pred),3))print(召回率(正类有没有被漏掉):,round(recall_score(yte,pred),3))print(F1分数(两者的平衡):,round(f1_score(yte,pred),3))print(混淆矩阵(看清各类对错):\n,confusion_matrix(yte,pred))# 交叉验证:更可靠的泛化能力评估scorescross_val_score(model,X,y,cv5,scoringf1)print(5折交叉验证F1均值:,round(scores.mean(),3))运行输出示例准确率(会骗人): 0.928 精确率(说是正类的准不准): 0.797 召回率(正类有没有被漏掉): 0.469 F1分数(两者的平衡): 0.590 混淆矩阵(看清各类对错): [[527 12] [ 31 30]] 5折交叉验证F1均值: 0.612运行你会直观看到准确率往往很高因为负类占多数容易蒙对但精确率、召回率才真正反映模型抓正类的本事混淆矩阵让你看清到底错在哪交叉验证给出更可靠的泛化评分。这段代码就是判断模型好不好的实战工具箱比只看一个准确率靠谱得多。整个系列的几条主线回顾收官之际把贯穿整个系列的几条主线给你收拢一下这些比记住单个模型更有价值万变不离其宗的学习方式绝大多数模型都在做同一件事定义一个损失衡量预测和真实差多少再用梯度下降之类的方法反复调整参数把损失降到最小。对抗过拟合是永恒的主线从正则化、剪枝、早停到Dropout模型越强越要防它把噪声当规律学得够和别学过头之间的平衡贯穿始终。万物皆可变向量从PCA、矩阵分解到词嵌入、图嵌入把复杂事物表示成一组浓缩本质的数字向量是现代AI最核心的套路之一。化整为零、组合的智慧集成学习一堆弱模型变强、扩散模型把生成拆成许多小步、深度网络层层堆叠复杂能力常常来自简单单元的巧妙组合。能简单别复杂先打基线、按需升级工程上永远优先够用、够快、够省的方案。写在最后写这个系列我的初衷很简单AI时代太多人被那些名词唬住、觉得高不可攀。可当你一层层剥开会发现这些模型背后的思想其实大多朴素而优美是可以被普通人理解的。看懂了原理你面对AI就不会盲目恐慌也不会盲目崇拜而是能冷静地判断它能干什么、不能干什么、什么时候该用什么。这份清醒和判断力在这个技术飞速变化的时代比记住任何一个具体模型都珍贵。感谢你陪我走完这一整圈。从线性回归到大模型二十二篇我们一起把AI算法的地图走了个遍。愿这份认知能成为你在AI时代里一件趁手的、让你更从容的工具。我是老计我们下个系列再见。延伸阅读scikit-learn 官方文档模型评估各类指标、交叉验证https://scikit-learn.org/stable/modules/model_evaluation.htmlscikit-learn 官方文档交叉验证https://scikit-learn.org/stable/modules/cross_validation.html姊妹篇《老计带你懂概率统计》深入讲了评估指标背后的统计原理推荐搭配阅读说明以上为官方公开文档地址可能随版本调整如打不开可用标题搜索。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进