弹性网络回归实战:从原理到调参,解决高维共线性特征选择难题
简介这份文档面向机器学习初学者与数据分析从业者聚焦回归算法中的弹性网络回归帮助读者理解其如何结合岭回归与Lasso回归的优势在特征选择与模型复杂度之间取得平衡。内容从回归算法在预测建模中的核心作用讲起逐步展开弹性网络回归的数学模型、目标函数中正则化参数与平衡参数的含义并给出基于sklearn的Python实现示例涵盖数据生成、训练测试集划分、模型训练与均方误差评估。文档还演示了参数调整方法并通过基因表达数据分析案例展示如何利用ElasticNetCV交叉验证自动调参、标准化预处理及筛选重要特征体现其在高维数据场景下的实用价值。资源为1个docx文件压缩包约30KB结构紧凑适合作为回归分析实际应用的学习参考。目前已有230人学习便于快速上手弹性网络回归的建模流程与调参思路。1. 弹性网络回归当几百个特征一起涌进来普通回归为什么先崩做过工业设备预警或者用户流失预测的人大概率都遇到过这种局面特征表一拉出来三百多列传感器均值、方差、频域指标、滑动窗口统计量全堆在一起彼此之间相关系数动辄 0.9 以上。这时候你上普通最小二乘系数会炸成天文数字换 Ridge 又会把所有特征都留着解释性一塌糊涂换 Lasso 更玄学随机种子换一下被选中的特征就换一批同一批数据两次跑出两个模型汇报的时候自己都不敢信。弹性网络回归Elastic Net就是为这种场景准备的它把 L1 和 L2 两种正则项按比例揉在一起既能把冗余特征系数压到 0 做筛选又能在强相关特征组里保持稳定不会像 Lasso 那样随便挑一个留下。它适合谁适合手头特征维度高、共线性重、又需要给业务方解释「到底哪几个变量在起作用」的工程师。这篇笔记就按「原理站得住 → 代码跑得通 → 参数调得动 → 坑避得开」的顺序把弹性网络回归从公式一路落到可复现的脚本上。2. 弹性网络回归的目标函数与坐标下降求解从公式到能跑的代码2.1 目标函数里两个惩罚项各自在干什么先把损失函数写清楚弹性网络回归要最小化的是Loss (1 / (2n)) * ||y - Xw||² alpha * l1_ratio * ||w||₁ 0.5 * alpha * (1 - l1_ratio) * ||w||₂²这里n是样本数alpha是整体正则强度l1_ratio是 L1 在正则项里的占比取值 0 到 1。当l1_ratio1时退化成 Lassol1_ratio0时退化成 Ridge中间值就是两者的混合。L1 项||w||₁的梯度在零点不连续所以它能把不重要的系数直接推到 0产生稀疏解L2 项||w||₂²处处可导它把系数往原点拉但不会拉到 0作用是稳定解、处理共线性。两者叠加的效果是强相关的一组特征要么一起被保留、要么一起被剔除而不是像 Lasso 那样随机留一个。这一点在传感器阵列、基因表达、文本 TF-IDF 这类「成组出现」的特征上特别关键。alpha控制整体惩罚力度越大系数越收缩l1_ratio控制稀疏程度越大被置零的系数越多。实际调参时这两个是联合搜索的不能分开调后面 2.3 会讲怎么用交叉验证一次搞定。2.2 用 scikit-learn 跑通最小可复现示例先给一份能直接复制运行的代码用模拟数据把整条链路走通包括标准化、拟合、看稀疏度、看系数。import numpy as np from sklearn.linear_model import ElasticNet, ElasticNetCV from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score # 固定随机种子保证结果可复现 rng np.random.RandomState(42) # 构造 500 样本、120 特征的数据其中只有 15 个特征真正有信号 n_samples, n_features 500, 120 X rng.randn(n_samples, n_features) # 制造共线性让后 40 个特征与前 40 个高度相关 X[:, 80:] X[:, :40] 0.05 * rng.randn(n_samples, 40) # 真实系数只有前 15 个非零 true_w np.zeros(n_features) true_w[:15] rng.uniform(2, 5, 15) y X.dot(true_w) 0.5 * rng.randn(n_samples) # 标准化是弹性网络的前置动作惩罚项对量纲敏感 scaler StandardScaler() X_scaled scaler.fit_transform(X) X_train, X_test, y_train, y_test train_test_split( X_scaled, y, test_size0.2, random_state42 ) # 先用一组经验参数跑通 model ElasticNet(alpha0.1, l1_ratio0.5, max_iter10000, random_state42) model.fit(X_train, y_train) y_pred model.predict(X_test) print(R2:, round(r2_score(y_test, y_pred), 4)) print(非零系数个数:, np.sum(model.coef_ ! 0)) print(前 20 个系数:, np.round(model.coef_[:20], 3))这段代码有几个点必须说清楚。第一StandardScaler不是可选项弹性网络的惩罚项直接作用在系数上如果某个特征量纲是几千、另一个是零点几惩罚力度对它们完全不对等结果就是大量纲特征几乎不被惩罚。第二max_iter默认 1000特征多、共线性强的时候经常不收敛控制台会刷ConvergenceWarning直接调到 10000 甚至更高。第三random_state在坐标下降里影响的是特征遍历顺序虽然弹性网络比 Lasso 稳定但固定种子仍然是好习惯。跑完你会看到非零系数个数明显小于 120但又不是只留 15 个因为共线性的那 40 个特征会被成组保留或成组剔除这正是弹性网络想要的行为。2.3 用 ElasticNetCV 一次性搜出 alpha 和 l1_ratio手调alpha和l1_ratio是体力活scikit-learn 提供了ElasticNetCV做二维网格交叉验证。下面这段是实际项目里我常用的写法。# l1_ratio 候选从 0.1 到 1.0alpha 由 CV 自动在路径上搜索 cv_model ElasticNetCV( l1_ratio[0.1, 0.3, 0.5, 0.7, 0.9, 1.0], alphasnp.logspace(-3, 1, 50), # 对数刻度覆盖三个数量级 cv5, max_iter10000, n_jobs-1, random_state42 ) cv_model.fit(X_train, y_train) print(最优 alpha:, round(cv_model.alpha_, 4)) print(最优 l1_ratio:, cv_model.l1_ratio_) print(CV 均方误差:, round(cv_model.mse_path_.mean(), 4)) print(非零系数个数:, np.sum(cv_model.coef_ ! 0))alphas用np.logspace而不是np.linspace因为正则强度的影响是对数尺度的线性刻度会在小值区浪费大量计算。l1_ratio候选列表不用太密0.1 的步长足够再密收益很小但耗时翻倍。n_jobs-1开满核5 折 × 6 个 l1_ratio × 50 个 alpha 是 1500 次拟合不开并行会等到怀疑人生。选出来的l1_ratio如果接近 1说明数据稀疏性很强Lasso 就够如果落在 0.3 到 0.7 之间说明共线性确实存在弹性网络的混合正则起了作用。这个值本身就是一个诊断信号值得记下来。3. 特征工程与数据预处理弹性网络回归落地前必须做的四件事3.1 标准化、缺失值与异常值的处理顺序顺序错了后面全白做。我一般按「异常值处理 → 缺失值填充 → 标准化」这个顺序走。异常值先处理是因为均值和方差会被极端值带偏如果先标准化再处理异常值标准化用的统计量本身就是脏的。缺失值填充放在标准化之前是因为填充策略均值、中位数、KNN依赖原始分布标准化之后填充会引入额外偏差。from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler from sklearn.linear_model import ElasticNetCV # 用 Pipeline 把预处理和模型绑在一起避免数据泄漏 pipe Pipeline([ (imputer, SimpleImputer(strategymedian)), # 中位数比均值抗异常值 (scaler, StandardScaler()), (model, ElasticNetCV( l1_ratio[0.3, 0.5, 0.7], cv5, max_iter10000, n_jobs-1, random_state42 )) ]) pipe.fit(X_train, y_train) print(测试集 R2:, round(pipe.score(X_test, y_test), 4))用Pipeline的核心目的是防止数据泄漏标准化和填充的统计量只能在训练集上算再应用到验证集和测试集。手动先fit_transform整个数据集再切分是新手最常犯的错交叉验证分数会虚高上线就翻车。3.2 共线性诊断什么时候该用弹性网络而不是 Lasso不是所有高维问题都该上弹性网络。判断依据是特征间的相关性结构。跑一下相关矩阵看有没有成簇的高相关特征。import pandas as pd # 假设 X_df 是原始特征 DataFrame corr_matrix pd.DataFrame(X_train).corr().abs() # 统计相关系数大于 0.8 的特征对数量 high_corr_pairs (corr_matrix.where( np.triu(np.ones(corr_matrix.shape), k1).astype(bool) ) 0.8).sum().sum() print(高相关特征对数量:, high_corr_pairs)如果高相关特征对数量占总特征对的比例超过 5%弹性网络通常比 Lasso 更稳。另一个信号是用 Lasso 跑多次换随机种子或换子采样被选中的特征集合变化很大说明 Lasso 在共线性下选择不稳定这时候换弹性网络。反过来如果特征之间基本独立、真正有信号的只有少数几个Lasso 更快更简洁没必要上弹性网络。3.3 类别特征编码与交互项的取舍弹性网络是线性模型类别特征必须编码成数值。低基数类别用 one-hot高基数类别比如几百个类别 ID用 one-hot 会让特征维度爆炸这时候要么用目标编码要么直接放弃这个特征。目标编码要注意在交叉验证内部做否则泄漏标签。交互项要不要加我的经验是如果业务上明确知道两个变量有协同效应比如温度和湿度对设备损耗可以手动加几个关键交互项但不要盲目做多项式展开PolynomialFeatures(degree2)在 100 个特征上会生成 5000 多个特征弹性网络虽然能筛选但计算成本和过拟合风险都会显著上升。真要做先用领域知识筛出 10 到 20 个候选交互项再让模型去选。4. 弹性网络回归调参与评估alpha、l1_ratio 和验证曲线怎么读4.1 alpha 与 l1_ratio 的联合影响这两个参数不是独立的。alpha增大时最优l1_ratio往往会往小走因为整体惩罚已经够强不需要 L1 再额外制造稀疏。反过来alpha很小时需要更大的l1_ratio才能把噪声特征压到 0。所以必须联合搜索ElasticNetCV内部就是这么做的。下面这张表是我在几个模拟数据集上总结的经验区间实际值因数据而异但方向可以参考。数据特征alpha 典型范围l1_ratio 典型范围非零系数占比特征独立、信号稀疏0.01 ~ 0.10.8 ~ 1.05% ~ 15%中等共线性0.05 ~ 0.50.4 ~ 0.715% ~ 40%强共线性、成组信号0.1 ~ 1.00.2 ~ 0.530% ~ 60%噪声极大、信噪比低0.5 ~ 5.00.5 ~ 0.95% ~ 20%读这张表的正确方式是先看你的数据落在哪一行把alpha和l1_ratio的搜索范围设宽一点让 CV 去选而不是直接抄数值。4.2 用验证曲线判断正则强度是否合理ElasticNetCV会给出不同 alpha 下的交叉验证误差路径把它画出来能直观看到模型有没有过拟合或欠拟合。import matplotlib.pyplot as plt # cv_model 是上一节拟合好的 ElasticNetCV plt.figure(figsize(8, 5)) plt.semilogx(cv_model.alphas_, cv_model.mse_path_.mean(axis1), labelCV 均方误差) plt.axvline(cv_model.alpha_, colorred, linestyle--, labelf最优 alpha{cv_model.alpha_:.4f}) plt.xlabel(alpha (对数刻度)) plt.ylabel(均方误差) plt.legend() plt.tight_layout() plt.savefig(elastic_net_cv_path.png, dpi150)曲线通常是 U 形左边 alpha 太小模型过拟合CV 误差高右边 alpha 太大模型欠拟合误差也高最低点就是最优 alpha。如果曲线在搜索范围边界上还在下降说明alphas范围没覆盖到最优点需要把上界或下界往外扩。如果曲线很平说明模型对 alpha 不敏感这时候选大一点的 alpha 更安全泛化更稳。4.3 评估指标不能只看 R²回归任务的评估指标要结合业务。R² 看整体拟合MSE/RMSE 看绝对误差MAE 看抗异常值能力MAPE 看相对误差。设备预警场景里我更关注高误差样本的比例因为漏报比平均误差大更致命。from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score y_pred cv_model.predict(X_test) print(R2:, round(r2_score(y_test, y_pred), 4)) print(RMSE:, round(np.sqrt(mean_squared_error(y_test, y_pred)), 4)) print(MAE:, round(mean_absolute_error(y_test, y_pred), 4)) # 统计相对误差超过 20% 的样本比例 rel_err np.abs((y_test - y_pred) / (y_test 1e-8)) print(相对误差 20% 的样本占比:, round(np.mean(rel_err 0.2), 4))分母加1e-8是防止真实值为 0 时除零。这个比例如果超过 10%说明模型在某些区间系统性偏差需要回去看是不是有非线性关系没被捕捉或者某些关键特征被正则化压掉了。5. 弹性网络回归避坑指南五条血泪经验5.1 现象模型系数全为零R² 为负原因alpha设得太大或者特征没有标准化导致惩罚力度失衡。解决先确认标准化做了再把alpha搜索范围下界调低用ElasticNetCV自动搜而不是手拍。如果 CV 选出来的 alpha 仍然让所有系数为零说明特征和标签之间可能真的没有线性关系换模型或者回去检查标签构造。5.2 现象控制台反复刷 ConvergenceWarning原因max_iter不够或者特征共线性极强导致坐标下降收敛慢。解决max_iter调到 10000 以上同时把tol从默认 1e-4 放宽到 1e-3。如果还不行先做一轮特征筛选把相关系数 0.95 以上的特征去掉一半再跑弹性网络。收敛问题在共线性强的数据上是常态不要跟它较劲。5.3 现象交叉验证分数很高上线后误差翻倍原因数据泄漏。最常见的是标准化、缺失值填充、目标编码在切分之前就做了。解决所有预处理步骤必须包在Pipeline里fit只在训练集上调用。另一个隐蔽的泄漏源是时间序列数据用了随机切分应该用TimeSeriesSplit。5.4 现象换一个随机种子选中的特征变了一半原因数据共线性太强弹性网络的 L1 部分仍然在做不稳定选择。解决增大l1_ratio中的 L2 占比也就是把l1_ratio往小调让模型更倾向于成组保留。如果业务要求必须选出唯一特征集那弹性网络可能不是最合适的工具考虑用稳定性选择stability selection做多次子采样投票。5.5 现象非零系数对应的特征业务上说不通原因可能是特征编码或量纲处理有问题也可能是共线性导致系数符号反转。解决先检查相关矩阵看这些特征是不是和某个强特征高度相关。共线性下弹性网络虽然比 Lasso 稳但系数符号仍然可能和单变量分析相反。这时候不要硬解释系数大小把重点放在「哪些特征被保留」而不是「系数具体是多少」。6. 把弹性网络回归用稳的一个习惯先看系数路径再定模型弹性网络回归真正好用的地方不是它比 Lasso 或 Ridge 的 R² 高多少而是它给了你一条可以观察的系数路径。我现在的习惯是不管ElasticNetCV选出来什么参数都先手动跑一遍elastic_net_path把不同alpha下每个特征的系数变化画出来看哪些特征在惩罚增强时最先归零、哪些一直坚挺。from sklearn.linear_model import enet_path # 手动计算系数路径l1_ratio 用 CV 选出来的值 alphas_path, coefs, _ enet_path( X_train, y_train, l1_ratiocv_model.l1_ratio_, alphasnp.logspace(-3, 1, 100), max_iter10000, random_state42 ) # 只看前 20 个特征避免图太乱 plt.figure(figsize(10, 6)) for i in range(20): plt.plot(np.log10(alphas_path), coefs[i], linewidth1) plt.axvline(np.log10(cv_model.alpha_), colorred, linestyle--, labelCV 最优 alpha) plt.xlabel(log10(alpha)) plt.ylabel(系数值) plt.legend() plt.tight_layout() plt.savefig(coef_path.png, dpi150)这张图能告诉你三件事。第一哪些特征在很小的 alpha 下就非零说明信号强哪些要等到 alpha 很小才冒出来说明信号弱、可能是噪声。第二CV 最优 alpha 那条竖线穿过的位置有多少特征还活着和你的业务预期是否一致。第三如果两个特征系数路径几乎重合说明它们高度共线模型在它们之间摇摆这时候可以考虑合并或去掉一个。我踩过最深的一个坑是早期直接信ElasticNetCV的输出把选出来的特征列表交给业务方结果对方问「为什么这个特征被选了那个几乎一样的没被选」我答不上来。后来养成看系数路径的习惯就能提前发现共线性问题主动跟业务方解释「这两个特征模型认为是一组保留哪个都行我们按采集成本选一个」。这个习惯比调参本身更值钱。另外一个小技巧如果数据量允许跑 10 次不同随机种子的ElasticNetCV统计每个特征被选中的频率频率高于 0.8 的作为稳定特征集0.2 到 0.8 之间的作为候选低于 0.2 的直接丢掉。这个做法比单次 CV 的结果可靠得多代价只是多花几倍计算时间。在特征维度几百、样本几千的场景下这个代价完全值得。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

电控软件测试方法论与实战:从用例设计到自动化回归

电控软件测试方法论与实战:从用例设计到自动化回归

干电控软件测试这些年,我经常被问到同一个问题:测试用例到底怎么设计才能把故障真正测出来?问这个问题的,有刚转行入门的工程师,也有带了几年项目的骨干。大家的困惑其实都指向同一个点——电控软件和普通应用软件不一…

2026/10/10 18:04:35 阅读更多 →
Nexus 3.15.2搭建Maven私服全程实践与坑点排查

Nexus 3.15.2搭建Maven私服全程实践与坑点排查

简介:Nexus 3.15.2的Windows 64位官方安装包,定位是在局域网内搭建Maven私服,面向需要集中管理依赖、加快构建速度的Java开发团队和运维人员。通过部署该私服,开发人员连接内网地址即可访问远端Maven仓库,缓存常用构件…

2026/10/10 18:04:35 阅读更多 →
开源GPU编译器Booth:不用LLVM和NVCC,如何用纯C99打通CUDA到多架构的完整路径

开源GPU编译器Booth:不用LLVM和NVCC,如何用纯C99打通CUDA到多架构的完整路径

【免费下载链接】Booth Open-source CUDA, Triton and HIP compiler targeting multiple GPU and CPU architectures. 项目地址: https://gitcode.com/gh_mirrors/bar/Booth 点击查看 免费下载 Booth 是一个开源 GPU 编译器,它直接把 CUDA C、HIP 和 T…

2026/10/10 18:03:34 阅读更多 →

最新新闻

647回文子串与516最长回文子序列:区间DP两种典型玩法全解析

647回文子串与516最长回文子序列:区间DP两种典型玩法全解析

各位打卡代码随想录的伙计们,第四十五天来了。今天这两道题——647 回文子串、516 最长回文子序列——看起来名字只差两个字,实际上一个是把字符串切成一段段判断"是不是回文",另一个是允许跳跃地凑出"最长回文有多长"。…

2026/10/10 21:19:06 阅读更多 →
用幸运大转盘项目掌握Python循环:for、while与range实战

用幸运大转盘项目掌握Python循环:for、while与range实战

1. 项目拆解:为什么用“幸运大转盘”讲循环在Python入门的教学顺序里,循环永远是绕不过去的坎。很多初学者学完变量、条件判断之后,一到for和while就开始晕:for循环里那个range到底怎么数数?while循环什么时候停&#…

2026/10/10 21:19:06 阅读更多 →
mcp-brasil快速上手指南:2分钟接入Claude/Cursor,免费解锁66个巴西公共数据API

mcp-brasil快速上手指南:2分钟接入Claude/Cursor,免费解锁66个巴西公共数据API

【免费下载链接】mcp-brasil MCP Server para 70 APIs pblicas brasileiras 项目地址: https://gitcode.com/gh_mirrors/mc/mcp-brasil 点击查看 免费下载 mcp-brasil 是一个开源的 MCP Server,一个命令即可把 66 个无需密钥的巴西公共数据 API&#xf…

2026/10/10 21:19:06 阅读更多 →
AI 齐套性专家 | 实战案例成果演示

AI 齐套性专家 | 实战案例成果演示

#玄宿科技#AI齐套性交付#案例分享#自主协同软件#GJB438B#Qt开发#交付文档上一期我们演示了 AI 齐套性交付专家的完整生成过程,但所用案例与真实业务贴合度不够。本期我们换了一个完全贴合业务的方向,重新生成了一整套成果:原型图、可交互程序…

2026/10/10 21:19:06 阅读更多 →
OOOSplat 处理流水线全解:FFmpeg、COLMAP 与 Brush 三大引擎如何协同工作

OOOSplat 处理流水线全解:FFmpeg、COLMAP 与 Brush 三大引擎如何协同工作

桌面应用图形学3D渲染计算机视觉 【免费下载链接】ooosplat A local desktop app that turns videos and images into 3D Gaussian Splats in one click. 项目地址: https://gitcode.com/gh_mirrors/oo/ooosplat 点击查看 免费下载 OOOSplat 是一款把视频和图片序列…

2026/10/10 21:19:06 阅读更多 →
零基础 30 分钟出片:用万相 Animate 把角色设定变成可复用的动画素材

零基础 30 分钟出片:用万相 Animate 把角色设定变成可复用的动画素材

零基础 30 分钟出片:用万相 Animate 把角色设定变成可复用的动画素材 【免费下载链接】Wan2.2-Animate-2-14B 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.2-Animate-2-14B 做一条角色动画,过去意味着什么?画角色设定、…

2026/10/10 21:18:06 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14: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/10 5:23: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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →