基于XGBoost的时间序列预测与分类实战工程解析

简介:这是一套基于Xgboost的时间序列预测与分类实战案例,使用Python实现,适合机器学习初学者及时间序列分析学习者快速上手。案例包含时间序列预测和时间序列分类两大部分,并附带了所需的测试数据集,通过完整流程演示,读者可掌握数据预处理、特征工程、模型训练与本地保存,以及预测结果和实际观测值的对比评估。包体共3个文件,包括2个Python脚本和1个CSV数据集,压缩包仅407KB,轻量便携,目前已有6028人学习下载。代码每一步均配有详细注释,不仅展示Xgboost在时间序列场景下的应用,也覆盖了数据分析和特征工程的关键操作,适合希望系统理解机器学习落地流程的读者参考。

1. 时间序列预测实战:一个开箱即跑的 XGBoost 双任务引擎

做时间序列预测的人,大概都经历过这种尴尬:调包调参搞了一星期,最后发现预测结果还没“昨天等于明天”的朴素 baseline 准。如果你正卡在特征构造、窗口划分或者模型评估上,那这份以 XGBoost 为核心的实战工程值得你花半天时间跑一遍。它不只是给你一个训练脚本,而是把时间序列预测和时间序列分类两个任务完整打包,数据加载、特征工程、滑动窗口、模型训练、评估可视化一条龙全给你串好了,点开就能运行。项目本身是纯 Python 实现,依赖收敛在机器学习最常见的几个库上,适合想快速落地时序预测但又不想从零造轮子的开发者,也适合拿它当模板去套自己的业务数据。

2. 技术选型解读:为什么是 XGBoost,而不是 LSTM 或 Prophet

2.1 从“预测”和“分类”双任务看项目定位

很多时序项目只解决单一边界:要么做回归型预测,要么做分类型识别。而这个项目把两者放在同一个工程框架里,说明它的设计初衷不是“学术 demo”,而是想覆盖实际业务里经常同时出现的两类需求——比如预测未来一周的销量数值,同时判断下周的销售趋势是上升还是下降。这两个任务共享同一套数据清洗和特征提取管道,只是在模型输出层和损失函数上分叉。

XGBoost 在这里充当了两个任务共同的核心模型。它在表格数据上的表现力足够强,训练速度快,并且对特征交互的拟合能力不输深度学习模型。相比 LSTM 需要小心翼翼地调序列长度和 batch 策略,XGBoost 只需要把时序数据转换成“监督学习”格式,就能直接套用成熟的树模型优化策略,这对工程落地来说非常友好。你可以把它理解为:用特征工程把时间维度“展开”,然后让树模型去学习展开后的模式。

2.2 环境依赖与版本兼容性

项目基于 Python 3 开发,核心依赖是 xgboost、pandas、numpy、scikit-learn 和 matplotlib。这几个库在 Python 数据科学生态里属于“标配”,所以环境配置基本不会翻车。安装时建议直接用 pip 一次性装齐,避免逐个安装时出现依赖版本冲突:

pip install pandas numpy scikit-learn xgboost matplotlib

装完之后可以快速验证一下 xgboost 是否能正常导入:

import xgboost as xgb print(xgb.__version__)

如果输出了版本号,说明环境就绪。这里有个小提醒:xgboost 在 Windows 和 Linux 上的安装包略有差异,但 pip 会自动选择对应平台的 wheel,不需要手动处理。要是你用的是 Python 3.11 以上版本,建议把 xgboost 升级到 1.7 以上,否则可能遇到预编译二进制不兼容的问题。这个项目不依赖 GPU,CPU 版本就能在几分钟内跑完示例数据。

2.3 项目目录与文件职责

拿到工程后,建议先花两分钟扫一遍目录结构,它的组织方式非常清晰:

time_series_xgboost/ ├── data/ # 存放原始数据集和预处理后的特征数据 ├── models/ # 保存训练完成的模型文件(.json / .pkl) ├── results/ # 输出预测结果和可视化图表 ├── src/ │ ├── data_loader.py # 数据读取与清洗 │ ├── feature_engineer.py # 时序特征构造 │ ├── train_predict.py # 预测任务训练与评估 │ ├── train_classify.py # 分类任务训练与评估 │ └── utils.py # 公共工具函数 └── main.py # 统一入口,点击即可运行

整个设计遵循“入口-管道-模块”的层次关系。main.py 是唯一需要用户触碰的文件,内部按顺序调用数据加载、特征构造、模型训练和结果输出。src 下的每个模块职责单一,二次开发时你只需要替换数据加载函数或者新增特征构造逻辑,不需要改动整体流程控制。这种“低耦合”的组织方式,是它适合当模板改的关键原因。

3. 核心模块拆解:一个请求从数据进入到结果返回的完整链路

3.1 数据加载与预处理逻辑

数据加载模块负责把原始的时间序列文件读入内存,并完成基础清洗。常见的时间序列原始数据长这样:一列是时间戳,一列是目标值。实际业务数据往往会有缺失值、重复时间点、异常跳变等问题,所以 data_loader.py 里做了三件关键的事——时间列标准化、缺失值填充、按时间排序去重。

import pandas as pd import numpy as np def load_series_data(file_path, time_col='date', value_col='value'): # 读取数据,强制把时间列解析为 datetime 类型 df = pd.read_csv(file_path) df[time_col] = pd.to_datetime(df[time_col]) # 按时间排序,确保序列顺序正确 df = df.sort_values(time_col).drop_duplicates(subset=[time_col]) # 缺失值用前向填充,开头缺失用后向填充兜底 df[value_col] = df[value_col].fillna(method='ffill').fillna(method='bfill') return df

这段代码的逻辑很直白:sort_values 保证时间顺序不会乱,drop_duplicates 去掉重复时间戳。缺失值处理用的是“前向填充优先,后向填充兜底”的策略——这是时序数据里最实用的填充方式,因为相邻时刻的值通常相关性最高。这里没有用均值填充,是因为均值填充会引入未来信息,造成数据泄漏,训练时指标好看,上线就翻车。

如果你的数据文件是 Excel 格式,只需要把 read_csv 换成 read_excel,并确认 sheet 名即可。另外,时间列的命名可能不同,data_loader 里已经预留了 time_col 和 value_col 两个参数,不需要改代码,传参就能适配你自己的字段名。

3.2 特征工程的滑动窗口构造

特征工程是整个项目的灵魂模块。时间序列本身是一维的,但 XGBoost 只能接收二维表格输入,所以必须把序列“展开”成特征矩阵。最经典的做法是滑动窗口:用过去 n 个时间点的值,预测下一个时间点的值。feature_engineer.py 里实现了这个转换,同时附加了几个常用的统计特征。

def create_sliding_window(data, window_size=5, horizon=1): X, y = [], [] for i in range(len(data) - window_size - horizon + 1): # 取当前窗口内的序列值作为特征 window = data[i:i + window_size] # 构造统计特征:均值、标准差、最小值、最大值 feat = list(window) feat.append(np.mean(window)) feat.append(np.std(window)) feat.append(np.min(window)) feat.append(np.max(window)) X.append(feat) # 目标值是窗口结束后的 horizon 个步长后的值 y.append(data[i + window_size + horizon - 1]) return np.array(X), np.array(y)

滑动窗口的参数是 window_size 和 horizon,分别代表“用多少历史数据”和“预测多远的未来”。window_size 取 5 表示用前 5 天的数据,horizon 取 1 表示预测下一天。除了原始序列值,这里还拼接了窗口内的均值、标准差、最值等统计特征,这些特征能帮助树模型捕捉窗口内的波动幅度和趋势,比单纯用原始数值更容易拟合出稳定规律。

有一点值得注意:窗口滑动的步长默认是 1,也就是逐点滑动,这样生成的样本数量最多。如果你的数据量很大,可以给滑窗加一个 step 参数来降采样,减少训练样本数,但代价是会丢掉部分时序信息。我一般会先在训练集上做步长为 1 的滑窗,等模型调优阶段再根据训练时间决定是否增大步长。

3.3 预测任务:模型训练、评估与可视化

train_predict.py 中封装了完整的预测流程。数据集按时间顺序切分成训练集和测试集,这里特意强调“按时间切分”,是因为随机切分会把未来的数据混进训练集,造成时间泄漏,这是时序预测最容易踩的坑。代码里用了 pandas 的 iloc 按位置切片,前 80% 做训练,后 20% 做测试:

from xgboost import XGBRegressor from sklearn.metrics import mean_absolute_error, mean_squared_error # 按时间顺序 8:2 切分,禁止随机打乱 split_idx = int(len(X) * 0.8) X_train, X_test = X[:split_idx], X[split_idx:] y_train, y_test = y[:split_idx], y[split_idx:] # 初始化 XGBoost 回归器 model = XGBRegressor( n_estimators=300, # 树的数量 max_depth=4, # 树的最大深度,防止过拟合 learning_rate=0.05, # 学习率,越小越稳但训练越久 subsample=0.8, # 每棵树使用的样本比例 colsample_bytree=0.8, # 每棵树使用的特征比例 random_state=42 ) model.fit(X_train, y_train, eval_set=[(X_test, y_test)], verbose=False) # 预测与评估 y_pred = model.predict(X_test) mae = mean_absolute_error(y_test, y_pred) rmse = np.sqrt(mean_squared_error(y_test, y_pred)) print(f'MAE: {mae:.4f}, RMSE: {rmse:.4f}')

参数里 n_estimators 控制树的数量,不是越大越好,300 在大多数场景下够用;max_depth 设成 4 是为了防止树太深导致过拟合,时序数据通常有噪声,深度太大容易把噪声也学进去;learning_rate 设为 0.05 配合 300 棵树,相当于用更多弱学习器做集成,比大学习率加少树更稳。subsample 和 colsample_bytree 都是随机采样参数,能提升模型的泛化能力。

评估环节同时计算 MAE 和 RMSE,前者更关注误差的绝对平均水平,后者对异常大误差更敏感。项目里还把真实值和预测值画在同一张折线图上,保存到 results 目录,方便直观判断模型是在“跟随时序走势”还是在“滞后复制”。

3.4 分类任务:趋势识别与二分类/多分类

分类任务和预测任务在特征构造上完全同源,只是目标值从连续数值变成了类别标签。train_classify.py 里提供了两种标签构造逻辑:二分类(上涨/下跌)和三分类(上涨/持平/下跌)。阈值可以自定义,比如涨幅超过 1% 算上涨,跌幅超过 1% 算下跌,中间算持平。目标列构造代码如下:

def build_classification_label(series, threshold=0.01): # 计算相邻时间点的变化率 pct_change = series.pct_change() label = [] for p in pct_change: if pd.isna(p): label.append(-1) # 第一个点无法计算变化率,标记为无效 elif p > threshold: label.append(1) # 上涨 elif p < -threshold: label.append(2) # 下跌 else: label.append(0) # 持平 return np.array(label)

分类训练用的是 XGBClassifier,核心参数和回归版本几乎一样,只是最后的目标函数不同。分类任务里有一个隐藏问题:类别不平衡。在趋势识别中,“持平”这类样本通常占比很高,导致模型倾向于预测多数类,准确率虚高但实际没有区分度。如果你在跑项目时发现分类结果的混淆矩阵中某一类占比异常大,建议调整 threshold 让三类样本分布尽量均衡,或者给 XGBClassifier 的 scale_pos_weight 参数传入类别权重。

4. 避坑指南:时间序列里最常见的 5 个隐藏问题

4.1 随机切分导致“未来数据泄漏”

现象:训练时 RMSE 很低,测试集效果也不错,但一放到真实场景预测就崩了。原因:数据加载后直接调了 train_test_split 且 shuffle=True,把未来的数据混进了训练集。树模型会把“未来模式”当特征学进去,测试时因为混入训练集的“未来片段”导致评估失真。解决:严格按时间顺序切分,sklearn 的 train_test_split 里带上 shuffle=False,或者直接用 iloc 按位置切片。

4.2 预测滞后:预测曲线看起来是“平移了一段”

现象:预测值和真实值画在一起,曲线形状很像,但整体比真实值晚了一两天。原因:滑动窗口预测本质上是用过去预测未来,如果时间序列本身具有很强的自相关性,模型学到的“最优策略”就是拷贝最近一个点。解决:不要急着调参,先确认特征里是否有足够的外生变量;如果只有目标值自身,这是树模型的天然局限。可以在特征中加入差分项(当前值减去上一个值)或者移动平均线的斜率,帮助模型捕捉趋势而非复制数值。

4.3 差分与窗口的坑:窗口取太大导致数据量骤减

现象:日志显示样本数只有几百条,模型训练效果差。原因:window_size 取 50,数据总共 1000 条,滑窗后样本只有 1000 - 50 - horizon + 1 ≈ 951 条,如果还叠加了按比例切分,训练集就更少。解决:窗口大小别贪,先用 5~10 做基线,再通过实验对比不同窗口下的验证集误差;如果序列长度不够,可以用“扩展窗口”的方式,前面用较小窗口,后面逐步增大。

4.4 XGBoost 对缺失值“过于宽容”

现象:模型能跑通,但特征重要性里有一列莫名其妙地占比很高。原因:XGBoost 会自动处理缺失值,但这不代表你可以放任缺失。如果某个特征缺失率超过 30%,树模型会在分裂时默认把缺失值分到增益最大的一侧,这实际上是“用目标反推缺失方向”,在时序场景中非常危险。解决:单独记录缺失率高的特征列,要么用lag值填充,要么直接删掉该特征。不要把所有缺失都推给 XGBoost 的默认处理机制。

4.5 分类任务里“标签泄漏”于滑动窗口

现象:分类准确率高达 99%,但业务上线几乎没用。原因:构造标签时用了 pct_change,而这个函数是基于全序列计算的——当前位置的变化率其实依赖了未来的值。解决:分类标签必须逐点计算,每到一个时间点,只允许用该点及其之前的数据判断涨跌。代码里 build_classification_label 是安全的,但如果你自己实现时先算好整列再滑窗,就会把未来信息带进窗口特征。

5. 二次开发实战:把项目改造成自己的时序预测工具

拿到这个项目,最值得做的第一件事不是调参,而是把你的数据格式对齐到 data_loader 的输入标准。我通常会在 data/ 目录下放一个 sample_data.csv 对照着看,把自己的数据整理成 time_col 和 value_col 两列。如果你的业务是多变量时序,比如同时有温度、湿度、销量多个维度,就在 load_series_data 里改成读多列,然后针对每个维度分别做滑窗,最后横向拼接成特征矩阵。需要留意的是,多变量特征拼接后要对特征列命名,否则 XGBoost 的特征重要性图表里全是 feature0、feature1,没法解释。

第二个值得改的点是 horizon 的预测步长扩展。原始代码默认预测一步,如果业务需要预测未来 7 天,在 create_sliding_window 的 horizon 参数上调成 7 即可。但要注意:直接调大 horizon 会牺牲精度,因为离现在越远的未来,不确定性越高。常见做法是训练多个模型,分别预测第 1 天、第 2 天……第 7 天,每个模型独立训练,输入窗口一致但目标值不同。这个项目结构完全可以支撑这种改法,在 train_predict.py 里循环 7 次,每次生成不同的 y,模型保存到不同的文件里。

分类任务的改造方向更偏业务。比如工业场景里的设备故障预警,可以把“上涨/下跌”改成“正常运行/异常波动”,阈值改成设备振动的经验阈值。这种场景下建议在特征工程里加入滚动方差和滚动极差,因为这些统计量对突发性异常更敏感。分类结果的评估不建议只用准确率,重点看召回率——漏报一次故障的代价远高于误报一次。在 train_classify.py 里输出 confusion_matrix,然后手动计算 precision、recall、f1-score。

调参层面,如果训练时间紧张,可以把 n_estimators 砍到 100,然后观察 val_rmse 是否还有下降空间。XGBoost 可以在 sklearn API 里用 early_stopping_rounds 参数:

model = XGBRegressor(n_estimators=1000, early_stopping_rounds=50)

这样如果连续 50 轮验证集误差不再下降,训练自动终止,既省时间又避免过拟合。这个参数是我自己调试时最常用的一招,比手动设定固定树数量靠谱得多。

做二次开发时要常常问自己一个问题:模型在测试集上表现好,到底是因为学到了真实规律,还是因为无意中把未来信息传给了模型?时间序列项目里,多数“惊喜效果”最后都被证实是泄漏。所以我在跑完任何改动后,都会强制做一次“时间倒序检查”——把训练集和测试集互换,如果模型性能依然“稳定地好”,那大概率是在看噪音。

作为曾经的踩坑老人,只想说一句:跑通这份代码不难,难的是你改动之后依然能解释模型的每一个输出。希望这份项目解析能帮你在时序预测的路上少走几步弯路。

本文还有配套的精品资源,点击获取

相关新闻

读懂config.json:Devstral-Small-2-24B-Instruct-2512-GGUF的Mistral3架构、YARN与Pixtral视觉塔揭秘

读懂config.json:Devstral-Small-2-24B-Instruct-2512-GGUF的Mistral3架构、YARN与Pixtral视觉塔揭秘

【免费下载链接】Devstral-Small-2-24B-Instruct-2512-GGUF 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/unsloth/Devstral-Small-2-24B-Instruct-2512-GGUF 点击查看 免费下载 本仓库提供 Devstral-Small-2-24B-Instruct-2512-GGUF——Mistral AI 编程 Agent 大…

2026/10/20 8:29:56 阅读更多 →
Windows存储感知:自动清理C盘临时文件与回收站,彻底告别磁盘空间不足

Windows存储感知:自动清理C盘临时文件与回收站,彻底告别磁盘空间不足

你的C盘是不是又红了&#xff1f;每次看到那个红色进度条&#xff0c;心里就咯噔一下。装了几个软件、缓存了一堆临时文件、回收站忘了清&#xff0c;几十个G的可用空间说没就没。手动翻文件夹删吧&#xff0c;又怕删错东西&#xff0c;第三方清理软件吧&#xff0c;全家桶和弹…

2026/10/20 8:29:56 阅读更多 →
用YAML文件实现接口自动化测试参数关联的完整实践

用YAML文件实现接口自动化测试参数关联的完整实践

1. 项目概述与方案缘起1.1 为什么我会想到用 yml 文件做参数关联先说说背景。我一直在做接口自动化测试&#xff0c;涉及的项目是一个典型的业务闭环&#xff1a;登录获取 token&#xff0c;用 token 去创建订单&#xff0c;再用订单号去查询物流信息&#xff0c;最后拿流水号去…

2026/10/20 8:28:53 阅读更多 →

最新新闻

插件化Agent框架源码拆解:内核、协议与生命周期机制

插件化Agent框架源码拆解:内核、协议与生命周期机制

1. 从“能跑就行”到“拆开看看”&#xff1a;我为什么要啃这套 Agent 框架第一次看到“插件化 Agent 框架”这个说法时&#xff0c;我的反应和大多数人一样——又是一个包装概念。毕竟这两年“Agent”这个词已经被用烂了&#xff0c;随便一个能调 API 的脚本都敢叫自己 Agent …

2026/10/20 9:15:12 阅读更多 →
代理网络与浏览器组合环境下的Web交付链路漏洞排查与修复

代理网络与浏览器组合环境下的Web交付链路漏洞排查与修复

先说一个我印象很深的案例。前两年我接手过一套业务系统&#xff0c;整体架构不复杂&#xff1a;用户在浏览器里访问&#xff0c;入口走了一层反向代理&#xff0c;后面挂着应用服务。这套环境已经稳定运行了很久&#xff0c;结果突然开始出现间歇性的白屏、资源加载失败、接口…

2026/10/20 9:15:12 阅读更多 →
Python开发环境配置与实例练习:从解释器选型到虚拟环境管理

Python开发环境配置与实例练习:从解释器选型到虚拟环境管理

说实话&#xff0c;我见过太多人在Python学习的第一周就栽了跟头&#xff0c;而罪魁祸首往往不是语法有多难&#xff0c;而是开发环境配置根本没有跑通。明明是照着教程装的Python&#xff0c;写第一行print就报错&#xff0c;或者装了库却导不进来&#xff0c;一折腾就是两三个…

2026/10/20 9:15:12 阅读更多 →
下一代软件开发人员将是架构师吗?架构思维成开发者核心竞争力

下一代软件开发人员将是架构师吗?架构思维成开发者核心竞争力

1. 这个标题到底在问什么"下一代软件开发人员将是架构师吗&#xff1f;"——这个问题我第一次看到的时候&#xff0c;正蹲在工位上改一个祖传项目的依赖冲突。当时我的第一反应是&#xff1a;别逗了&#xff0c;我连自己写的代码三个月后都不想看&#xff0c;还架构师…

2026/10/20 9:15:12 阅读更多 →
MFC中Spin控件与Edit控件的手动绑定实战指南

MFC中Spin控件与Edit控件的手动绑定实战指南

1. 项目概述&#xff1a;为什么Spin控件和Edit Control的绑定不是“连上线”那么简单在MFC开发中&#xff0c;看到“Spin控件绑定Edit Control”这个标题&#xff0c;很多刚从C#或Qt转过来的开发者第一反应是&#xff1a;“不就是拖两个控件、勾个属性、设个范围&#xff1f;5分…

2026/10/20 9:15:12 阅读更多 →
AI与律师职业:替代还是重构?十年趋势深度拆解

AI与律师职业:替代还是重构?十年趋势深度拆解

1. 先别急着站队&#xff1a;这个问题的答案藏在“律师”这两个字的拆解里“未来十年AI会代替律师职业吗&#xff1f;”这个问题在网上的讨论热度一直居高不下&#xff0c;每隔一段时间就会被翻出来炒一遍。我身边做技术的朋友和做法律的朋友&#xff0c;给出的答案几乎是两个极…

2026/10/20 9:14:02 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →