基于Python的返乡发展人员预测:机器学习课程设计全流程实战
简介这份资源是面向高校机器学习课程设计与入门实践者的完整项目包围绕“返乡发展人员预测”这一真实场景用Python实现从数据处理到模型训练、预测输出的全流程适合需要完成课程作业或想练手分类/回归任务的学生与开发者。压缩包共17个文件、约4.16MB以csv训练与提交数据为主辅以xml与iml工程配置、tsv训练日志、tfevents可视化记录及json参数文件另有核心py脚本与gitignore结构贴近实际竞赛与工程目录。项目覆盖特征提取、模型选择与调优、交叉验证等环节可参考其数据划分与提交格式快速复现baseline并理解调参思路。目前已有40人学习虽规模不大但作为课程设计范例能帮助读者掌握Pandas、scikit-learn等库的落地用法并积累劳动力流动预测的建模经验。1. 返乡发展人员预测到底在预测什么从一份课程设计说起每年毕业季总有一批机器学习课程设计卡在选题上——手写数字识别太烂大街房价预测又找不到像样的数据。返乡发展人员预测这个题目之所以值得做是因为它踩中了一个真实场景地方在制定人才回流政策时确实需要知道哪些人更可能回来、哪些人回来了又走。这不是拍脑袋能回答的问题它需要人口属性、经济指标、就业意愿等多维特征一起建模。而用 Python 把这件事跑通恰好覆盖了机器学习课程设计要求的完整链路数据清洗、特征工程、模型训练、结果解释。如果你正在找一份能写进报告、又能真正跑出结果的课程设计这个方向比调包跑 MNIST 有意思得多也更容易在答辩时讲出业务价值。接下来我会按实际做项目的顺序把每个环节拆开讲清楚。2. 数据从哪来、特征怎么定返乡预测的数据处理与标签设计2.1 返乡预测的数据集长什么样返乡发展人员预测的数据通常来自统计年鉴、地方人社部门公开数据或问卷调查。一份典型的训练数据会包含以下字段年龄、性别、受教育程度、户籍类型、外出务工年限、当前务工地、月收入区间、家庭人口数、是否有子女在户籍地就读、本地是否有房产、本地产业岗位数量、返乡意愿标签。标签一般是二分类——愿意返乡 / 不愿意返乡少数场景下会做成多分类明确返乡 / 观望 / 不返乡。拿到原始数据后第一件事不是急着喂模型而是搞清楚每个字段的分布和缺失情况。我一般会先跑一段探索性分析把数值型和分类型字段分开处理。下面这段代码是数据加载和初步探查的常用写法import pandas as pd import numpy as np # 加载训练数据注意编码格式统计年鉴导出的 CSV 常见 gbk df pd.read_csv(return_migration.csv, encodinggbk) # 基本信息行列数、字段类型、缺失比例 print(数据规模:, df.shape) print(\n字段类型:\n, df.dtypes) print(\n缺失比例:\n, (df.isnull().sum() / len(df)).sort_values(ascendingFalse)) # 标签分布判断是否类别不平衡 print(\n标签分布:\n, df[return_intention].value_counts(normalizeTrue)) # 数值型字段描述统计 num_cols [age, work_years, monthly_income, family_size] print(\n数值字段统计:\n, df[num_cols].describe())这段代码的逻辑很直接先确认数据规模对不对再看哪些字段缺失严重需要处理最后检查标签是否严重不平衡。参数方面encoding要根据实际文件调整如果报UnicodeDecodeError就换utf-8或gb18030试。value_counts(normalizeTrue)输出的是比例而非计数方便快速判断正负样本比。如果发现返乡意愿为“是”的样本只占 8%那后面建模时就得考虑类别权重或过采样否则模型会倾向于全部预测为“不返乡”准确率看着高但毫无意义。2.2 特征工程哪些字段真正影响返乡决策原始字段不能直接扔进模型。分类型变量要编码数值型变量要考虑分箱或标准化还有一些交叉特征值得构造。根据我做过的几个类似项目以下特征处理方式比较稳妥原始字段处理方式理由年龄分箱为 18-25 / 26-35 / 36-45 / 46非线性关系分箱后树模型更容易切分受教育程度有序编码小学1 到 研究生5存在天然顺序当前务工地独热编码或目标编码类别多独热后维度膨胀月收入区间保留序数编码区间本身有序外出务工年限标准化 构造“年限/年龄”比值比值反映务工时间占人生比例家庭人口数保留原始值 构造“劳动力占比”家庭负担影响返乡意愿构造交叉特征时要注意别引入标签泄漏。比如“本地是否有合适岗位”这个字段如果它是在知道对方是否返乡之后才填的那就不能用。常见做法是只保留返乡决策发生之前就能获取的信息。from sklearn.preprocessing import LabelEncoder, StandardScaler # 有序编码受教育程度 edu_map {小学及以下: 1, 初中: 2, 高中/中专: 3, 大专/本科: 4, 研究生: 5} df[edu_level] df[education].map(edu_map) # 构造比值特征 df[work_ratio] df[work_years] / df[age] df[labor_ratio] df[family_labor] / df[family_size] # 分类型字段独热编码drop_first 避免共线性 df pd.get_dummies(df, columns[current_city, industry], drop_firstTrue) # 数值字段标准化树模型可跳过线性模型必须做 scaler StandardScaler() df[[age, work_years, monthly_income]] scaler.fit_transform( df[[age, work_years, monthly_income]] ) # 标签编码 le LabelEncoder() df[label] le.fit_transform(df[return_intention]) # 是1, 否0这里有几个参数需要留意。drop_firstTrue是为了避免独热编码后的虚拟变量陷阱在线性模型里很重要树模型影响不大但也没坏处。StandardScaler对树模型不是必须的但如果你打算同时对比逻辑回归和随机森林统一标准化能省事。work_ratio这个特征在实际项目中多次被模型排到重要性前五原因是它同时编码了年龄和务工时长两个维度的信息。注意如果数据里“当前务工地”类别超过 20 个独热编码会让特征维度爆炸这时候改用目标编码或频率编码更合适。目标编码要用交叉验证的方式计算防止过拟合。2.3 训练集测试集划分的讲究课程设计里最常见的翻车点之一就是随机划分后模型在测试集上表现很好但一换数据就崩。返乡预测这类社会经济学数据往往有时间维度比如 2020 年的数据和 2023 年的数据分布可能不一样。如果数据里有年份字段正确做法是按时间切分——用早年份做训练晚年份做测试。如果确实没有时间字段那至少要用分层抽样保证训练集和测试集的标签比例一致。from sklearn.model_selection import train_test_split # 分层抽样保证正负样本比例一致 X df.drop(columns[return_intention, label, education]) y df[label] X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42, stratifyy ) print(训练集标签分布:\n, y_train.value_counts(normalizeTrue)) print(测试集标签分布:\n, y_test.value_counts(normalizeTrue))stratifyy是关键参数不加的话如果正样本本来就少测试集里可能一个正样本都没有。random_state42是为了结果可复现课程设计报告里要写清楚这个值。test_size0.2是常规选择数据量少于 500 条时建议降到 0.15 或改用交叉验证。3. 模型选型与训练从逻辑回归到集成模型的完整代码路径3.1 先跑一个基线模型逻辑回归为什么不能跳过很多人一上来就上 XGBoost结果答辩时被问“你的基线是什么”就卡住了。逻辑回归在返乡预测里不是凑数的——它的系数可以直接解释为“某个特征每变化一个单位返乡几率的变化”这在政策分析场景里比一个黑箱模型的准确率更有说服力。而且逻辑回归训练快能帮你快速判断特征工程有没有做对。from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report, roc_auc_score # 基线模型逻辑回归加 L2 正则防止过拟合 lr LogisticRegression( penaltyl2, C1.0, # 正则强度倒数越小正则越强 class_weightbalanced, # 自动处理类别不平衡 max_iter1000, random_state42 ) lr.fit(X_train, y_train) y_pred_lr lr.predict(X_test) y_prob_lr lr.predict_proba(X_test)[:, 1] print(逻辑回归分类报告:\n, classification_report(y_test, y_pred_lr)) print(AUC:, roc_auc_score(y_test, y_prob_lr)) # 查看系数判断特征方向是否符合常识 coef_df pd.DataFrame({feature: X_train.columns, coef: lr.coef_[0]}) print(coef_df.sort_values(coef, ascendingFalse).head(10))class_weightbalanced会自动按类别频率反比设置权重比手动调参省事。C1.0是默认值如果发现训练集准确率远高于测试集可以降到 0.1 或 0.01 增强正则。max_iter1000是为了防止数据标准化后仍不收敛的警告。系数表里如果出现“月收入越高返乡意愿越强”这种反常识结果大概率是特征编码方向搞反了需要回头检查。3.2 随机森林与梯度提升参数怎么调、调什么树模型在表格数据上通常比逻辑回归强但参数不调好也白搭。随机森林重点调n_estimators、max_depth、min_samples_leaf梯度提升比如 LightGBM 或 XGBoost重点调learning_rate、num_leaves、subsample。课程设计里不需要做完整的贝叶斯优化用网格搜索跑一轮就够了。from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import GridSearchCV # 随机森林先粗调再细调 rf RandomForestClassifier(random_state42, n_jobs-1) param_grid { n_estimators: [100, 200, 300], max_depth: [5, 10, None], min_samples_leaf: [1, 3, 5], class_weight: [balanced] } grid GridSearchCV( rf, param_grid, cv5, # 5 折交叉验证 scoringroc_auc, # 类别不平衡时 AUC 比准确率可靠 n_jobs-1, verbose1 ) grid.fit(X_train, y_train) print(最佳参数:, grid.best_params_) print(最佳 AUC:, grid.best_score_) best_rf grid.best_estimator_ y_prob_rf best_rf.predict_proba(X_test)[:, 1] print(测试集 AUC:, roc_auc_score(y_test, y_prob_rf))scoringroc_auc是类别不平衡场景下的正确选择用 accuracy 会选出偏向多数类的模型。cv5在数据量少于 1000 条时够用数据多可以降到 3 节省时间。n_jobs-1用满所有 CPU 核心但如果你在笔记本上跑注意散热。min_samples_leaf设大一点比如 3 或 5能有效防止过拟合代价是模型稍微保守一些。3.3 特征重要性怎么看、怎么用训练完模型不是终点课程设计报告里需要解释“哪些因素驱动了返乡决策”。随机森林和梯度提升都提供特征重要性但默认的基于不纯度的的重要性对高基数特征有偏。更可靠的做法是用排列重要性permutation importance它直接衡量“打乱某个特征后模型性能下降多少”。from sklearn.inspection import permutation_importance # 排列重要性在测试集上计算 perm_imp permutation_importance( best_rf, X_test, y_test, n_repeats10, # 重复 10 次取平均 random_state42, scoringroc_auc ) imp_df pd.DataFrame({ feature: X_test.columns, importance_mean: perm_imp.importances_mean, importance_std: perm_imp.importances_std }).sort_values(importance_mean, ascendingFalse) print(imp_df.head(15))n_repeats10是精度和耗时的折中课程设计够用。importance_std大的特征说明其重要性不稳定解释时要谨慎。如果“外出务工年限”排第一且方向为负年限越长越不愿返乡这符合直觉——在外扎根越深回流成本越高。如果某个特征重要性很高但方向反直觉先别急着写进报告回头查数据质量。4. 避坑与排查返乡预测项目里最容易翻车的五个地方4.1 标签泄漏准确率 99% 的模型为什么不能用现象模型在测试集上准确率 99%AUC 接近 1.0但换一批数据就掉到 60%。原因特征里混入了标签相关的信息。比如“是否已在本市缴纳社保”这个字段如果数据是在返乡行为发生之后采集的那它本质上就是标签的另一种表达。再比如做特征工程时用了全量数据的均值来填充缺失值测试集的信息泄漏到了训练集。解决逐个检查特征问自己“这个信息在做出返乡决策之前能拿到吗”。填充缺失值一律用训练集的统计量不要用全量数据。如果某个特征重要性异常高比如单独一个特征 AUC 就 0.95大概率有问题。4.2 类别不平衡准确率 92% 但一个返乡人员都没预测出来现象测试集准确率 92%但混淆矩阵显示正类召回率为 0。原因返乡意愿为“是”的样本只占 8%模型发现全部预测为“否”就能拿到 92% 准确率于是躺平了。解决训练时加class_weightbalanced评估时看 AUC、F1 和召回率而不是准确率。如果正样本实在太少少于 50 条考虑 SMOTE 过采样但要注意只在训练集上做测试集保持原始分布。4.3 分类型字段编码顺序搞反现象逻辑回归系数显示“受教育程度越高越不愿返乡”但实际数据明明是相反的。原因LabelEncoder按字母顺序编码如果“小学”被编成 5、“研究生”被编成 1方向就反了。解决有序变量用手动映射如 2.2 节的edu_map不要用LabelEncoder。无序变量用独热编码。编码完成后打印一下映射关系肉眼确认一遍。4.4 训练集和测试集分布不一致现象交叉验证 AUC 0.85测试集 AUC 0.65。原因随机划分时没做分层或者数据本身有时间漂移。比如训练集里 2020 年数据多测试集里 2023 年数据多而疫情后返乡意愿整体上升了。解决分类任务一律加stratifyy。如果有年份字段按时间切分而不是随机切分。切分后对比训练集和测试集的特征分布差异大的特征要做分布对齐或直接剔除。4.5 模型可解释性被忽略现象答辩时被问“为什么这个样本被预测为愿意返乡”答不上来。原因只用了黑箱模型没有做任何解释性分析。解决至少保留逻辑回归作为可解释基线。树模型用 SHAP 值做单样本解释或者用排列重要性做全局解释。课程设计报告里放一张特征重要性排序图比堆十个模型都有说服力。5. 从课程设计到可复现项目模型持久化与推理脚本的落地技巧做完模型训练只是课程设计的一半另一半是让别人能复现你的结果。我见过太多报告里只贴了训练代码但没保存模型和特征处理流程换台机器就跑不起来。正确的做法是把特征工程和模型一起打包用joblib或pickle持久化再写一个独立的推理脚本。import joblib from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer from sklearn.preprocessing import StandardScaler, OneHotEncoder # 把预处理和模型串成 Pipeline避免推理时遗漏步骤 preprocessor ColumnTransformer([ (num, StandardScaler(), [age, work_years, monthly_income]), (cat, OneHotEncoder(dropfirst, handle_unknownignore), [current_city, industry]) ]) full_pipeline Pipeline([ (prep, preprocessor), (clf, RandomForestClassifier( n_estimators200, max_depth10, min_samples_leaf3, class_weightbalanced, random_state42)) ]) full_pipeline.fit(X_train, y_train) # 保存完整 pipeline推理时直接加载 joblib.dump(full_pipeline, return_migration_model.pkl) print(模型已保存) # 推理脚本加载后直接预测新样本 loaded_model joblib.load(return_migration_model.pkl) new_sample pd.DataFrame([{ age: 32, work_years: 8, monthly_income: 6500, current_city: 深圳, industry: 制造业 }]) prob loaded_model.predict_proba(new_sample)[0, 1] print(f返乡概率: {prob:.2%})用Pipeline的好处是所有预处理步骤跟着模型一起走推理时不会出现“训练时标准化了、推理时忘了”的低级错误。handle_unknownignore保证推理时遇到训练集里没出现过的城市名不会报错而是编码为全零。保存的文件建议同时存一份特征列表和标签映射方便别人理解。还有一个容易被忽略的点推理脚本要能处理缺失值。真实场景里新样本的某些字段可能为空如果直接抛异常就很不友好。可以在 Pipeline 前面加一个SimpleImputer用训练集中位数填充数值字段、用众数填充分类型字段。这样即使输入不完整模型也能给出一个合理的概率估计。最后说一个我自己的习惯每次跑完训练我会把X_train.columns、标签编码映射、模型超参数一起写进一个model_meta.json和 pkl 文件放在同一个目录。半年后回头看这个项目不用翻代码就知道当时用了哪些特征、标签 1 代表什么。这个习惯帮我省过很多次后悔药希望也能帮到你。本文还有配套的精品资源点击获取

