Blending算法实战:模型融合中的原理、代码与避坑指南

堆叠学习(Stacking)和Blending算法,是我在做模型融合时最先认真研究的一对概念。很多人第一次听到Blending,是在某个数据挖掘比赛的Top方案里;等真到自己手上写代码时,往往会发现它对数据划分的要求比想象中更严格,对基模型的选择也有不少讲究。Blending算法可以理解为堆叠学习的一种简化实现,它用一次Holdout划分替代了K折交叉验证,以牺牲少量训练数据信息为代价,换来更低的实现复杂度和更稳定的线下评估结果。如果你已经跑通了单模型,正在寻找一种低成本、高回报的精度提升手段,这篇文章应该能帮你少走不少弯路。我会从原理、代码、避坑到选型,完整讲一遍自己这些年用Blending的体会。

1. Blending为什么值得单独聊:从模型融合家族说起

1.1 堆叠学习到底是什么:一个容易被忽视的基础概念

堆叠学习(Stacking)这个概念,很多人在一开始接触时都会有个误解,觉得它不就是“把几个模型的结果加权平均一下”吗。其实完全不是一回事。Stacking的核心思想是:先训练一批基学习器(Base Learners),再把它们的预测结果作为新的特征,交给一个上层模型去做最终决策。这个上层模型叫元学习器(Meta Learner),它做的事情不是简单平均,而是学习“在什么样本上该听谁的”。

我在刚开始实践时,用三个模型做融合,一个逻辑回归、一个随机森林、一个梯度提升树。简单平均之后,AUC确实涨了一点,但幅度很有限。后来把这三个模型的预测概率拼接起来,训练了一个逻辑回归作为元学习器,效果立刻拉开了一大截。原因其实很好理解:不同模型在不同样本上的犯错模式不同,简单平均做不到“区别对待”,而元学习器可以学会一个样本属于哪个区域时,哪个基模型的判断更可信。

Blending就是Stacking家族里的一个简化版本。它和完整Stacking最大的区别,也最容易让人困惑的地方,就是第一层验证集的构建方式。Stacking通常用K折交叉验证来生成元特征,而Blending直接用一次Holdout划分出来的验证集来完成这件事。别小看这一个差别,它直接影响了训练速度、过拟合风险和最终效果的稳定性,也决定了你在什么场景下应该选谁。

1.2 Blending在什么场景下特别香

Blending最吃香的场景,一个是竞赛,一个是工业小规模快速验证。理由很直接,就三个词:快、稳、简单。

快,是因为基模型只需要对验证集做一次预测,不像完整Stacking那样每个基模型都要做K次预测,时间成本直接省下一大半。稳,是因为验证集从头到尾没有参与第一层基模型的训练,元学习器拿到的是“真正没见过这些模型的样本”,数据泄露的风险天然更低。简单,是因为代码量少,调试直观,尤其适合作为模型融合的基线方案先跑通,再决定要不要上更重的方案。

我个人的体会是,如果你手里的数据有几十万行,特征工程已经做到位,单模型的精度卡在上不去的位置,Blending往往能帮你磨出0.5到1个百分点的提升。但如果你还停留在单模型阶段,我建议先别急着上Blending。因为它放大的不只是好结果,也会放大基模型本身的缺陷。地基没打好,上层建筑再花哨也是空中楼阁。

2. Blending的核心机制:Holdout划分如何决定成败

2.1 数据一分为三:一个被反复强调但经常被做错的环节

Blending的第一步,是把数据划分成三份:训练集(Train)、验证集(Validation,也叫Blend集或Holdout集)、测试集(Test)。这里有一个特别容易犯的错误:很多人会把训练集和验证集合在一起训练基模型,然后对测试集做预测,再拿测试集预测结果去训练元学习器。这套流程听起来好像没什么问题,实际上已经完全错位了。

正确的划分逻辑是这样:基学习器只在训练集上训练,然后用训练好的模型去预测验证集,得到验证集上的预测结果;这一部分预测结果会作为第二层元学习器的输入特征。这时,千万不要让基模型去预测测试集,因为测试集是留给整个Blending流程跑完之后,评估最终效果用的。元学习器训练完之后,才把测试集喂进整条链路,得到最终预测。

关于验证集的比例,我常用的范围是10%到25%。数据量充足时取15%左右比较舒服;数据量偏小时,可以稍微调高一点给元学习器更多样本,但要注意别挤占了基模型的训练空间。另外划分数据时一定要保持标签分布一致,我最常用的做法是stratify分层采样,让训练集、验证集、测试集里的正负样本比例保持一致,这一步能避免很多后续评估时的意外偏差。

2.2 第一层的输出:概率比类别标签更值钱

基学习器对验证集做预测时,绝大多数情况下应该输出类别概率,而不是硬分类标签。原因很简单:0.7的概率和0.9的概率,在硬标签下都是1,差异被彻底抹掉了;但元学习器恰恰需要这种细粒度差异,来判断不同基模型在某一个样本上的信心差别。你想想,如果两个基模型都预测某个样本为正类,但一个给出0.99,一个给出0.6,信任度完全不一样,硬标签却把它们看成一样的输入,这信息损失太可惜了。

不过,直接用预测概率也存在一个陷阱:很多模型的概率输出并没有经过良好校准。比如SVM在小数据集上输出的概率往往“过度自信”,树模型在极端情况下也可能给出偏差概率。遇到这种情况,我通常会对基模型的概率输出做Platt缩放或等距回归校准,再把校准后的概率喂给元学习器。这个细节在Blending实战中特别容易被忽略,但它对元特征的质量影响其实很大。

2.3 第二层的输入:为什么元特征不止是“并排拼接”

构建元特征的时候,最常见的方式是把各基模型在验证集上的预测概率横向拼接,形成矩阵。这个矩阵就是元学习器的输入特征。但这里有一个值得讨论的问题:要不要把原始特征也拼进去。

我曾经在一个项目里试着把部分原始特征也加入元特征矩阵,结果效果反而变差。原因是元学习器直接依赖原始特征后,相当于绕过第一层,整个Blending退化成了“一个普通模型+几个辅助特征”,没有起到融合的作用。不过这也不能一概而论。当原始特征数量不大、且和预测目标关系非常强烈时,把少量原始特征加进去,有时确实能让元学习器捕捉到基模型遗漏的模式。这个需要做实验来控制变量,不建议无脑跟风。

另一个关键点是,元学习器的目标值始终是原始标签,而不是基模型的预测。换句话说,元学习器的训练目标不是“让预测结果等于基模型预测值”,而是“给定多个基模型的预测概率,如何去组合才能更接近真实标签”。理解了这个,你就知道为什么元学习器要足够简单——它要做的事情是组合,不是重新建模。

3. 手把手搭建一个Blending流程:数据划分、基学习器与元学习器选择

3.1 一个可以直接复现的骨架:从数据准备到分层划分

为了把Blending讲透,我准备用一个模拟二分类数据来完整演示整个流程。代码基于Python和scikit-learn,不追求极致的精度,重点是把数据结构梳理清楚。

import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import GradientBoostingClassifier from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline from sklearn.metrics import roc_auc_score # 生成模拟二分类数据 X, y = make_classification( n_samples=6000, n_features=20, n_informative=12, n_redundant=4, random_state=42 ) # 第一步:先切出测试集,保证后续划分完全不碰测试集 X_train_val, X_test, y_train_val, y_test = train_test_split( X, y, test_size=0.2, stratify=y, random_state=42 ) # 第二步:再切出Blending验证集(Holdout集) X_train, X_blend, y_train, y_blend = train_test_split( X_train_val, y_train_val, test_size=0.15, stratify=y_train_val, random_state=42 ) print("训练集大小:", X_train.shape) print("验证集大小:", X_blend.shape) print("测试集大小:", X_test.shape)

这段代码里有两个容易忽略的点。第一个是“先切测试集,再切验证集”的顺序,我见过有人把验证集和测试集混在一起切,最后测试集信息被用于元特征构建,评估结果虚高得离谱。第二个是两次划分都用了stratify参数做分层采样,目的是让训练集、验证集、测试集三个集合里的正负样本比例保持一致,避免某个集合里正样本比例偏差导致评估失真。

3.2 基学习器的选择逻辑:要差异,不要个个顶尖

基学习器的选择是Blending里最值得花心思的环节。我的核心选择原则是:横向覆盖不同类型的算法,而不是堆三个同质化的强模型。比如随机森林、逻辑回归、梯度提升树,这三种算法对特征空间的刻画方式完全不同,预测结果的相关性较低,元学习器从中能组合出的有效信息更多。

# 定义三个基学习器:随机森林、逻辑回归、梯度提升树 base_models = { "rf": RandomForestClassifier(n_estimators=300, max_depth=8, random_state=42), "lr": make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)), "gbdt": GradientBoostingClassifier(n_estimators=200, max_depth=3, random_state=42), } # 第一层:在训练集上训练基模型,对验证集做概率预测 blend_features = np.zeros((X_blend.shape[0], len(base_models))) for i, (name, model) in enumerate(base_models.items()): model.fit(X_train, y_train) y_pred = model.predict_proba(X_blend)[:, 1] blend_features[:, i] = y_pred auc = roc_auc_score(y_blend, y_pred) print(f"{name} 验证集AUC:{auc:.4f}")

注意逻辑回归需要标准化,所以要放进Pipeline里;树模型不需要标准化,直接训练即可。每个基模型在验证集上可以单独算一个AUC,这个数值不代表Blending的最终效果,但它能帮你初步判断哪个基模型在拖后腿。如果某个基模型的AUC明显低于其他模型,而且不是由于模型本身太弱,而是数据适配问题,那就要考虑替换成更合适的算法。

3.3 元学习器:为什么我几乎总是先用逻辑回归

元学习器的选择上,我的默认方案是逻辑回归,而不是直接上另一个树模型。这个选择背后有几个非常实际的考量:元特征数量通常很少,大概在三个到十几个之间,特征维度低,逻辑回归的表达能力足够;逻辑回归自带可解释性,训练完之后你可以直接看到每个基模型对应的权重,知道谁在最终决策里发挥的作用更大;逻辑回归配合L2正则化,可以有效防止元学习器在元样本量不多的情况下过拟合。

元样本量非常充足时,比如验证集有十万行以上,我偶尔也会尝试把GradientBoosting作为元学习器,有时确实能挖掘出一些非线性组合关系。但代价是必须严格控制树的数量和深度,否则元学习器过拟合的速度比你想象中快得多。我的经验是:先用逻辑回归打底,跑通流程,再按需探索更复杂的元模型,不要在第一步就直接上重型武器。

# 第二层:用验证集上的预测结果训练元学习器 meta_model = LogisticRegression(max_iter=1000) meta_model.fit(blend_features, y_blend) # 对测试集进行完整的Blending预测 test_features = np.zeros((X_test.shape[0], len(base_models))) for i, (name, model) in enumerate(base_models.items()): test_features[:, i] = model.predict_proba(X_test)[:, 1] final_pred = meta_model.predict_proba(test_features)[:, 1] print(f"Blending模型测试集AUC:{roc_auc_score(y_test, final_pred):.4f}") # 查看元学习器学到的权重 print("各基模型权重:", meta_model.coef_[0].round(4))

这里有个动作我特意放在了最后:对测试集的预测,是在元学习器训练完之后才发生的。整个过程就像一个流水线,每一层的数据来源都不能越界。测试集从头到尾只在最后被使用一次,这是Blending能保持评估结果可信的根基。

4. 我踩过的五个坑:数据泄露、过拟合与元特征问题

4.1 数据泄露的第一个藏身处:基模型看到了验证集

我最早犯的一个错误,是在做交叉验证调参时把训练集和验证集合在一起训练了基准模型,然后直接复用那个模型去预测验证集。这样得到的验证集预测结果自然“好得离谱”,元学习器也跟着出现虚高,等到上测试集时,分数立刻缩水。后来我养成了一个习惯:在Blending代码里,基模型的fit只能出现在训练集上,验证集只允许出现在predict_proba的括号里。一旦发现某一行代码对验证集调用了fit,基本可以判定为泄露。

要根治这类问题,最好从变量名上把人锁死。始终使用X_train和X_blend这两个截然不同的变量名,不要在中途重新赋值。项目代码一旦长起来,很容易在某个角落不小心把两者合并,这种低级错误往往比算法问题更隐蔽,也更致命。

4.2 元学习器太复杂:在小验证集上反复过拟合

Blending的验证集,实际上就是元学习器的全部训练数据。如果验证集只有两三千行,而元学习器用了一个深层的梯度提升树,或者喂进去几十个原始特征,那么几乎必然过拟合。元学习器的职责是找出基模型之间的关系,而不是重新学习原始数据里的模式。

我在一个实际项目里,验证集只有5000行,试过用深度较大的GBDT当元学习器,线下AUC做到了很高的水平,但换到验证集之外的样本上表现平平。换成逻辑回归加L2正则后,线下分数略降,但稳定性明显提升。后来我总结出一条经验:Blending里的第二层模型,默认往简单了选,除非你的验证集足够大。

4.3 三个基模型都是同一个算法:相关性过高让融合失效

基模型之间的相关性,直接决定了Blending的上限。如果三个基模型都是决策树,只是随机种子不同、特征子集不同,那它们的错误模式大概率是重合的。元学习器再聪明,也没法从高度相关的错误里学出什么有效结论。这种感觉就像开会时叫来三个性格一模一样的同事,聊了半天还是同一个观点。

更合理的搭配是跨算法族的组合。比如一棵树模型、一个线性模型、一个朴素贝叶斯,三种视角完全不同。同一算法族内部也可以制造差异,比如用不同的特征预处理、不同的采样策略或不同的超参数,让模型从不同侧面看数据。差异越大,融合收益通常越高,这是Blending里最值得投入时间的方向。

4.4 验证集比例:切太多和切太少各有什么后果

验证集比例对Blending效果的影响很微妙。占比过大时,训练集数据不足,基模型本身训练不充分,整体精度被打下去;占比过小时,元学习器训练样本太少,学出的组合权重很不稳定,换个随机种子结果就变了。如果验证集只有5%,可能只有几百个正样本,逻辑回归想学出可靠权重都很困难。

我建议在数据量中等的情况下用15%做验证集;数据量非常庞大时,可以适当降到10%。此外还要持续观察验证集和训练集的效果差距。如果基模型在验证集上的表现明显低于训练集,说明划分可能有问题,这时候优先排查划分是否均衡,而不是盲目调整元模型参数。

4.5 概率还是标签:一个影响精度的内卷选项

前面提到过,基模型要输出概率而不是硬标签。但有一个细节值得再展开:在某些场景里,树模型的概率输出分布可能会比较极端,大量样本集中在0.9以上和0.1以下,元学习器看到的输入几乎像是在读二值信号。这时我建议做一次概率校准,让输出分布更平滑。

尤其是当类别严重不平衡时,使用概率比硬标签更重要。硬标签会丢失“模型对该样本有多大把握”的信息,而元学习器恰恰需要这种信息来判断不同模型在少数类样本上的可信度。这一点在二分类和多分类问题里都适用,属于Blending中性价比极高的优化细节。

5. Blending和Stacking的差异与选型思路

5.1 一张表看懂两者核心差异

很多人搞不清Blending和完整Stacking的界限,我把它们的关键差异整理成一张表,这样你在选型时可以一目了然:

对比维度Blending(本文重点)Stacking
第一层验证数据生成一次性Holdout划分K折交叉验证
对基模型的预测次数每模型1次每模型K次
元特征训练样本量验证集大小接近全量训练集
过拟合风险较低中等偏高,需防泄露
训练时间快慢(K倍预测时间)
实现复杂度低中高,K折逻辑要写对
适用场景快速验证、数据量中等竞赛冲榜、数据量大

这里要注意,Stacking虽然用K折把训练集全部利用了起来,看起来信息量更足,但也引入了更复杂的数据泄露控制和过拟合风险。如果实现不当,Stacking很容易出现“线下分数高、线上翻车”的经典问题。Blending在稳定性和可解释性上,明显更有优势。

5.2 什么情况下必须上Stacking

当你手里的训练数据量非常充足,且把验证集压到很小比例时会觉得是一种浪费,此时可以考虑上Stacking。Stacking的核心价值在于:它通过交叉验证为每个基模型“换着样本”生成预测,让训练集的每一行数据都有机会成为元特征的一行。它的第一层生成方式,本质上是把整份训练集都利用起来了,而不是像Blending那样只利用一部分。

如果目标就是要冲击精度上限,也愿意投入时间调试,Stacking值得尝试。但我要提醒一句:它不是万能药。我见过不少团队为了用Stacking而用Stacking,结果K折的种子没固定、某一折数据被污染,效果反而不如老老实实做Blending。任何集成方案的前提,都是先把单模型和Blending跑到位。

5.3 长期实践下来我的选型习惯

现在我面对一个分类或回归任务的融合需求时,第一反应不是直接跳进Stacking,而是先跑一个Blending基线。它能用最小的代码量告诉我:模型融合这条路线到底有没有戏。如果Blending的收益都很有限,那么换Stacking大概率也不会有奇迹,因为元学习器能做的提升,本质上被基模型的质量和信息量锁死了。

选型习惯可以归纳成一句话:数据量大到可以舒服地拿出两万行以上做验证集,且你有心思精细调K折,就上Stacking;数据量中等、时间有限、或者只想快速验证一个想法,优先Blending。一件事情的价值从来不在于“谁更高级”,而在于“在什么条件下谁更合适”。

5.4 必要的几个Blending变体

除了标准Blending,实务中我还常用几个变体。一个是多层Blending,在第一层元学习器之上再叠一层元模型,但一般不超过三层,再多就纯属自嗨了。另一个是把加权平均和Blending结合,先用网格搜索找到基模型的最优权重,再把顶尖权重附近的组合交给元学习器去微调。还有一个思路是改变元特征内容,除了基模型概率,额外加入它们的排序值或置信区间宽度,让元学习器有更多维度的信号。

这些变体的本质都在“信息完整性”和“过拟合风险”之间找平衡。每多一个变体,就多一个过拟合入口。所以我会给每个变体明确一个任务定位,比如“加入排序值是为了让小概率差异也能被感知”“加一层元模型是为了捕捉基模型间的非线性关系”。没有清晰定位的改动,尽量不要加到Blending链路里。

我在很多项目里发现,Blending的价值不只是精度提升,它给我提供了一个看问题的方式:当你把多个模型放在一起,并且让一个足够简单的模型去“指挥”它们时,你会清楚地看到哪些模型在哪些样本上真正靠谱。这种视角比单纯追求一个高分有意思得多。如果你正卡在单模型的天花板上,不妨先放下复杂方案,用一段Blending代码把几个差异化的模型串起来,观察它们是如何互相补位的,你会很快感受到这个算法的妙处。

相关新闻

C# WebSocket消息收发封装实战:帧格式、掩码与分片解析

C# WebSocket消息收发封装实战:帧格式、掩码与分片解析

写这个系列写到第三篇了。第一篇处理了TCP监听和Accept循环,第二篇完成了HTTP Upgrade握手,到这一步客户端和服务器之间已经建立起了真正的WebSocket连接。接下来面对的问题很直接:怎么把消息干净地收进来、发出去,并且不让上层业…

2026/10/20 5:23:05 阅读更多 →
数据链路层核心原理:MAC地址、以太网帧与交换机转发机制解析

数据链路层核心原理:MAC地址、以太网帧与交换机转发机制解析

十年前我第一次在模拟器里敲下 show mac address-table,看着那几行 MAC 和端口映射,并不觉得数据链路层有什么特别。直到后来排障时发现,很多网络“通了却不对”的问题,根源都藏在这一层。数据链路层是连接物理传输与网络逻辑之间…

2026/10/20 5:22:05 阅读更多 →
信呼OA v1.9.1部署与流程实战:中小团队生产级协同底座

信呼OA v1.9.1部署与流程实战:中小团队生产级协同底座

简介:信呼协同办公OA系统v1.9.1是一款面向中小企业及IT运维/开发人员的开源办公平台解决方案,旨在解决多终端协作、流程标准化与系统可定制化等核心管理需求。资源包共1256个文件,主体为606个PHP后端逻辑文件、231个GIF/79个PNG/3个JPG等前端…

2026/10/20 5:22:05 阅读更多 →

最新新闻

CRC计算源码选型指南:参数模型、查表法与逐位法实现及避坑实践

CRC计算源码选型指南:参数模型、查表法与逐位法实现及避坑实践

简介:这份循环冗余校验码(CRC)计算源代码合集面向嵌入式开发、通信协议实现与数据校验方向的学习者,帮助理解并落地CRC-8、CRC-16、CRC-32等常见算法的软件实现与硬件映射思路。压缩包共1220个文件,约6.65MB&#xff0…

2026/10/20 6:04:24 阅读更多 →
E22-400T22D LoRa模块实战:配置、距离测试与避坑指南

E22-400T22D LoRa模块实战:配置、距离测试与避坑指南

做物联网设备这行,无线通信方案永远是绕不开的一道坎。这篇要聊的是一款非常经典的E22-400T22D LoRa模块,很多朋友在户外采集、农业监测、机房环境监控这类项目里都会遇到它。市面上那么多无线模块,为什么LoRa方案能站住脚,这款22…

2026/10/20 6:04:24 阅读更多 →
AI帮不了你洗澡:从具身认知到智能浴室的真实边界

AI帮不了你洗澡:从具身认知到智能浴室的真实边界

前几天晚上泡澡,我盯着天花板突发奇想,拿起手机对某AI助手说了一句:“既然你这么聪明,能不能帮我把澡洗了?”屏幕那头沉默了两秒,然后弹出一篇礼貌又工整的《安全洗澡指南》,从水温控制到防滑垫…

2026/10/20 6:04:24 阅读更多 →
2026年AI玩具十大榜单:从智能交互到系统化成长

2026年AI玩具十大榜单:从智能交互到系统化成长

2026年,随便点开一个电商平台,搜索“儿童机器人”“智能玩具”,结果能翻出几十页。每张详情页都在讲“AI大模型”“智能对话”“个性化成长”,可真正买回家,大多数产品第三天就变成了吃灰的塑料摆件。这份榜单的由来&a…

2026/10/20 6:04:24 阅读更多 →
经典ASP作业提交系统源码解析:环境搭建、核心模块与避坑指南

经典ASP作业提交系统源码解析:环境搭建、核心模块与避坑指南

简介:这份资源是面向高校学生与Web开发初学者的ASP网上作业提交系统课程设计资料,围绕网络教育平台中作业提交与自适应学习导航的实际需求展开。内容以ASP结合ACCESS数据库为核心,涵盖模块导航、知识点检索导航、知识点关联导航与帮助导航等设…

2026/10/20 6:04:24 阅读更多 →
从单体到弹性扩展:高并发架构改造的完整实战复盘

从单体到弹性扩展:高并发架构改造的完整实战复盘

1. 项目背景与架构需求拆解1.1 最初的系统,和它一步步暴露出的问题先说下背景。这个代号为"arch-system"的架构改造项目,源于团队负责的一条核心业务链路。最初的系统是典型的三层单体:一个应用服务承载所有接口,MySQL …

2026/10/20 6:03:23 阅读更多 →

日新闻

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实现详解

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →