聚类算法选型实战:MedoidShift与QuickShift的适用场景与对比
简介面向机器学习初学者与研究者的聚类算法实战资源聚焦MedoidShift与QuickShift两种无监督聚类方法的原理与代码实现。MedoidShift算法迭代寻找各簇实际存在的代表点medoid相比质心更稳健能处理不规则簇形QuickShift借助树形结构快速查找密度邻近点在高维场景下计算效率突出两种方法各有独特适用场景。压缩包共5个文件约429KB包含两个Python算法脚本、一个可运行的演示脚本、一份README说明文档以及一张聚类效果对比图结构简洁便于对照阅读。已有319人学习下载。阅读源码与运行演示可直观观察两种算法在不同数据集上的聚类速度、簇形适应能力以及对噪声和异常值的处理差异结合对比图与说明还能进一步理解算法参数对聚类结果的影响从而在实际项目中根据数据特点选择合适的聚类方法提升数据挖掘与分析能力。1. 聚类算法选型老手先说结论MedoidShift 和 QuickShift 是两条路聚类算法这个坑我踩得不算少。早几年在某跨平台系统的用户分群项目里导师丢给我一个压缩包里面有 MedoidShift 和 QuickShift 两套实现让我挑一个当主聚类算法。我当时的第一反应是QuickShift 名字里带个 Quick估计就是 MedoidShift 的加速版跑个对比图意思一下就能交差。结果两个算法在同样的数据上跑完我盯着 clusters_comparison.png 看了半天发现自己完全想岔了——这俩根本不是「谁快谁慢」的关系而是解决问题的思路压根不同。MedoidShift 在找的是「数据里真实存在的一个代表点」QuickShift 在找的是「哪个区域密度够高、往哪儿靠拢」前者重稳定性与可解释后者重速度与高维扩展。这篇博文就把我实际用这份代码包跑数据、调参数、踩坑的过程写透两种算法分别适合什么数据形状、样本量和维度对比图怎么看参数怎么调以及哪些地方容易翻车。目标是让拿到这份资源的人不用再像我当初一样走弯路直接用一套可复现的对比流程给自己的数据一个明确的选型结论。无论你是刚接触无监督学习的新手还是已经在业务里被聚类结果折磨过的熟手这篇文章都能给你一个能照着做的判断框架。2. 两个算法到底在算什么从思想差异看适用边界要选型先得弄明白两种算法各自在优化什么。很多人拿到代码包第一件事就是跑 demo跑完看两张图觉得「差不多嘛」然后带着错误的理解去套自己的业务数据最后得到一堆没法解释的簇。我建议先耐住性子把这章看完再动手。2.1 MedoidShift中心点必须是数据里真实存在的那一个MedoidShift 的核心思想一句话就能说清每个簇用一个 medoid 来代表而这个 medoid 必须是数据集中实际存在的一个样本点不是算出来的虚拟中心。这一点和 K-Means 有本质区别K-Means 的质心是均值可能是数据空间里一个哪里都不挨着的坐标点而 MedoidShift 的 medoid 一定能在原始数据里找到对应的一行。算法的迭代过程是这样的先给每个簇一个初始的 medoid 候选然后逐个数据点计算它和附近邻居的距离看这个点是不是比当前 medoid 更「居中」——更居中是指它到同簇其他点的距离之和更小。如果是就把 medoid 换成这个点然后继续迭代直到所有簇的 medoid 不再变化。这个过程的工程含义是每次微调都在真实样本之间做选择而不是在连续空间里做计算所以它对异常值的承受能力比 K-Means 强很多。一个离群点如果被选成候选它很难同时靠近簇里的大多数点迭代几次就会被换掉反过来质心法会被离群点直接拉偏。从实际应用角度看medoid 这个性质带来的最大好处是可解释性。在用户分群、客户画像这类场景里业务方问「你这个簇代表什么人」K-Means 只能给一组均值而 MedoidShift 可以指着一个真实样本说「这个用户就是这个簇最典型的代表」。我在做某图像处理 Demo 的分类后处理时就靠这个特性把聚类结果直接转成可供标注参考的典型样本省掉了大量人工核对工作。如果你的业务下游需要解释、需要溯源MedoidShift 天然占优。2.2 QuickShift密度敏感 树形结构快在哪儿QuickShift 的思路和 MedoidShift 完全不同它是密度敏感聚类。它的出发点是数据点在空间里的分布密度本身就是一种聚类信号高密度区域和低密度区域之间的边界就是簇的边界。算法不是去迭代找代表点而是通过构建树形结构快速找出每个点应该归属到哪个密度中心。具体做法一般分为两步。第一步对每个数据点找到它最近的密度比它高的邻居并把这条关系连起来如果一个点在给定距离阈值内找不到密度更高的邻居那它自己就是一个局部密度峰值可以当作候选的簇中心。第二步从每个点出发沿着这个「密度上升」的链条向上追溯直到到达某个密度峰值或超出预设的最大距离最终到达的那个峰值点就决定这个点属于哪个簇。因为邻居查找通过树形结构预先建立了索引整个过程不需要像层次聚类那样维护全量的距离矩阵所以计算复杂度和内存占用都显著下降。这里有一个容易误解的点QuickShift 的「树」不是用来做层次聚类合并的而是用来快速回答「谁是离我最近的密度更高点」这个查询的。树的深度和分支状态直接影响算法能跑多快也直接影响聚类结果——如果树建得不好本来该连在一起的密集点会被拆到两个分支里去。高维数据下只要建树阶段做了合理的索引比如按维度切分空间它的效率优势会非常明显。我在实验里用几百个特征、几万条样本的数据跑过QuickShift 的运行时间基本在可接受范围内而 MedoidShift 在同规模数据上已经明显吃力。2.3 关键区别对「形状」「维度」「样本量」的反应完全不同这部分是我自己吃了亏才总结出来的。只看摘要描述很容易以为两个算法只是实现方式不同其实它们对数据特性的敏感点完全不一样。先看簇形状。MedoidShift 因为是基于样本代表点做迭代它对簇的形状没有很强的先验假设只要同一个簇内的点到 medoid 的距离和能持续优化就行所以处理不规则形状、大小差异很大的簇时表现得比较稳。QuickShift 则依赖密度关系如果两个簇密度接近、中间又没有明显的低谷它很容易把两个簇合并成一个反过来簇内部密度不均匀也可能被拆成好几块。再看样本量和维度MedoidShift 每次迭代都要重新计算点到 medoid 的距离样本量上来以后迭代成本是累加的高维下距离计算本身就变得更不可靠而 QuickShift 的建树过程对维度的容忍度更高样本量大的时候反而能体现出索引带来的加速效果。最后是噪声处理MedoidShift 的鲁棒性来自 medoid 的真实样本属性QuickShift 则需要你在预处理阶段就把噪声滤掉否则密度估计会被离群点干扰形成一堆假的密度峰。下面这个表是我自己做的选型参照比 README 里的描述更直白对比维度MedoidShiftQuickShift判断依据簇代表实际存在的样本medoid密度峰值点需要解释典型样本就选 MedoidShift对不规则簇形状适应性较好依赖密度低谷清晰簇形状差异大、分布不规整时偏向 MedoidShift对高维数据距离计算易失真吃力建树后可保持效率高维特征优先考虑 QuickShift对异常值medoid 机制天然鲁棒需要预处理滤噪数据脏、不想做太多清洗选 MedoidShift可解释性强能溯源到具体样本中给出的是簇标签下游需要解释选 MedoidShift运行效率随样本量上升明显变慢树形结构下扩展性好样本量大选 QuickShift记住这个表的核心结论这不是一个「哪个算法更强」的问题而是一个「你的数据更像哪种分布」的问题。下一章我讲怎么把代码包跑起来把这两个算法的行为看个真切。3. 这份代码包怎么用文件结构与跑通流程知道原理之后下一步是把代码包跑起来。这个压缩包的结构很干净五个文件没有多余的东西。我按自己第一次拿到时的使用顺序来说这样你能少走观望的弯路。3.1 压缩包里的东西是什么五个文件的职责先做一个文件清单方便你在动手前对每个文件的作用心里有数文件名职责典型使用方式medoid_shift_.pyMedoidShift 算法实现导入聚类函数或在命令行单独运行quick_shift_.pyQuickShift 算法实现导入聚类函数或在命令行单独运行demo_medoid_quick.py演示脚本加载数据、调用两个算法、可视化直接运行生成对比图clusters_comparison.png两个算法在同一数据集上的结果对比图打开看图辅助理解差异README.md运行说明与参数解释先读对照 demo 理解变量含义我第一次拿到时习惯性先看 README再打开 demo 脚本。这里有个经验不要只靠 README 的字面描述理解算法最好把 demo 里的数据生成部分改掉替换成你自己的数据跑一遍观察聚类结果的变化。README 写的是代码包作者理解的运行方式你的数据分布特征才是决定算法表现的关键变量。3.2 从 demo 入手数据生成 训练 可视化一次性看清demo_medoid_quick.py 这个脚本的价值在于它完整走了一遍「数据准备 → 算法调用 → 结果可视化」的闭环。常见的实现结构是这样先用某种方式生成或加载一份带有明显簇结构的数据然后分别调用 medoid_shift_.py 和 quick_shift_.py 里的聚类函数最后把两个聚类结果画在同一张画布上保存为 clusters_comparison.png。运行方式一般是在命令行直接执行python demo_medoid_quick.py如果依赖库齐全主要是 numpy、scipy、matplotlib跑完会在当前目录生成或更新 clusters_comparison.png。打开这张图你首先应该看的是两个算法在同样的数据上簇的边界划分是否一致、哪些区域的点被分到了不同的簇、有没有出现「一个簇被切碎」或「两个簇被粘连」的情况。这一步能让你快速建立对两个算法实际行为的直觉。我强烈建议你做的第一件事情不是调参而是改数据。把 demo 里的数据生成部分换成三种数据集各跑一遍一种是生成几个球形簇一种是生成月牙形或环形的不规则簇还有一种是在规则簇里混入一些随机噪声点。同一套代码三种数据你会在三张对比图里看到两个算法的表现差异被放大这比读十遍原理都管用。3.3 参数与场景对照调参前先弄清自己在哪一个任务两个算法都有关键参数但参数的作用逻辑完全不同。MedoidShift 的核心参数是迭代相关的设置比如最大迭代次数和 medoid 更新的容忍度迭代次数设太小可能没收敛就停了容忍度设太大则 medoid 可能在两个距离差不多的样本之间来回跳。QuickShift 的核心参数则是距离阈值和密度判定相关的设置距离阈值决定了每个点能看多远阈值过小会导致簇被切碎阈值过大会把不同密度的簇强行粘在一起。我把两者常见的参数问题归成一张表算法常见关键参数调大时的效果调小时的后果MedoidShift最大迭代次数更可能收敛但耗时增加聚类未稳定就停止结果随机MedoidShiftmedoid 更新容忍度提前停止簇边界粗糙medoid 反复横跳不收敛QuickShift最大距离阈值簇容易被合并边界模糊每个点自成一群碎片化严重QuickShift密度估计相关带宽平滑噪声但可能忽略小簇对噪声敏感出现假簇调参的顺序我一般这样走先用 demo 的默认参数跑通然后切换数据类型观察哪个参数动了会引发明显变化最后固定住「对结果影响最大」的那个参数去微调。很多新手喜欢一次同时动好几个参数结果翻车了根本不知道是哪个参数造成的这是调参的大忌。参数调来调去效果不对的时候记得回到对比图上看是边界问题、碎片问题还是全图结构问题对症下药比盲目网格搜索有效得多。4. 怎么比才不踩坑四个维度给出选型结论进入这一章你已经对两个算法的行为和代码包的使用流程有了基本掌握。接下来是核心的选型比较。我不会用「各有优缺点」这种和稀泥的话敷衍你而是给你一套我自己用了很久的四维度比较框架。每个维度讲清楚判断依据最后给出明确的结论。4.1 维度一簇形状与数据分布第一个要看的维度是你的数据里簇长什么样。如果你的数据簇形状接近球形、大小比较均匀两个算法都不会出大问题但如果簇是不规则形状比如月牙形、环形、长条形或者簇与簇之间的密度差异很大那么选择就开始分化了。MedoidShift 因为是基于真实样本迭代它会尽量让每个点归属于距离上更近的 medoid对形状本身没有强假设所以这类不规则数据它扛得住。QuickShift 就比较挑数据它极度依赖密度低谷来划界如果两个不规则簇挤在一起、中间没有明确的低密度区域它基本无法把边界正确找出来。我当时的实验里用了一组模拟的环形簇数据QuickShift 给出的结果是把内环和外环切成了四五个碎片而 MedoidShift 还能保持一个完整环。反过来在几组密度对比非常明显的球形簇数据上QuickShift 的划分干净利落MedoidShift 反而是边缘点归属有些犹豫。所以这维度的结论是数据分布接近「密度分明」就选 QuickShift数据形状「自由奔放」就选 MedoidShift。4.2 维度二样本量与维度第二个维度看数据的规模和特征数。这个维度直接对应运行效率也是 QuickShift 名字里那个 Quick 的真正来源。样本量几千、特征十几个这种小规模数据两个算法跑起来速度差不多差异可以忽略但样本量上了几万、特征上了几十上百差距立刻拉开。QuickShift 的树形结构在找邻居时有索引优势它不需要每次迭代都全量计算所有点两两之间的距离而 MedoidShift 在迭代过程中反复涉及距离重算样本量一大耗时是指数级往上走的。我在某模拟项目里测过一份五万样本、一百多维的数据MedoidShift 跑了十几分钟还没完全收敛QuickShift 只用了几十秒就出结果。但要注意高维数据还有一层隐患维度越高距离越稀疏任何基于距离的聚类都可能失真。这个维度上 QuickShift 只是「比 MedoidShift 能扛」不代表高维下无脑选它。如果你的特征维度极高先做降维或特征选择再回来考虑聚类算法否则两个算法都会给你不可靠的结果。结论是样本量大、维度高优先选择 QuickShift但前置要做特征工程。4.3 维度三噪声和异常值第三个维度看数据的干净程度。真实业务数据几乎没有干净的所以这个维度在实战里权重很高。MedoidShift 的鲁棒性是结构性的medoid 必须是真实样本而离群点通常在空间上离簇内多数样本很远它在迭代换 medoid 的过程中很难被选中即使被选中也会很快被换掉所以它对噪声的抵抗力来自算法本身的设计。QuickShift 不是这样它靠密度来定簇中心一个异常值点在密度估计中可能成为一个假的密度峰把附近本来就稀疏的点全部吸过去形成一个假簇这是密度聚类算法的通病。我在跑含有 5% 随机噪声的数据时QuickShift 的结果图里明显多出了两个只有三五个点的小簇而 MedoidShift 的簇结构基本没受干扰。这里要强调一个实操结论如果你的数据清洗成本高、不想花太多时间做预处理MedoidShift 是更省心的选择如果你选了 QuickShift务必在预处理阶段做噪声过滤比如用距离阈值剔除离群点否则结果图会让你头疼。4.4 维度四可解释性与后续使用第四个维度经常被忽略但在我实际的项目经验里它往往决定了算法能不能被业务接受。可解释性说的是聚类完成后你能不能向别人说清楚每个簇是什么、为什么这些样本被归在一起。MedoidShift 在这方面的优势是天然的因为每个簇中心是一个真实存在的样本你直接把这个样本的特征列出来业务方一看就懂。我在做某跨平台系统的用户画像时需要把聚类结果交给运营团队制定策略MedoidShift 的典型样本直接当成了各用户群的「形象代言人」沟通成本低到几乎为零。QuickShift 输出的是一堆簇标签要解释每个簇还需要额外做中心点提取、特征分布统计等工作等于多了一层后处理。如果你的业务偏研究性质只看聚类结构本身QuickShift 没有问题如果你的聚类结果要拿去驱动决策我建议认真考虑 MedoidShift 的可解释优势。总结起来这个维度的结论是要讲故事、要落地选 MedoidShift只做分析、不直接对接业务选 QuickShift。4.5 汇总对比表与选型结论把四个维度汇总成一张决策表这是我每次做聚类算法选型都会填一次的模板评估维度数据情况推荐方向簇形状不规则、大小不一MedoidShift簇形状球形、密度低谷清晰QuickShift样本量与维度样本大、维度高QuickShift噪声水平噪声多、预处理成本高MedoidShift可解释性下游要解释簇含义MedoidShift运行效率敏感对耗时敏感QuickShift最终结论很直接如果你的数据是「常规密度分布、样本量大、只要标签」——选 QuickShift如果你的数据是「形状不规则、有一定噪声、需要讲清楚每个簇」——选 MedoidShift。两个条件都占就分别跑一次用对比图来看结果不要凭感觉猜。这个结论不是拍脑袋而是基于两个算法内部的优化目标和数据分布特性之间的关系。你在自己的数据上跑完大概率会发现最终效果和我说的方向一致。5. 常见问题与避坑跑聚类代码时最容易翻车的五个点这一章分享我在实际使用这份代码包时遇到的真实问题全部按「现象 → 原因 → 解决」的结构写。这些问题在 demo 数据上不容易触发一旦换成真实业务数据就会集中冒出来。提前看完能省下大把排查时间。5.1 阈值过小导致碎片化簇现象QuickShift 跑出来的结果图里本该是一个完整的簇被切成了几十个小碎块每个碎块只有几个点。我第一次在模拟数据上跑没当回事因为 demo 数据密度设置合理阈值默认值刚好合适换成自己的数据后立刻暴露。原因QuickShift 的最大距离阈值设得太小导致每个数据点在找密度更高的邻居时能看到的范围太窄孤立的小区域各自成了局部密度峰于是每个小区域都被当成了一个独立的簇。解决先把阈值加大一个数量级观察簇的数量是不是明显下降然后用二分法找到「簇数量稳定」的临界值。我在实践里把这个参数和数据的标准差关联起来以标准差为基准缩放比凭空试数字稳定得多。5.2 高维数据下 QuickShift 反而变慢现象在一份几十个特征的数据上QuickShift 比 MedoidShift 还慢和「Quick」的名字严重不符。我一度怀疑是这个代码实现有问题后来排查才发现数据本身的问题。原因高维数据下树形结构的索引效果衰减严重因为各个维度上的距离差异被拉平邻居查找的剪枝效率变低再加上算法在构建树时对每个维度都要做判断维度越高建树本身就越贵。解决高维场景先做降维。我在这份数据上先跑了一遍 PCA 把特征压缩到十维左右再喂给 QuickShift速度立刻回到正常水平。另外也可以用特征选择剔除明显无关的特征列比单纯靠算法硬扛更靠谱。5.3 MedoidShift 迭代不收敛现象MedoidShift 运行时间超出预期加打印后发现 medoid 在几个候选样本之间来回横跳每次迭代结果都不一样最终聚类结果不稳定。这个问题的出现让当时正准备下班的我心态直接爆炸。原因medoid 更新的容忍度设置过严算法在两个距离差不多的真实样本之间反复比较每一次都认为「再换一个可能更好」但实际上这两个候选点到簇内其他点的距离总和差别极小继续迭代已经没有实际意义纯粹是在用耗时换微不足道的精度。解决把 medoid 更新的停止条件放宽比如设定为「两次迭代 medoid 变化带来的距离和差异小于千分之一就停止」。还可以加入最大迭代次数做熔断保护防止死循环。从那以后我每次用 MedoidShift 都先设好最大迭代次数再跑。5.4 对比图里两个算法标签对不上现象clusters_comparison.png 里左右两张图用色方式不同看起来各分各的很难直接对比哪个簇对应哪个簇。遇到这种情况眼睛是无法直接判断「算法A的第0簇是不是等于算法B的第0簇」的。原因两个算法输出的簇标签序号是各自独立分配的哪个簇叫 0、哪个簇叫 1由算法的内部顺序决定互不对齐所以直接按颜色一一对应去比较得出的结论很可能是错的。解决做对比分析时不要直接看原始标签而是把两个聚类结果做一次标签对齐比如基于簇中心点的距离匹配或者干脆不比较标签只比较边界划分的形状。我后来写了个小脚本自动把两个结果用匈牙利算法做标签配对再重新着色对比图才真正可读。另外还要注意如果数据本身存在几个形状相似的簇标签对齐后依然可能混淆这时候要看簇内占比而不是单纯的颜色。5.5 demo 跑得好好的换真实数据就崩现象这份代码包在 demo 数据上效果完美一换成真实业务数据两个算法的结果都惨不忍睹簇乱成一团。这个问题的普遍程度超出想象我几乎每次和同行交流都会听到类似吐槽。原因demo 数据是人工生成的簇结构清晰、密度均匀、几乎无噪声真实数据往往分布不均匀、特征量纲不同、还带着缺失值和异常点直接把 demo 的默认参数套用就相当于让算法在完全陌生的条件下答题。解决真实数据必须先做标准化让所有特征在同一量纲下参与距离计算然后做缺失值和异常值处理最后才是跑聚类。每做一步都重新看一眼聚类结果的变化多数情况下问题出在数据预处理而不是算法本身。如果你发现标准化之后结果还是乱再考虑是不是特征里存在无关维度删掉它们再来一轮。记住一句话聚类算法只能发现数据里本来就存在的结构预处理做不好算法再高级也救不回来。6. 最后我的教训两种算法各管一个场景先跑 demo 再拍板折腾完 MedoidShift 和 QuickShift 的对比实验之后我最大的教训是聚类选型没有银弹但存在一条高效的决策路径。我现在的习惯是把流程固定成这样四步第一步把数据标准化、清洗干净画出分布图看簇的形状和密度特征第二步用这份代码包里的 demo 脚本作为模板只替换数据部分用默认参数把两个算法各跑一遍得到第一版对比图第三步根据对比图判断是碎片化问题、粘连问题还是噪声干扰问题再针对性地调对应参数第四步用聚类内部指标比如轮廓系数和业务可解释性两个标准给两个算法的最优结果打分分数高者胜出。这套流程走完结论基本靠谱再也不靠拍脑袋决定用哪个算法。如果你在选型时时间有限记住这句最精简的结论QuickShift 适合「大样本、高维度、密度分明」的快速聚类任务MedoidShift 适合「不规则簇、有噪声、需要解释簇含义」的精细化聚类任务。不要试图让一个算法在所有场景里通吃那是不存在的。就我自己而言从那以后我每次做聚类选型都强制先跑一遍 demo 对比脚本再动正式算法这个习惯已经帮我避免了好几次在错误方向上越走越远的灾难。毕竟调参调到后面你会发现聚类里经验比理论更容易踩坑而最稳的路径永远是先让数据把两个算法的真实行为展示给你看。希望这篇基于真实使用经历整理的选型笔记能让你在拿到这份代码包后少走弯路直接把精力投入到真正有价值的数据分析里去。本文还有配套的精品资源点击获取

相关新闻

基于深度学习的驾驶行为检测(玩手机)项目实战:从数据集到实时报警

基于深度学习的驾驶行为检测(玩手机)项目实战:从数据集到实时报警

毕设选“基于深度学习的驾驶行为检测(玩手机)”这个题目的人不少,但能把项目从数据集一路做到可现场演示原型、在答辩时真正跑起来的,其实不多。不是模型本身多难,而是这个课题把数据采集、标注、训练、部署、演示每个环节都压了一遍&#xf…

2026/10/18 9:53:36 阅读更多 →
Python电商评论情感分析实战:从朴素贝叶斯到LSTM的完整流程

Python电商评论情感分析实战:从朴素贝叶斯到LSTM的完整流程

简介:这是一个基于Python的电商买家评论情感分析完整项目,面向计算机、人工智能等专业学生及文本挖掘初学者,可用于课程设计、毕业设计或项目二次开发。资源共1379个文件,以478个Python源码文件为主,配合237个CSV评论数…

2026/10/18 9:53:36 阅读更多 →
AutoWareAuto框架拆解:从模块解耦到数据流的自动驾驶系统入门

AutoWareAuto框架拆解:从模块解耦到数据流的自动驾驶系统入门

能够在一篇文章里把“融合感知、定位、决策规划、控制与预测”这串字讲明白、讲透,是我一直想做的事。不少朋友在后台问我关于AutoWareAuto框架的问题,但大多数人的困惑其实不在某个具体算法上,而在于对整个框架的组织方式没有头绪。这篇文章…

2026/10/18 9:53:36 阅读更多 →

最新新闻

Python目录扫描工具dirsearch:从socket原理到自动化巡检实践

Python目录扫描工具dirsearch:从socket原理到自动化巡检实践

简介:Dirsearch-master 是基于Python开发的目录扫描工具,面向渗透测试人员、安全初学者及Web开发者,用于快速发现网站潜在的敏感目录和隐藏文件。工具支持HTTP、HTTPS与SOCKET等多协议扫描,可自定义字典、多线程并发、递归探测子目…

2026/10/18 12:13:19 阅读更多 →
STM32+LwIP+CLion实现DHCP热插拔稳定联网

STM32+LwIP+CLion实现DHCP热插拔稳定联网

简介:本资源是一套基于STM32F407ZGTx的嵌入式以太网开发完整工程,面向具备HAL库和CMake基础的中级嵌入式开发者,解决STM32在Clion环境下集成LWIP协议栈并实现DHCP动态获取IP及网线热插拔检测的实际工程难题。项目涵盖STM32CubeMX图形化配置&a…

2026/10/18 12:13:19 阅读更多 →
AI知识库+RAG:让技术写作告别断更的实战方法

AI知识库+RAG:让技术写作告别断更的实战方法

你有没有过这种体验:代码写得很顺,但一到写技术文章、做分享总结的时候就反复卡壳,标题改了七八遍,正文只写了一小段,最后只能憋出一句“最近太忙了,下周补上”。我身边写技术博客的开发者,十有…

2026/10/18 12:13:19 阅读更多 →
用AI知识库解决写作断更:RAG语义检索实战指南

用AI知识库解决写作断更:RAG语义检索实战指南

先问一个扎心的问题:你是不是也经历过这种“素材明明攒了一大堆,真到写的时候还是卡住”的瞬间?写技术博客想引用那篇文档,明明看过就是翻不到;想复盘某次线上故障排查,转头忘了当年是怎么定位的&#xff1…

2026/10/18 12:13:19 阅读更多 →
BiLSTM-CRF序列标注原理与调参实战:工单实体抽取全记录

BiLSTM-CRF序列标注原理与调参实战:工单实体抽取全记录

开头先交代背景。几个月前我接了一个文本抽取类的需求,需要从工单数据里把设备名称、故障类型、处理措施这三类实体抽出来。看过一圈方案,最后选了BiLSTM-CRF做序列标注。选它的理由很直接:效果在评测集上够用,部署成本比预训练大…

2026/10/18 12:13:19 阅读更多 →
Agent Infra全解析:从智能体基础设施到工程实践

Agent Infra全解析:从智能体基础设施到工程实践

前几年聊AI,所有人都在盯着模型的参数规模和榜单分数,一个模型发布,刷屏的是几个基准测试的涨点。但从去年下半年开始,我明显感觉到风向变了。身边做产品的朋友,不再张口闭口“换个大模型”,而是开始问一些…

2026/10/18 12:12:18 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →