从零到Kaggle:Python机器学习项目代码整理实战记录
我从头到尾把《Python机器学习及实践——从零开始通往Kaggle竞赛之路》这本书过完一遍之后最大的感受不是算法真多而是代码真散。书里每个章节的示例代码单独看都能跑但一旦你想把前面章节的数据处理流程用到后面章节的模型上就得来回复制粘贴改参数、改变量名动不动就报错。这篇博文就是我自己在做代码整理这件事时的完整记录包括我为什么整理、怎么整理、整理出了什么以及整理过程中踩过的坑。如果你也正在读这本书或者刚学完机器学习基础、准备打比赛但不知道代码该怎么组织那这份整理思路应该能省你不少时间。1. 这本书的定位与代码整理的初衷1.1 这本书到底在讲什么先说结论这是一本非常适合刚学会Python语法但还没碰过机器学习的读者入门的书。它不追求把每个算法的数学原理推到极致而是把机器学习实践链路串了一遍从数据读取、数据清洗、特征工程到经典模型训练、模型评估再到末章进入Kaggle竞赛的实战流程。我当初买这本书就是因为它的标题里有两个关键词从零开始和Kaggle竞赛。我想找的是一条能直接把学过Python转化为能跑通一个完整机器学习项目的路。读完确实达到了这个效果但代价是代码层面的散装感非常明显。1.2 为什么必须单独整理代码书里的代码写法用一句话概括就是示例式写法。什么意思它为了让读者快速理解某个模型的用法会把数据加载、预处理、模型初始化、训练、评估全部塞进一个脚本里。好处是初学者跟着敲一遍就能看到效果坏处是当你真正要做自己的项目时这些代码几乎没法复用。我举个具体例子。书中用某个数据集做逻辑回归时会这样写from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2) model LogisticRegression(max_iter1000) model.fit(X_train, y_train) print(model.score(X_test, y_test))看起来没问题是吧但你换个数据集、换个模型的时候问题就来了数据里如果有缺失值怎么办有类别型特征怎么办要不要做标准化模型分数如果很低怎么判断是数据问题还是模型问题这些在书里是分散在不同章节分别介绍的并不会自动整合到你的项目代码里。所以我把整本书的代码重新读了一遍做了一次系统性的整理。目标不是把书抄一遍而是把书里的知识点转化为一套我自己能直接拿去跑比赛的项目骨架。2. 从环境搭建到可复跑代码依赖的梳理与冻结整理代码的第一步不是写代码而是把运行环境固定下来。机器学习库的版本更新速度非常快同样的代码在不同版本下可能跑出完全不同的结果。这本书出版到现在库的API已经发生过不少变化。2.1 版本选型的心得我当时用的是Python 3.8环境核心库版本大致固定在这样一组库名版本范围用途numpy1.19.x数值计算底层依赖pandas1.2.x数据加载与处理scikit-learn0.24.x机器学习模型与评估matplotlib3.3.x可视化xgboost1.3.x竞赛常用梯度提升模型lightgbm3.1.x竞赛常用梯度提升模型为什么选这些版本因为这本书的主要代码基于scikit-learn实现而0.24版本对train_test_split、Pipeline这些API的支持非常稳定。做代码整理时我建议不要盲目追求最新版本而是先固定下来保证全书代码能原样跑通再考虑升级。2.2 requirements.txt 的整理方式整理依赖的时候我会把库分为两类。一类是核心必装就是不管跑哪个章节都必须有的库例如numpy、pandas、scikit-learn和matplotlib。另一类是按需安装例如xgboost和lightgbm只有跑到集成模型或竞赛实战环节才需要。这样区分有什么好处如果你只是想先跑通书前面的基础章节没必要装一堆大型库。如果你直接准备Kaggle那可以把重心放在集成模型库上。我把这两类分别写到两个requirements文件里requirements-core.txt和requirements-extra.txt实践下来非常清晰。2.3 目录结构的重新规划代码整理里最值得做的一件事就是把原先一个notebook打天下变成一个项目分模块。我最终采用的目录结构长这样ml_practice/ ├── data/ │ ├── raw/ # 原始数据不做任何修改 │ └── processed/ # 经过处理后的数据 ├── src/ │ ├── __init__.py │ ├── data_loader.py # 数据加载 │ ├── preprocess.py # 数据预处理 │ ├── features.py # 特征工程 │ ├── models.py # 模型训练与预测 │ ├── evaluate.py # 模型评估 │ └── utils.py # 公共工具函数 ├── notebooks/ # 交互式探索实验 ├── models/ # 保存训练好的模型 └── submissions/ # Kaggle提交文件存放这套目录结构其实不是抄来的而是我按照数据流的思路自己推出来的原始数据进来经过加载、清洗、特征工程变成模型能吃的训练集模型训练完保存评估完生成提交文件。每个环节对应一个独立模块目录就是整条流水线的映射。整理完以后再跑书里的案例就不再是翻书找代码了而是直接from src.models import train_classifier。3. 数据结构化训练集、验证集与测试集的规范管理这本书的一大贡献是让我意识到在真实项目里数据切分不是一个小步骤而是一个需要严肃对待的环节。数据切分方式直接决定了你评估出来的模型分数是真能力还是虚假繁荣。3.1 别把数据切分当成一件小事书里最常用的代码是train_test_split一行搞定。但在我整理代码时我把所有切分逻辑统一封装成一个函数并且强制固定随机种子。原因很简单如果不固定随机种子每次运行切分结果都不同你昨天调的模型参数可能今天就失效了你还会误以为是代码写错了。这是我在整理代码时写的统一切分函数import numpy as np from sklearn.model_selection import train_test_split SEED 42 def split_data(X, y, test_size0.2, stratifyNone, random_stateSEED): 统一数据切分入口保证可复现。 return train_test_split( X, y, test_sizetest_size, random_staterandom_state, stratifystratify )stratify参数非常关键。分类任务中如果类别本身不平衡比如正样本占10%你不做分层抽样切出来的测试集可能只有几十个正样本模型分数波动会非常大。书里没有特别强调这一点但实际做竞赛时这是必踩的坑。3.2 交叉验证与数据泄漏问题单纯一次切分得到的评估结果运气成分很大。我整理代码时把交叉验证也封装成了一个统一模块。分类问题我默认使用StratifiedKFold回归问题使用KFold然后用一个开关控制是否打乱数据顺序。from sklearn.model_selection import StratifiedKFold, KFold def get_cv_splitter(X, yNone, n_splits5, classificationTrue): if classification and y is not None: return StratifiedKFold(n_splitsn_splits, shuffleTrue, random_stateSEED) return KFold(n_splitsn_splits, shuffleTrue, random_stateSEED)比切分更要命的是数据泄漏。这个概念书里有提到但我真正理解是在整理预处理代码时如果你先把整个数据集做标准化再切分训练集和测试集那么测试集的均值和方差就已经参与了训练集的转换过程这会让你在测试集上的评估结果虚高。正确做法是先把数据切分好然后在训练集上fit预处理器再在验证集和测试集上只做transform。我用scikit-learn的Pipeline解决了这个问题。把预处理和模型放进同一个流水线交叉验证时每一折都只在这折的训练部分进行拟合从机制上杜绝数据泄漏。4. 特征工程的代码沉淀从数据清洗到特征编码这本书把特征工程分成了几个独立场景缺失值处理、类别特征编码、特征缩放。每个部分单独看都不难但组合在一起代码就很容易失控。我整理的重点是把这些操作变成可组合的转换器。4.1 缺失值处理的取舍书里介绍了删除缺失行和用均值填充两种方式。实操下来这两种方式都不是万能的。均值填充对数值型特征的干扰相对小但如果缺失比例超过30%填充本身就会引入大量噪声。我在整理时把缺失值处理写成一个带参数的函数def fill_missing(df, columns, strategymean, fill_valueNone): 缺失值填充统一入口。strategy支持mean/median/most_frequent/constant。 from sklearn.impute import SimpleImputer imputer SimpleImputer(strategystrategy, fill_valuefill_value) df[columns] imputer.fit_transform(df[columns]) return df这里有一个容易忽略的细节填充缺失值时如果是在交叉验证流程里同样应该只对训练部分做fit否则测试集的缺失值填充也会用到全量数据的统计量。用Pipeline包一层就能解决但如果你是在函数里手动处理就要格外小心。4.2 类别编码与特征缩放的正确姿势书里讲到One-Hot编码的时候我用得很顺手但后来发现pd.get_dummies()有一个隐患如果测试集里某个类别在训练集里没见过get_dummies会直接多出一列导致训练和预测的特征维度不一致。整理代码后我改用scikit-learn的OneHotEncoder或OrdinalEncoder因为它们能记住训练时见过的类别集合新类别会被编码成全零向量。特征缩放这块书里介绍了StandardScaler和MinMaxScaler。我对这两个的选择原则很简单如果后续模型是线性模型、SVM、神经网络这类对特征尺度敏感的模型一律用StandardScaler如果是树模型比如随机森林和梯度提升树缩不缩放影响不大因为树模型只关心特征的相对顺序不关心绝对数值。把这个逻辑沉淀成代码时我会定义一个根据模型类型自动选择预处理方式的函数def make_preprocessor(numeric_features, category_features, scalerstandard): from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder, StandardScaler, MinMaxScaler scaler_obj StandardScaler() if scaler standard else MinMaxScaler() preprocessor ColumnTransformer( transformers[ (num, scaler_obj, numeric_features), (cat, OneHotEncoder(handle_unknownignore), category_features) ] ) return preprocessor这么做以后数值列和类别列就能放进同一个转换器里统一处理后续接任何模型都只管fit_transform一次。5. 模型代码的模块化封装从模板代码到可复用函数库书里每个模型的章节结构几乎一样初始化模型对象、调用fit、调用score、打印结果。如果我只是原样照抄那整理完还是一堆重复代码。所以这一部分我的核心工作是去重。5.1 模型训练流程的封装我封装了一个统一的模型训练接口支持分类和回归两种任务。你只需要传入模型实例、训练数据和评估指标名称它自动完成训练、预测和指标计算并且把结果以字典形式返回。from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score CLASSIFICATION_METRICS { accuracy: accuracy_score, precision: precision_score, recall: recall_score, f1: f1_score, auc: roc_auc_score, } REGRESSION_METRICS { mse: mean_squared_error, mae: mean_absolute_error, r2: r2_score, } def evaluate_model(model, X_train, y_train, X_test, y_test, taskclassification): model.fit(X_train, y_train) y_pred model.predict(X_test) metrics (CLASSIFICATION_METRICS if task classification else REGRESSION_METRICS) results {} if task classification: y_prob model.predict_proba(X_test)[:, 1] results[auc] roc_auc_score(y_test, y_prob) for name, func in metrics.items(): results[name] func(y_test, y_pred) return results封装完以后书里那些先用逻辑回归跑一遍再用决策树跑一遍再用SVM跑一遍的重复代码就变成了对同一个函数传入不同模型对象的循环。跑书里的对比实验时我能直接得到一张包含多个模型、多个指标的对比表一眼看出谁好谁差。5.2 参数搜索的正确打开方式书里介绍网格搜索时我一开始是这么用的把所有参数组合全部列出来GridSearchCV跑一遍。但实际整理代码时发现两个问题。第一参数组合数量太大时运行时间可能从几分钟飙到几小时。第二网格搜索默认用准确率作为评分指标但在不平衡数据集上准确率没有参考价值。我的调整是优先使用RandomizedSearchCV。网格搜索是把每个参数的所有候选值做笛卡尔积随机搜索则是从参数分布里随机采样组合在参数量多的时候效率高得多。另一个关键点是自定义评分指标。分类问题我一般直接指定scoringroc_auc如果多分类则用f1_macro而不是默认的accuracy。5.3 模型持久化的时机与方法把模型保存到磁盘是在整理竞赛代码时才意识到的重要步骤。你不可能每次预测都重新训练一次模型尤其当你尝试了大量参数组合之后只有最优的那几个模型值得保留。用joblib保存模型是对的但更推荐把整个Pipeline保存下来而不是只保存裸模型。因为Pipeline里包含了预处理逻辑、特征编码逻辑和模型本身。预测新数据时一份pipeline.joblib就够用了不需要在预测脚本里再写一遍标准化和编码的代码。from joblib import dump, load # 保存 dump(pipeline, models/best_model.joblib) # 加载 pipeline load(models/best_model.joblib) y_pred pipeline.predict(X_new)我想强调一个教训不要在训练脚本里同时做模型调参和模型保存。调参时要保存所有候选模型的评估结果最后只把最优模型序列化。我当时图省事每跑完一组参数就覆盖保存一次结果最优模型反而弄丢了。6. Kaggle竞赛思路的代码复盘这本书的最后部分把前面所有知识汇到一个竞赛场景里。我整理代码时没有满足于跑通官方示例而是按照竞赛的完整闭环重写了一版数据探索、特征工程、模型训练、交叉验证、生成提交文件。这个闭环跑通以后我最大的收获不是在排行榜上拿多高的分而是搞清楚了竞赛代码和平时练习代码的本质区别。6.1 从本地练习到提交文件的规范流程竞赛代码里最容易被忽略的是提交文件的格式。书中的示例代码会明确告诉你提交文件需要两列一列是ID一列是预测值而且要保证顺序和测试集的行顺序一致。这个细节我一开始没在意结果提交上去格式错误直接零分。整理代码时我把提交文件生成逻辑单独提取成一个函数并且在写入前自动检查行数是否与测试集一致def make_submission(test_ids, y_pred, output_pathsubmissions/submission.csv): import pandas as pd submission pd.DataFrame({ id: test_ids, target: y_pred }) assert len(submission) len(test_ids), 行数不一致请检查预测结果 submission.to_csv(output_path, indexFalse) print(f已生成提交文件: {output_path})6.2 本地验证分数与线上分数不一致怎么办我一直记得第一次参加竞赛练习时的心态本地交叉验证AUC是0.88自信满满地提交结果线上分数只有0.82。当时整个人是懵的。后来在整理这本书的竞赛代码时我才真正理解了这个差距的来源。本地分数高而线上分数低常见原因有三类。第一过拟合。交叉验证时的每一折模型过于贴合训练数据遇到新数据泛化能力就下降。第二随机种子。如果只切分了一次训练集和测试集那这次切分的随机性可能让验证集特别好预测。第三数据分布差异。测试集的分布和训练集可能不完全一样尤其当训练数据里某个特征的取值范围和测试集差异很大时预测效果必然下降。我整理代码后遇到这类问题会优先做两件事一是把单一交叉验证改成多次重复交叉验证例如用RepeatedStratifiedKFold跑5次取平均分这样能过滤掉不少随机噪声二是去检查特征分布用seaborn的kdeplot把训练集和测试集的关键特征分布画在一起对比分布差异明显的特征优先考虑删除或做重缩放。6.3 竞赛实战中集成模型的地位这本书的末尾部分用了不少篇幅介绍梯度提升树模型包括XGBoost和LightGBM。我当时比较疑惑为什么书里前面花了大量篇幅讲逻辑回归、SVM、朴素贝叶斯到了竞赛环节却都换成了集成模型整理代码之后我有了答案竞赛要的是预测精度最大化而集成模型自带处理非线性关系、特征交互和缺失值的能力在很多标准表格数据上就是比单一模型强。但这也带来一个陷阱如果不理解集成模型的参数含义直接套默认参数效果可能还不如调好的逻辑回归。我整理代码时把每个模型的常用参数网格单独写成了字典方便搜索时引用。例如LightGBM的核心参数我关注n_estimators、learning_rate、num_leaves、max_depth和min_child_samples。这些参数决定了树的复杂度而树的复杂度直接决定模型的过拟合程度。如果你拿到的数据集只有几千行把num_leaves调到50以上多半是灾难。7. 代码整理过程中踩过的坑和给后来者的建议最后这部分我把整理代码时踩过的一些比较典型的坑集中说下这些坑不一定写在书里但只要你动手整理代码大概率会遇到。7.1 Jupyter Notebook和脚本的边界书里的大部分代码示例都以交互式为主我最初也习惯一键运行所有单元格。但整理到后面我发现Notebook有一个严重问题单元格的执行顺序不是固定的你可能先跑了后面的单元格回头再改前面的变量然后整个环境状态就乱了出问题时根本不知道是哪个变量被覆盖了。我后来给自己定了一个规则Notebook只用来做数据探索和画图所有模型训练和数据处理流程全部写进src目录下的脚本里。脚本天然是自上而下顺序执行的不会出现我忘了运行第3个单元格这种问题。两个工具各有分工别混着用。7.2 随机种子的全局管理这本书里不止一次强调随机种子但我在整理代码时发现随机种子涉及的地方远不止train_test_split。模型初始化、数据采样、交叉验证时的数据打乱甚至特征选择和降维算法里都有随机性。只固定一处其他地方的随机性依然会让结果不可复现。我的做法是在utils.py里定义一个全局的SEED常量并且在程序入口处用以下方式统一固定每次写代码都主动传入random_stateSEED。整理完以后同一份代码在不同时间跑出来的结果完全一致这对后续调参的意义非常重大。7.3 代码注释也要分类整理代码整理不等于把代码摆得整齐更重要的是让未来的自己看得懂。我给每个模块的公共函数都写了统一的注释格式功能说明、输入参数、输出结果、使用示例。尤其那些参数较多的函数比如预处理和模型训练接口没有注释的话隔两周再看你真的会因为一个参数的作用而翻书查半天。还有一点注释里最好写清楚为什么。比如我固定随机种子注释会写为了保证结果可复现所有随机操作统一使用该种子而不是只写seed42。这样你的代码库就相当于一份可执行的笔记配合原书阅读时效率会高很多。7.4 给后来者的快速上手建议如果你也想整理这本书的代码我的建议是不要一上来就追求完美架构。先跟着书把每个示例原样跑通然后再动手重构。因为只有你亲自跑过一遍你才知道哪些代码是核心流程、哪些代码只是演示用的临时写法。整理顺序我建议这样先把数据加载和预处理抽成模块因为这是所有章节共用的部分。然后做模型训练和评估的封装跑通一个完整案例。最后再处理竞赛提交和模型保存。这三步走完你的代码库已经具备参加入门级竞赛的能力了。最终你会发现整理代码本身就是一个二次学习的过程。书里一笔带过的逻辑你在整理时会不自觉地去追根究底。这个过程比单纯读书带来的提升大得多。我现在遇到新的数据集已经习惯用整理好的这套代码库直接起步把省下来的时间用在特征工程和参数调优上这可能是这本书带给我最大的回报。

相关新闻

Python VTK实现三维模型显示与切割:从面绘制到交互式裁剪

Python VTK实现三维模型显示与切割:从面绘制到交互式裁剪

用Python写VTK做三维模型显示与切割,听起来像是个小工具,真做起来涉及的东西不少。这次项目我一开始只是想看一眼某个医学影像的三维结构,结果一路从Marching Cubes原理查到了网格平滑、闭合裁剪,最后折腾出一个能交互旋转、能拖拽…

2026/10/15 12:44:11 阅读更多 →
LPC1114实战例程:从最小系统到UART、PWM与避坑指南

LPC1114实战例程:从最小系统到UART、PWM与避坑指南

简介:面向嵌入式初学者的LPC1114开发资源,围绕NXP Cortex-M0内核微控制器整理了可直接导入MDK工程的例程与配套教程,覆盖GPIO控制、I2C/SPI/UART通信、ADC、PWM、NTC测温等常见外设应用场景,适合从零开始搭建学习路径。压缩包共65…

2026/10/15 12:44:11 阅读更多 →
Vue全局挂载实战:从原理到选型,彻底搞懂全局函数与变量

Vue全局挂载实战:从原理到选型,彻底搞懂全局函数与变量

1. 全局挂载这件事,到底在解决什么问题刚接触 Vue 那会儿,我最常干的一件事就是把一个工具函数从utils.js里import到每一个用到的组件里。三五个组件还好,等到项目里几十个组件都要用同一个格式化时间的方法时,每个文件顶部都挂着…

2026/10/15 12:44:11 阅读更多 →

最新新闻

TileLang:GPU异构计算的声明式分块编程范式

TileLang:GPU异构计算的声明式分块编程范式

1. TileLang不是新语言,而是GPU编程范式的底层重构最近在几个高性能计算开源项目里反复看到tilelang这个词,它既不像Rust那样有语法教程,也不像CUDA那样带完整IDE支持,甚至GitHub上连个独立仓库都没有——但它频繁出现在MLIR、LLV…

2026/10/15 13:26:57 阅读更多 →
Android OpenGL ES绘制圆形全攻略:从三角形扇到着色器工程实战

Android OpenGL ES绘制圆形全攻略:从三角形扇到着色器工程实战

简介:一份面向 Android 图形开发学习者的 OpenGL ES 圆形绘制示例工程。项目通过 OpenGL 实现了圆饼填充、圆环描边与点状圆圈的绘制,覆盖从顶点数据生成、着色器编写到渲染状态设置的完整流程。资源包共 567 个文件,以 xml 布局与资源、grad…

2026/10/15 13:26:57 阅读更多 →
MATLAB二维Delaunay网格生成:MESH2D轻量可控实战指南

MATLAB二维Delaunay网格生成:MESH2D轻量可控实战指南

简介:MESH2D是一款面向科研人员、工程仿真从业者及高校师生的MATLAB/Octave二维Delaunay网格生成工具,专为解决有限元分析、流体力学模拟、地形建模等场景中复杂几何区域的高质量三角剖分问题而设计。资源包共69个文件,含55个核心MATLAB函数&…

2026/10/15 13:26:57 阅读更多 →
SAP外部作业调度服务实战解析与优化

SAP外部作业调度服务实战解析与优化

1. 项目背景与核心价值在企业级应用环境中,SAP系统的批处理作业(Application Job)管理一直是运维工作的重点和难点。传统的手工调度方式不仅效率低下,还容易因人为失误导致作业执行失败或资源冲突。External Job Scheduling Servi…

2026/10/15 13:26:57 阅读更多 →
VMware桥接模式实现虚拟机远程登录与文件传输

VMware桥接模式实现虚拟机远程登录与文件传输

1. 项目概述:为什么桥接模式是远程协作的“隐形地基”VMware桥接网络模式,远程登录和远程传输文件——这三件事放在一起,不是偶然组合,而是实际工作中最常被卡住的“铁三角”。我带过不少刚接触虚拟化环境的开发者和运维新人&…

2026/10/15 13:26:57 阅读更多 →
UEFI DXE阶段驱动开发实战:协议、事件与调试

UEFI DXE阶段驱动开发实战:协议、事件与调试

简介:这份PPT资料围绕UEFI启动流程中的DXE(Driver Execution Environment)阶段展开,面向固件开发工程师、BIOS初学者及嵌入式系统学习者,帮助理解DXE阶段在系统初始化中的核心作用与运行机理。资源共1个pptx文件&#…

2026/10/15 13:25:56 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →