多类SVDD分类:从单类超球体到多类别决策的完整实践指南

发布时间:2026/10/22 14:24:49
多类SVDD分类:从单类超球体到多类别决策的完整实践指南 1. 从单类描述到多类决策SVDD带给分类任务的另一种视角说起分类算法大家脑子里蹦出来的大概率是逻辑回归、随机森林、支持向量机SVM这些名字。它们做的事情本质上都是同一件事在类别之间找一条分界线。但如果你接触过异常检测、故障诊断或者工业质检这类场景可能会遇到一个很尴尬的情况——某些类别的样本数量极少甚至只有正常样本没有故障样本传统分类器根本训练不起来。这时候就该轮到SVDD支持向量数据描述Support Vector Data Description登场了。SVDD这个算法最初是Tax和Duin在1999年左右提出来的它的思路和传统分类器完全不同。传统分类器的目标是“寻找类别之间的决策边界”而SVDD的目标是“找到一个能包住目标类别样本的最小超球体”。一个是在类别之间划界一个是围绕数据画圈这个差异直接决定了它在很多场景下的不可替代性。那多类分类怎么和SVDD扯上关系这要从SVDD的特性说起。SVDD天然是单类分类器它只回答一个问题“当前样本和我们的正常模型是否一致”。但实际工程里几乎没有只处理单类的情况比如工业设备故障诊断既有正常状态又有多种故障模式比如医疗辅助诊断健康、疑似、确诊至少三个状态。所以把SVDD从单类扩展到多类就成了一个非常实际的需求。本文要聊的核心就是如何基于SVDD实现多类分类原理是什么、坑在哪里、代码怎么写、参数怎么调以及我在实际项目中踩过哪些雷。不管你是正在做异常检测的算法工程师还是对机器学习分类问题有兴趣的研究者看完这篇应该都能建立一套自己的多类SVDD方法论。2. 为什么用SVDD做多类分类判别式与描述式的根本差异2.1 传统SVM和SVDD的底层逻辑对比先搞清楚SVM和SVDD的本质区别这对后面理解多类扩展至关重要。传统SVM做分类时目标是寻找一个最大间隔超平面把正负样本分开。它的假设是类别之间有一个可以线性或非线性分离的边界落在边界这一侧的是A类另一侧是B类。这个思路非常自然也非常强大但它有一个潜在问题——它只关注边界不关注数据在空间中的整体分布。SVDD则是另一种哲学。它假设目标类别的样本在一个超球体内部非目标样本在外部。训练过程中算法会找到一个中心点和一个半径使得大部分目标样本都被包在球里面同时球的体积尽可能小。这个“尽可能小”很重要它保证了模型对目标类别的描述是紧凑的不会把一堆无关区域也圈进来。打个比方。SVM是“在菜园里划分两块地种白菜的区域和种萝卜的区域”SVDD是“给白菜地盖一个尽可能小的温室大棚只要大棚能罩住所有白菜就行”。对于多类场景SVM的思路是在N个类别之间划出N条边界而SVDD的思路是给每个类别各盖一个独立的大棚。这个差异直接带来一个优势当某个类别的样本数量特别少、或者噪声很大时SVM的决策边界会被少数样本牵着走非常不稳定。而SVDD只需要描述这一类别样本的“内聚范围”少样本情况下依然能给出合理的数据描述。2.2 多类SVDD的两种经典扩展策略有了单类SVDD这个基础构件多类扩展其实是一件很自然的事。目前工程上主流做法分两种一类一对多One-vs-Rest一类一对一One-vs-One。一对多策略的思路是有K个类别就训练K个SVDD模型每个模型只负责描述一个类别。比如有三类那就训练三个超球体分别描述A类、B类、C类各自的正常分布范围。预测时把新样本分别丢进三个球里看它在哪个球内。如果在唯一一个球内就归为那个类别如果在多个球内就涉及冲突决策如果不在任何一个球内就判定为未知类别或拒识。一对一策略则是把K个类别两两配对训练C(K,2)个二分类SVDD模型每个模型负责区分某两个类别。预测时类似投票机制每个模型投一票得票最多的类别胜出。从我实际使用的经验来看一对多策略在大多数场景下更实用。原因有四第一K个模型相对于C(K,2)个模型训练成本低很多第二每个模型只对应一个类别解释性更强出问题的时候定位也容易第三天然的拒识能力落在所有球之外是SVDD独有的优势这在故障诊断里非常值钱第四类别增量更新时只需训练新增类别对应的那个球老模型可以不动。当然一对多也有它的弱点。如果类别之间本身重叠程度很高两个球会同时罩住同一片区域此时决策策略就成了关键。后面我会详细展开这部分。2.3 核函数选择SVDD表达能力的上限无论是一对多还是多对一每个单类SVDD模型都必须选择一个核函数。核函数决定了模型把原始数据映射到什么高维空间也就决定了超球体在原始空间中的形状。我在项目里最常用的核函数是高斯核RBF核也就是$$K(x_i, x_j) \exp\left(-\frac{|x_i - x_j|^2}{\sigma^2}\right)$$高斯核的优势在于它是局部的。每个样本只对距离较近的区域产生影响这让她描述出来的超球体边界在原始空间里会呈现非常灵活的形状可以贴合样本的实际分布。相比之下线性核只能产生刚性超球体多项式核虽然灵活度稍高但对参数的敏感度非常大容易剧烈震荡。选择核函数有一条经验法则如果你的数据分布各向异性严重、存在狭长形状的簇选高斯核基本不会错如果你的数据是标准球形分布线性核加上适度加大惩罚系数就可以如果你不确定默认上高斯核然后重点调sigma。3. 多类SVDD的数学原理与模型训练细节3.1 单类SVDD的优化目标——最小包围超球体先复习一下单类SVDD的数学表达因为多类模型的每一个子模型都基于这个优化问题。给定目标类别的训练样本集合我们要找到一个以a为球心、R为半径的超球体目标是让尽可能多的样本落在球内同时球的体积要小。引入松弛变量之后优化问题可以写成$$\min_{R, a, \xi} ; R^2 C \sum_i \xi_i$$$$\text{s.t.} \quad |x_i - a|^2 \leq R^2 \xi_i, \quad \xi_i \geq 0, \quad \forall i$$这里的C是惩罚系数控制着“球内包含所有样本”和“球体包围半径尽可能小”之间的权衡。C越大模型就越倾向于把每个样本都包进去半径自然变大C越小模型允许有一部分样本落在球外换取更紧凑的描述边界。对偶问题求解之后判别函数长这样$$f(x) R^2 - |x - a|^2$$如果f(x) 0表示样本在球内属于该类别f(x) 0表示样本在球外不属于该类别。这一段文字看起来平平无奇但它实际上解释了多类SVDD调试中很多现象的本质。比如“为什么某个类别的球半径特别大把其他类别的样本都包进去了”答案多半是C调得太大导致模型为了严格包住训练集把球吹得过大。再比如“为什么训练集里面明明没有某类样本预测时却被判定进了这个类”原因通常是sigma太小导致超球体被拉成很多个细碎的小区域产生了意想不到的漏洞。3.2 多类模型的整体框架多类SVDD的训练流程可以归纳为四个步骤。第一步数据准备。按类别划分训练集每个类别单独成为一个子数据集。这一步看起来轻松实际很关键——每个类别都要做标准化或归一化而且缩放参数必须统一。如果不同类别使用了不同的归一化参数训练出的各个超球体根本不在同一个度量的空间里预测时会出现系统性偏差。第二步核函数与参数配置。为每一个子模型选择核函数和对应的超参数。注意这里不等于每个类别的参数都要完全一样。你可以为样本量少、分布密集的类别配置更大的sigma为样本量大、分布分散的类别配置更小的sigma。不过要提醒一句差异化配置会显著提高调参成本我建议先在统一参数下跑通基线再按需微调。第三步训练子模型。对每个类别独立训练SVDD保存球心a和半径R。在大多数实现里训练完每个模型之后就可以立即在验证集上测试单类的覆盖率提前发现某个球会不会过于宽松或过于严格。第三步设计决策逻辑。这是多类SVDD和单类SVDD最大的不同点。训练过程中你得到的是K个独立的超球体但预测的时候必须把这些球体整合成一个决策函数。常见的整合方式我放到下一节细讲。3.3 预测时的决策策略从K个“是/否”到一个类别标签当你拿到K个超球体一个测试样本x会被送入每个模型计算判别函数f_k(x)。接下来怎么决定它属于哪一类这里有四种策略我逐个点评一下。策略一是最大判别值法。计算所有f_k(x)选其中最大的作为最终类别。这个策略隐含了一个假设新样本应该归入“最有可能包含它”的那个类别。实现就一行代码的事但问题是f_k(x)反映的是相对距离两个球如果半径差异大直接比数值不太公平。比如一个半径很大的球和半径很小的球同样的f值代表的“归属程度”完全不同。策略二是归一化判别法。把f_k(x)除以半径R_k得到相对归属分数然后比较这个分数。这种方式在一定程度上修正了球体大小不同带来的偏差。我实测下来发现在类别半径差异悬殊的场景里归一化判别法比最大判别值法效果稳定不少。策略三是规则优先级法。先判断x是否落在唯一一个球内如果是就直接归为那一类如果落在多个球内再按距离比确定就近归属如果落在所有球外判为拒识交给人工或走独立的异常处理通道。这个策略的优点是拒识能力最强适合故障诊断、入侵检测这种“未知样本永远可能冒出来”的场景。策略四是加权投票法。把每个子模型当作一个弱分类器根据该类别训练时的交叉验证准确率或样本量权重进行投票这种策略一般用在集成场景里对单个模型本身的描述能力要求不高。我个人在实际项目里最常用的是策略三配合策略二使用先用球内球外判定做粗筛对落入多个球的样本用归一化目标分数排序做最终归属对所有球都不包含的样本直接打上“未知”标签。这个组合既保留了SVDD的拒识能力又避免了同类重叠时的武断决策。3.4 训练代码实现基于常见库的组合搭建需要说明的是针对多类SVDD的直接封装并不是所有机器学习库都提供所以工程上通常会基于单类SVDD的实现来搭建自己的函数封装这里我用一段基于某通用机器学习库中单类分类器接口的示例来说明核心流程。import numpy as np from sklearn.svm import OneClassSVM from sklearn.preprocessing import StandardScaler class MultiClassSVDD: def __init__(self, kernelrbf, gamma0.1, nu0.05): self.kernel kernel self.gamma gamma self.nu nu self.models {} self.scalers {} self.radius {} self.classes None def fit(self, X, y): self.classes np.unique(y) for cls in self.classes: X_cls X[y cls] # 每个类别一个scaler但统一使用特征列的统计量有利于跨模型可比 scaler StandardScaler().fit(X_cls) X_scaled scaler.transform(X_cls) model OneClassSVM(kernelself.kernel, gammaself.gamma, nuself.nu) model.fit(X_scaled) # 半径通过训练样本在特征空间中的决策函数值计算 decision_values model.decision_function(X_scaled) radius np.percentile(decision_values, 5) # 取5%分位作为参考半径 self.models[cls] model self.scalers[cls] scaler self.radius[cls] radius return self def predict_with_scores(self, X): scores np.zeros((len(X), len(self.classes))) for idx, cls in enumerate(self.classes): X_scaled self.scalers[cls].transform(X) raw_scores self.models[cls].decision_function(X_scaled) # 归一化以训练集的参考半径作为基准 scores[:, idx] raw_scores / self.radius[cls] return scores def predict(self, X, reject_label-1): scores self.predict_with_scores(X) labels np.full(len(X), reject_label, dtypeint) for i in range(len(X)): # 找出所有判定为球内的类别score 0表示在球内或边界上 inside np.where(scores[i] 0)[0] if len(inside) 1: labels[i] self.classes[inside[0]] elif len(inside) 1: # 落在多个球内取分数最高者 best np.argmax(scores[i]) labels[i] self.classes[best] else: # 所有球外保持拒识标签 labels[i] reject_label return labels写这段代码时有几个细节我必须拿出来单独说明。第一OneClassSVM和SVDD在数学上相近但不完全等价。前者基于质心球模型center-based后者也是球体模型两者在高斯核下的决策边界高度相似所以用OneClassSVM来近似实现SVDD是工程上的常规操作。如果你在做研究、对精度要求高建议使用自己实现的SVDD目标函数代码或者专用工具包进行训练。第二半径的计算方式。代码里我用了训练集decision_function值的5%分位数作为参考半径这意味着训练集的5%样本被定义为边界外或边界上。这个比例其实由参数nu控制nu本身就是训练集中被允许落在球外的样本比例上限。所以更严谨一点的写法是用model._offset或者通过计算全部训练样本决策值直接取最小值来作为半径。代码里的取分位数方式是我为了工程稳定性加的“保险”你可以根据实际需求调整。第三标准化器的问题。每个类别单独训练一个scaler这在单类SVDD中是常见的。但要注意预测时用的scaler必须和训练该类别模型时用的scaler完全一致否则整个系统的几何意义就崩了。4. 参数调优、实操步骤与经验技巧4.1 关键参数的作用与影响多类SVDD的参数分两层核参数层和决策层。核参数层最核心的就是gamma对应公式里的1/sigma^2和nu对应松弛惩罚。gamma控制了单个样本在特征空间的影响半径gamma太大每个样本都只影响自己周边很小的地方超球体就会碎成很多个小块泛化能力差gamma太小每个样本的影响范围太大超球体变成一大团糊状物不同类别之间区分度急剧下降。nu控制着模型对样本的包容程度nu越大允许落在球外的样本越多球体越紧凑误报率可能上升漏报率下降nu越小模型拼命去包住每一个训练样本半径变大误报率下降但容易把别的类别的样本包进来。决策层的参数主要是球内外的阈值。前面代码里用了0这个天然阈值但实际应用时我强烈建议你做一个额外的调整——在验证集上以查全率和查准率的平衡点为参照给每个模型单独设定一个“拒绝阈值”可以是score -0.1或者score 0.2之类的值把这个阈值作为系统配置参数固化下来。原因很简单0这个天然阈值是数学意义上的不是业务意义上的。业务上你可能宁可让1%的A类样本被判为未知也不希望3%的B类样本被错分进A类。4.2 完整实操流程以三类设备故障数据为例讲一个我最近在某模拟项目里实践的案例。项目背景是对一套设备采集到的运行数据进行分类包含一个正常状态和两种故障状态分别是轴承磨损和齿轮点蚀。特征有六个维度包括振动信号的均方根值、峰值因子、峭度等样本量每个类别大概600条左右。第一步数据划分。每类按7:3切分训练集和测试集同时额外切出一个验证集用来定决策阈值。注意类别切分时一定要按时间顺序或者按设备编号分层采样避免同一台设备的连续采样数据同时出现在训练集和测试集里否则评估结果会虚高。第二步初始化参数。我先把gamma设为1/(6 * 方差均值)这个经验公式在很多库的默认参数里都有体现nu设为0.05表示允许5%的训练样本落在球外。先拿一组默认参数跑通流程看看各类的覆盖率大概是什么水平。实测下来正常类球的覆盖率97%左右两种故障类的覆盖率大概92%。故障类覆盖率偏低说明故障类样本内部的分布比较零散超球体包不住所有子簇或者说gamma过大导致球面过于细碎。第三步调gamma。把gamma降低一个数量级再训练发现覆盖率和模型间区分度都在变好。可降到某一档时出现了另外一个问题——两个故障类的超球体开始互相侵入对方区域验证集上出现了一些样本同时落在两个球内。这时候单纯调gamma已经不够我同时把nu从0.05调到了0.08稍微放松对覆盖率的追求换来球体半径的紧凑化。几轮组合下来验证集上各类的准确率从最初的88%左右提到了95%上下。第四步写决策逻辑。落在一个球内的直接分类落在多个球内的用归一化得分排序落在所有球外的走拒识流程。设备故障检测场景里拒识样本留给人去排查而不是硬给一个类别标签这个设计在系统落地时非常关键。第五步在测试集上做最终评估。此时三类总体准确率96.5%相对于传统SVM多分类的97.2%略低一点但拒识率明显更高而且模型对新增类别的扩展能力是传统SVM给不了的。如果未来再出现一种新故障模式传统SVM需要把所有类别重新训一遍多类SVDD只需要为这个新型故障类补充训练一个新的超球体不用动老的模型。4.3 参数调优的高效路径多类SVDD的参数空间比较大K个类别如果各调各的K×2个参数组合会让调参变得非常痛苦。我推荐的路径是“先统调再微调”。第一步所有类别共用一组gamma和nu用网格搜索或随机搜索在验证集上走一遍找到全局最优基线。这一步通常可以把准确率推到上限的90%以上。第二步找出验证集上表现最差的1到2个类别单独检查原因。如果是覆盖率不足减小该类别模型的gamma如果是误纳其他类别的样本减小nu或增大gamma。一次只动一个类别的参数跑完验证集再决定下一步。第三步用最终决策策略多球重叠和拒识逻辑对比各个参数候选不要在单类覆盖率上过度优化。我见过很多新手在单类模型上的指标调得很漂亮可一接进多类决策流程效果反而不如默认参数原因就是单类最优不等于多类最优。另外还有一个细节gamma的搜索范围建议按指数网格走比如从1e-4到1e2每隔一个数量级取一个值。nu的搜索范围建议控制在0.01到0.2之间超过0.2意味着你允许五分之一的数据在球外那这个类别本身的描述能力就很可疑了得回头看看数据是否真的适合用球体描述。5. 实战场景落地SVDD多类分类的典型应用5.1 工业设备状态监控与故障类型分类多类SVDD最早的落地场景之一就是工业故障诊断。机械设备在不同状态下采集的振动信号、温度信号、电流信号特征分布差异通常比较明显正常样本大量存在而各类故障样本相对稀缺甚至某些故障只有几条现场记录。在工业落地上有一个非常实际的痛点故障种类会不断新增。今天设备出现了轴承磨损你训练了模型三个月后设备又出现了从未见过的齿轮点蚀。传统多分类模型这个时候要全部重训非常费劲多类SVDD则不同每当发现一种新故障类型只要为这种故障单独训练一个超球体整个系统就能把新故障类型纳入识别范围不需要重训原有模型。这对持续运维的系统价值非常大。5.2 图像异常检测中的多姿态多子类问题图像领域的异常检测也是SVDD的重度使用区。工业质检里一个产品的正常形态可能有多个子类比如不同规格、不同颜色、不同角度的拍摄视角。如果你只训练一个单类模型去“包住所有正常样本”因为正常样本的子类分布是断裂的、多模态的单个超球体很难同时合理描述这些子类。如果用多类SVDD的思路先把正常样本聚类成多个子类每个子类单独训练一个球再做融合决策就能很好地解决这个问题。这也是多类SVDD一个很有价值的理念——多类模型不一定要求类别标签是明确的业务含义你可以把数据先做无监督聚类、然后把每一个簇当作一个类别来训练。这样SVDD就从“异常检测”延伸到了“已知多个正常模式未知异常”的复杂场景。5.3 数据类别极度不平衡时的兜底方案类别不平衡问题在真实业务中太常见了。某些场景下正样本几十万条恶意样本只有几十条普通分类器几乎无法从几十条恶意样本上学出可靠的决策边界。这时候SVDD强大的单类描述能力就能派上用场。以二分类为示范先把几十万条正样本放进一个超球体做描述恶意样本天然在球外。后续一旦出现新的恶意攻击变体不需要为它训练模型因为它也大概率落在球外会被自动标记为异常然后交给人来分析。在多类场景下这个思路进一步拓展开来少数类样本单独训练超球体多数类样本单独训练超球体预测时以“是否落入对应球内”作为判断依据而不是依赖脆弱的全局决策边界。6. 常见问题、排查思路与避坑指南6.1 某个超球体几乎包住了所有类别现象验证集上该类别的球把其他类别的大量样本也包了进来模型形同虚设。排查步骤先看训练时该类的覆盖率是多少。如果覆盖率接近100%且nu设得比较小比如0.01以下多半是球体被刻意放大导致。再检查gammagamma过小时每个样本都会“拉”着球心扩展球就会被吹得很大。对策降低nu到0.05以上或者增大gamma让每个样本的影响范围收窄。如果调完还不行就要怀疑这个类别的样本在特征空间里是否真的聚成一坨如果是多模态分布需要先做子聚类再来描述。6.2 测试集上所有样本都被判定为未知现象训练时每个类别的覆盖率看起来正常但一到测试集几乎所有测试样本都落在所有球的球外。排查要点这往往是训练和预测之间做了一次不一致的数据预处理。常见的坑是“标准化器不统一”——训练类别A的模型时用的是A类数据的均值方差训练类别B用的是B类的均值方差预测时如果直接拿原始数据丢进B类的scaler再变换数值范围可能完全不是模型熟悉的空间。对策每个类别的scaler在使用时要严格绑定最好包装在同一个代码流程里不允许手动分别调用。6.3 两个或多个类别的球互重叠严重现象大量样本同时落入多个球内决策时的归属比较勉强。排查思路重叠说明两个类别在特征空间中本身分布接近或者模型表达尺度偏大。第一步检查gamma是否过小第二步检查特征本身是否有区分度——可以在特征层面做一次可视化比如降维投影初步确认两个类别是否真的可分。如果可视化里两个类别几乎完全重合那么再调模型参数也意义不大该做的事情是增加新特征或者重新定义类别。6.4 新样本看起来像两类混合体该归哪类在实际业务里有些样本确实是“混合状态”例如设备同时出现两种叠加故障振动特征既像故障A又像故障B。SVDD的判别函数会给出两个球内分数都很高的情况。我的经验是不强行决策。在多类SVDD的框架里加入“混合态”概念——当样本同时落入两个球的深内部且归一化得分都显著大于阈值时就输出“A/B混合态”交给业务侧做进一步处理。这种做法的好处是减少错误决策的代价毕竟在很多领域把一个信号判错类别的损失远大于把它交给人工复核的损失。7. 效果验证与性能评估要点7.1 准确率不是唯一指标要算拒识代价传统的多分类任务习惯用总体准确率来评价模型但多类SVDD引入了拒识这个额外输出。拒识样本既不是分类错误也不是分类正确它是一个第三态。所以评估时要把拒识当作独立指标记录而不是简单地把“未正确分类”全算成错误。项目的业务方如果对未知状态没有处理预案你可以适当调低拒识阈值、把所有样本强行分到一个类别但如果你处理的场景是设备故障诊断或安全监控类保留一定比例的拒识反而是更负责任的做法。7.2 混淆矩阵 球内得分分布的双重验证我在项目里会同时看两个东西一个是对正常可分类样本的混淆矩阵另一个是每个类别对测试样本的得分分布图。混淆矩阵负责回答“分错的样本都错在哪里”得分分布图负责回答“决策边界的间距是否足够大”。如果两类之间的得分分布几乎贴着0线说明决策边界附近有大量灰色地带系统不够稳健就算混淆矩阵上的准确率看着不错也只是在这个特定测试集上碰巧蒙对了。7.3 连续数据场景要警惕时间相关性如果你的样本是从连续时间序列里切出来的训练集和测试集之间往往存在时间相关性。简单随机拆分会让测试集里的样本和某些训练样本高度相似测出来的准确率虚高。这种情况下建议按时间段切分比如前70%的时间段用于训练、后30%用于测试。我在多个项目里发现随机切分测出来的准确率比时间切分高出好几个百分点但后者的成绩才是真实部署水平。8. 多类SVDD的局限性与未来扩展思路任何算法都有局限多类SVDD的局限主要在三个地方。第一个局限是类别的数量越多一对多策略消耗的模型就越多调参和维护成本线性上升。遇到特征维度高、类别数几十个的分类任务多类SVDD在整体性能上往往拼不过深度模型或者梯度提升树。它更适合类别数在几类到十几类之间、对模型可解释性和增量更新有要求的场景。第二个局限是核函数的表达能力有限。SVDD本质上依赖核技巧描述的是特征空间里的球体。如果数据的真实分布是强流形结构比如图像像素空间里正常样本分布在复杂的低维流形上单个或几个超球体无论如何都描述不好。这时候可以尝试把流形学习和多类SVDD结合起来先在低维流形上做坐标变换再训练球体描述模型。第三个局限是对高维稀疏数据不友好。高维空间中球体体积会随着维度增加趋向无穷大所有样本之间的距离都显得差不多超球体的描述能力会被大幅稀释。遇到维度上千的稀疏特征建议先用降维方法把维度控到几十维以内再上SVDD。未来这段技术如果走得更远有两个方向我认为值得关注。一个是自适应核参数学习——让每个类别自己学习合适的核宽度而不用人工调参另一个方向是把多类SVDD和深度学习特征提取结合用深度网络先把原始样本映射到紧凑的特征空间再在这个空间上用多类SVDD做类别描述。我在最近半年的项目里已经开始尝试后一种组合效果确实比单独用任何一方都稳定。结合我个人实操中最深的体会多类SVDD这个技术单看算法本身并不复杂难点在于整个系统的设计意识。你要接受一个和传统分类器完全不同的思维方式不再寻找一个全局最优的“一刀切”决策边界而是构建一组可以独立进化、独立描述的数据边界。合适的场景里这种思维方式带来的增量更新能力、拒识能力和对少数类的友好程度是传统多分类方法很难替代的。如果看完这篇文章你只带走一个认知我希望是这句话多类分类不是只有“划清界线”这一条路“分别描述、各自包容”也可以做得很好。尤其当你面对的是数据分布复杂、类别不均衡、未知类型随时可能出现的场景多类SVDD值得进入你的工具箱。最后再分享一个小技巧当你在纠结某个参数选什么值时不要只盯着验证集上的准确率数字多画一画各类的得分分布重叠情况。模型之间的间隔宽度往往比一个光鲜的准确率更能说明它在真实世界里的表现。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询