相关新闻

flex+bison实现小型编译器:词法分析、语法分析与语义检查全流程

flex+bison实现小型编译器:词法分析、语法分析与语义检查全流程

简介:这是一套面向计算机专业本科生的编译原理课程设计完整资料,覆盖词法分析、LL(1)预测分析、LR(0)/SLR(1)语法分析、四元式生成与汇编代码生成,并附带小型编译器实现及课程设计报告,可满足从实验到报告提交的全流程需求。压缩包…

2026/10/12 10:03:54 阅读更多 →
知识蒸馏+增量学习:目标检测模型如何越训越强不忘旧类

知识蒸馏+增量学习:目标检测模型如何越训越强不忘旧类

简介:本资源为基于知识蒸馏的目标检测模型增量深度学习方法的Python源码,面向人工智能、计算机视觉方向的高校学生、教师及企业研发人员,尤其适合正在做毕设、课程设计或算法进阶的学习者,用于解决目标检测模型在增量学习中易遗忘…

2026/10/12 10:03:54 阅读更多 →
AI Agent记忆管理实战:四层架构与可验证落地指南

AI Agent记忆管理实战:四层架构与可验证落地指南

1. 为什么“记忆”是AI Agent最常被忽略的致命短板 我第一次在某跨平台系统里跑通一个带多轮对话的Agent时,兴奋地给团队演示“它能记住用户刚说过的偏好”。结果第三轮对话刚过,它就把用户明确说过的“不要推荐咖啡因饮料”忘得一干二净,转头…

2026/10/12 10:03:54 阅读更多 →

最新新闻

从 Ubuntu 25.10 到 26.04 LTS:一次跨版本升级的完整技术路线图与 TaoToken 配置实践

从 Ubuntu 25.10 到 26.04 LTS:一次跨版本升级的完整技术路线图与 TaoToken 配置实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:42:36 阅读更多 →
FFmpeg Windows编译整合包:x264/x265/AAC静态库配置与调试指南

FFmpeg Windows编译整合包:x264/x265/AAC静态库配置与调试指南

简介:本资源面向需要在Windows平台完成FFmpeg音视频开发环境搭建的开发者,尤其适合希望直接获取可编译、可调试源码包的初中级工程师。压缩包约291.35MB,整合了x264、x265、AAC与FFmpeg的源码及配套编译工具,并按用途划分为多个目…

2026/10/12 10:42:36 阅读更多 →
九月开源项目盘点:20个AI工作流与终端工具,小而精趋势明显

九月开源项目盘点:20个AI工作流与终端工具,小而精趋势明显

1. 为什么九月的开源圈值得单独拎出来聊九月份在开源社区里一直是个特殊的月份。北半球的开发者结束了暑假,南半球的同行们还在冬末的节奏里憋着劲,各大项目维护者像是约好了一样集中发版,新项目也扎堆冒头。我翻了一圈这个月冒出来的仓库&am…

2026/10/12 10:42:36 阅读更多 →
Allure 自动化测试报告实战:接入、定制与排错全链路

Allure 自动化测试报告实战:接入、定制与排错全链路

测试报告这件事,我做自动化这些年踩过的坑比写过的用例还多。前几年接手一个老项目,前任留下的"测试报告"是一个四百多行的 txt,PASS和FAIL交替刷屏,失败原因清一色写着AssertionError,既没有截图也没有请求…

2026/10/12 10:42:36 阅读更多 →
三维重建与点云处理入门:从配准、分割到表面重建的完整指南

三维重建与点云处理入门:从配准、分割到表面重建的完整指南

1. 三维重建与点云技术入门指南1.1 从零开始理解三维重建与点云三维重建这个词听起来很唬人,但说白了就是让计算机通过一张或多张二维照片,反推出物体或场景在真实世界中的三维形状。你可以把它想象成:你站在一个雕塑前面拍了几十张照片&…

2026/10/12 10:42:36 阅读更多 →
MATLAB入门实操:从矩阵运算到脚本绘图调试

MATLAB入门实操:从矩阵运算到脚本绘图调试

刚接触MATLAB的时候,很多人会把它当成一个"计算器加强版"来用,输几个命令也算出了结果,但真到了要独立完成一个入门级演示项目时才发现,自己连"怎么把代码组织得像样"都还没想清楚。这篇文章就是写给那些已经…

2026/10/12 10:41:35 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →