小白python入门 - 75. 综合实战

📅 2026/8/7 11:36:48
小白python入门 - 75. 综合实战
小白python入门 - 75. 综合实战0. 写给初学第一次「端到端」比刷榜更重要6674 课像散装零件会划分训练测试、会 Pipeline、会分类回归、会树与调参会一点聚类、会浅层文本、会把模型存起来开个/predict。本课任务自己选一个题目把零件装成一台能交出去的小机器。什么叫「交得出去」不是只截一张 0.99 准确率交付物白话可复现代码别人按 README 能跑出同一量级的结果指标表 图说清楚在哪个集合、哪个协议下测的错误/残差分析知道模型蠢在哪模型卡用途、数据、局限写明白可选推理示例joblib 或最小 API你没有项目经验很正常。本课用清单 弱基线先行降低恐慌先做一个「笨但正确」的版本再一点点变聪明。1. 背景例子三种选题选一个做深选题任务数据从哪来适合练什么A. Titanic乘客是否生还分类Kaggle 公开缺失、类别特征、基线文化B. 房价预测房价回归sklearnfetch_california_housing或 Kaggle指标 RMSE/MAE、残差C. 业务二分类流失 / 违约 / 复购…课程模拟表或实习脱敏表口径、类别不平衡、业务解释怎么选想跟全球教程对齐、资料多 →A想延续 69 课回归 →B想写进简历「业务问题」→C注意隐私别上传真实身份证号之类。一票否决选题必须能在12 周业余时间跑完闭环。别一上来「推荐系统 多模态」。2. 图解一像 CRISP-DM 一样走路而不是「先调参三天」工业界有个老流程叫CRISP-DM跨行业数据挖掘标准流程。名字难记步骤很朴素阶段白话问题你的输出1. 业务理解预测什么成功长什么样误判谁更惨半页问题定义2. 数据理解有哪些表/字段缺测泄漏字段EDA 笔记 数据字典3. 数据准备清洗、特征、划分Pipeline 草稿4. 建模弱基线 → 真模型 → 调参实验记录表5. 评估固定协议测试集尽量只碰一次指标 图 错误分析6. 部署/交付报告、模型卡、可选 API文件夹打包和 66 课地图是同构的只是本课要求你走完并留下痕迹。Kaggle 文化提醒公共排行榜可以当参考但对着榜狂刷到过拟合榜单是经典翻车。课程作业以你自己的验证协议为准。3. 图解二弱基线先行——先当「笨学生」很多人一上来就随机森林 网格搜索 200 组 特征魔法然后不知道提升来自数据运气还是真本事。正确顺序① 规则/多数类/均值基线 ← 几乎零机器学习 ② 简单模型逻辑回归/线性 ← 可解释、好查泄漏 ③ 树 / 森林等 ← 挖非线性 ④ 有限调参 同一 CV ← 71 课纪律 ⑤ 测试集最终一次报告 ← 诚实分数基线类型分类例子回归例子极弱永远猜多数类永远猜训练集均值简单 ML逻辑回归 基本预处理岭回归进阶 ML随机森林 / GBDT 直觉随机森林回归只有超过极弱基线你的模型才「值回票价」。若森林不赢逻辑回归先查特征与泄漏而不是继续加层数。4. 推荐目录结构交作业像交工程项目my_ml_project/ README.md # 怎么跑、结论三句话 requirements.txt data/ raw/ # 只读原始数据可 gitignore 大文件 processed/ # 可选中间表 notebooks/ 01_eda.ipynb 02_model.ipynb src/ # 可选把 Pipeline 函数放这里 data.py features.py train.py models/ pipe.joblib reports/ metrics.md figures/ MODEL_CARD.md初学可以全用 Notebook但至少固定random_state写清数据路径最终指标复制到reports/metrics.md。5. 问题定义模板先写这个再写代码复制到你的README开头## 问题定义 - 任务类型分类 / 回归 - 预测目标 y - 正类含义若分类 - 成功指标例如 test F1 ≥ ? 或 RMSE ≤ ? - 误判代价假阳 / 假阴哪个更贵 - 数据范围时间、样本是否 iid - 明确不用的字段泄漏例如「事后才知道的列」泄漏字段举例Titanic 思想若某字段是「获救后才填写的备注」训练时用了等于作弊。业务里「是否已流失」相关的事后标签列同理。6. 代码骨架弱基线 → Pipeline → CV → 测试集下面以分类示意回归把指标换成 RMSE/MAE 即可。数据请换成你的选题。frompathlibimportPathimportjsonimportjoblibimportnumpyasnpimportpandasaspdfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.composeimportColumnTransformerfromsklearn.pipelineimportPipelinefromsklearn.imputeimportSimpleImputerfromsklearn.preprocessingimportOneHotEncoder,StandardScalerfromsklearn.linear_modelimportLogisticRegressionfromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimport(accuracy_score,f1_score,classification_report,confusion_matrix)fromsklearn.dummyimportDummyClassifier RANDOM_STATE42DATA_PATHPath(data/raw/train.csv)# 按你的路径改dfpd.read_csv(DATA_PATH)# 示例列名请改成真实列TARGETSurvivedydf[TARGET]Xdf.drop(columns[TARGET])# 1) 先划出「终极考场」——之后尽量少看X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_stateRANDOM_STATE,stratifyy)6.1 极弱基线dummyDummyClassifier(strategymost_frequent)dummy.fit(X_train,y_train)pred_dummydummy.predict(X_test)print(dummy acc,accuracy_score(y_test,pred_dummy))print(dummy f1 ,f1_score(y_test,pred_dummy,zero_division0))把数字记进实验表这是你的地板。6.2 列类型与预处理防泄漏进 Pipelinenum_colsX_train.select_dtypes(include[number]).columns.tolist()cat_cols[cforcinX_train.columnsifcnotinnum_cols]numericPipeline([(imputer,SimpleImputer(strategymedian)),(scaler,StandardScaler()),])categoricalPipeline([(imputer,SimpleImputer(strategymost_frequent)),(onehot,OneHotEncoder(handle_unknownignore)),])preColumnTransformer([(num,numeric,num_cols),(cat,categorical,cat_cols),])6.3 模型字典 同一交叉验证协议models{log_reg:LogisticRegression(max_iter2000),rf:RandomForestClassifier(n_estimators200,random_stateRANDOM_STATE,n_jobs-1),}cvStratifiedKFold(n_splits5,shuffleTrue,random_stateRANDOM_STATE)rows[]best_name,best_score,best_pipeNone,-np.inf,Noneforname,clfinmodels.items():pipePipeline([(pre,pre),(clf,clf)])scorescross_val_score(pipe,X_train,y_train,cvcv,scoringf1)rows.append({model:name,cv_f1_mean:scores.mean(),cv_f1_std:scores.std()})print(name,scores.mean(),scores.std())ifscores.mean()best_score:best_name,best_scorename,scores.mean()best_pipepipeprint(pd.DataFrame(rows))6.4 仅在选定模型上 fit 全训练集再测一次 testbest_pipe.fit(X_train,y_train)predbest_pipe.predict(X_test)print(TEST,best_name)print(classification_report(y_test,pred,digits3))print(confusion_matrix(y_test,pred))Path(models).mkdir(exist_okTrue)joblib.dump({pipeline:best_pipe,model_name:best_name,features:list(X_train.columns),model_version:1.0.0,},models/pipe.joblib,)纪律调参、选模型主要看CV 或验证集test 是最终报告不是调参旋钮若 test 远差于 CV可能过拟合或划分不稳——回去查而不是偷偷重划 test 到满意为止。7. 回归选题差异房价等项分类回归弱基线DummyClassifierDummyRegressor(strategymean)常用指标F1 / ROC-AUC / 召回MAE / RMSE / R²错误分析混淆矩阵、错分样本残差图、最大误差样本分层划分stratifyy可按 y 分箱后再分层进阶fromsklearn.dummyimportDummyRegressorfromsklearn.metricsimportmean_absolute_error,mean_squared_error,r2_score# pred pipe.predict(X_test)# print(MAE, mean_absolute_error(y_test, pred))# print(RMSE, mean_squared_error(y_test, pred) ** 0.5)# print(R2, r2_score(y_test, pred))8. 实验记录表防止「我昨天那个好像 0.84」建议reports/experiments.csv或 Markdown 表run_id日期模型关键改动CV 指标test 指标备注00107-20dummy多数类-acc0.62地板00207-20log_reg中位数onehotf10.71-00307-21rfn_estimators200f10.76f10.74入选改动一次记一行。这是科研/工业都认的基本功。9. 错误分析清单有分还要有故事分类打印 10 条假阳性、10 条假阴性看是否某类别特征主导误判阈值要不要从 0.5 调代价不对称时。回归残差 预测 - 真值画直方图最大误差的 10 个样本有何共同特征是否需要对数变换目标房价长尾。把结论写进报告模型容易在「年龄缺失 低票价」乘客上判错…… 建议业务上对此类样本人工复核 / 增加特征……10. 模型卡把 74 课模板填满reports/MODEL_CARD.md至少包含任务与算法数据来源与划分指标写明 test / CV预期用途与不适用场景局限偏差、泄漏风险、未做公平性评估等复现方式命令、随机种子、依赖版本。诚实写「未评估」比吹「AI 赋能百分之百」加分。11. 可选加分项加分说明学习曲线71 课数据量是否还够排列重要性 / 系数解释 top 特征FastAPI/predict74 课最小服务文本字段73 课浅层若业务有备注文本简单阈值或代价矩阵业务导向不只 accuracy加分项可选。主线闭环没完成前不要炫技。12. 端到端检查清单交之前逐项打勾问题与数据问题定义半页写清数据字典每列含义已识别并排除泄漏字段划分方式与random_state固定训练纪律有极弱基线数字≥23 类模型同一协议对比预处理在 Pipeline 内无「先全表 fit」调参未污染最终 test或诚实说明协议评估与报告指标表 至少 1 张图混淆矩阵 / 残差 / 对比条形图错误分析 ≥5 条样本或等价分析三句话业务结论不是只报分交付物README 可复现步骤requirements.txtMODEL_CARD.md可选models/pipe.joblib与预测示例13. 报告「三句话结论」范例差的结论我用了随机森林准确率很高。好的结论在 5 折 CV 上随机森林 F10.76高于逻辑回归 0.71 与多数类基线 0.48。测试集 F10.74主要假阴性集中在年龄缺失样本。建议上线前对缺失年龄客群人工复核当前模型仅作辅助排序不作唯一决策。14. 常见坑坑正确直觉无基线直接调参先地板再谈提升测试集当验证集反复用分数虚高固定协议全数据 fit 预处理器泄漏用 Pipeline只交 Notebook 无说明别人和未来的你跑不起来指标与业务脱节不平衡时别只报 accuracy榜单分数当唯一目标可解释与稳定更重要用生成式 AI 写代码但不懂可以辅助评测与泄漏纪律不能外包项目过大烂尾缩小范围完成闭环优先15. 小结综合实战 问题定义 → 数据 → 弱基线 → 模型对比 → 诚实评估 → 文档交付。流程与CRISP-DM同构按清单走即可。弱基线先行同一协议下对比 ≥23 类算法。Pipeline 防泄漏test 少碰留下实验表。交付看可复现 模型卡 错误分析不是只看最高分。本阶段6675收官表格 ML 主线 文本浅层 服务化意识深度学习与大模型训练留给后续专项。16. 练笔本课主作业必做三选一选题Titanic / 房价 / 业务二分类完成第 12 节检查清单。实验表 ≥3 行含 dummy 或等价弱基线。reports/MODEL_CARD.md填满。README 含环境、命令、三句话结论。选做导出 joblib离线predict3 条新样本。最小 FastAPI/predict。增加一张「模型对比」图可用 matplotlib 条形图。时间盒建议EDA 30% · 基线与模型 40% · 报告文档 30%。宁可模型简单也不要文档空。17. 引用与参考引用了用途链接Wikipedia: CRISP-DM端到端流程参照https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_miningKaggle Titanic入门竞赛与数据https://www.kaggle.com/competitions/titanicscikit-learn User GuideAPI 总览https://scikit-learn.org/stable/user_guide.htmlscikit-learn Common pitfalls泄漏与预处理https://scikit-learn.org/stable/common_pitfalls.htmlscikit-learn Cross-validation固定评估协议https://scikit-learn.org/stable/modules/cross_validation.htmlscikit-learn Metrics分类/回归指标https://scikit-learn.org/stable/modules/model_evaluation.htmlscikit-learn Model persistence模型导出https://scikit-learn.org/stable/model_persistence.htmlMitchell et al. Model Cards (2019)模型卡https://arxiv.org/abs/1810.03993ISLR 官网统计学习概念加餐https://www.statlearning.com/sklearn California housing回归练习数据https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_california_housing.html18. 与前后课方向内容前6674 全部收口地图、预处理、分类回归、树、调参、聚类扫盲、文本、服务化本课选题、弱基线、对比、报告、模型卡、可选部署后竞赛深挖、MLOps、深度学习/大模型专项、业务实习项目19. 阶段结束时你应该具备的能力自检能判断问题是分类还是回归并选对指标会用 Pipeline 做预处理且避免泄漏会对比多种算法并做有限调参知道词袋/TF-IDF 浅层文本怎么上手会保存模型并理解服务化与模型卡能独立完成一个可复现的小项目文件夹若以上大多能勾选恭喜你已经不是「只听过 AI」的初学而是能把监督学习跑通闭环的新手。接下来缺的是更多真实数据上的伤疤——那只能靠项目不靠再看十篇导论。课堂讨论题可分组 10 分钟如果老板只要一个数字「准确率」你怎么用两分钟说服他看混淆矩阵数据只有 80 条你还上机器学习吗为什么你更愿意维护100 条清晰业务规则还是一个 90 分但没人能解释的模型把讨论结论写在笔记里——比多抄 50 行 API 更接近真实工作。自我检测不看稿口头答我能不看笔记讲清本课最重要的一张图在说什么我能指出一段「错误代码」错在哪我能举一个生活例子对应本课任务类型我知道下一课大概要解决什么痛点全部打勾再进入下一课效率更高。附录给初学的 FAQ本课补充下面这些问题是第一次学本课内容时最容易卡住的地方。用白话再过一遍。Q1我是不是一定要背公式不必先背公式。你要先会讲故事输入是什么、输出是什么、模型在怕什么过拟合、泄漏、指标骗人。公式是为了精确表达故事故事通了公式只是翻译。Q2代码跑不通怎么办按这个顺序排查虚拟环境激活了吗提示符前有没有 .venv包装了吗python -c “import sklearn; print(sklearn.version)”报错最后一行是什么把Error 类型 最后一行记下来再搜路径、文件名、中文引号有没有混用仍不行换一个最小例子本课最前面的 10 行代码确认环境 OKQ3我和同学分数差很多是不是我很差不一定。可能是andom_state 不同、数据划分不同、指标不同、甚至泄漏导致虚高。先对齐评估协议再比分数。Q4这课和「人工智能 / ChatGPT」是什么关系ChatGPT 一类是很大的深度学习系统偏语言与对话。本课练的是表格/经典机器学习基本功分类、回归、评估、Pipeline。基本功会了你以后学深度学习或用大模型 API才知道自己在解决什么问题、如何公平比较。Q5我需要买 GPU 吗本阶段不需要。sklearn 在普通笔记本 CPU 上就够。GPU 主要是深度学习训练时才刚需。Q6作业要做到什么程度算合格最低标准能用自己的话讲清本课 3 个核心概念能跑通本课主线代码并看懂输出含义能指出至少 2 个常见坑小练笔完成一半以上鼓励全做Q7我想继续深入课外看什么优先官方文档对应章节见文末引用其次 ISLR 中文/英文入门章节。别一上来就啃很厚的证明书——容易劝退。本课概念速记卡可抄笔记本我用大白话怎么说对应术语用历史数据猜新情况机器学习 / 预测拿来学的那部分数据训练集假装是新客户的那部分测试集背答案背过头过拟合笨到学不会欠拟合偷看了考题数据泄漏步骤焊成一条龙Pipeline建议学习节奏时间做什么第 1 小时只读例子与图不写代码第 2 小时抄跑主线代码改一个参数观察变化第 3 小时做小练笔 写 5 句笔记之后隔一天不看稿子复述一遍记住初学阶段「讲清楚 跑得通 知道坑」比「一次记住全部 API」重要得多。