「数据一边倒咋办?聊聊类别不平衡这个坑」

先给结论:数据一边倒,模型最容易学会躺平
做分类任务,最怕训练集里猫有九千张、狗只有一百张。模型一算账,管你给啥图,我闭眼喊猫,准确率就能到九十九。它才不跟你讲道理,哪儿省事往哪儿走。米岸AI 当年带团队调模型就栽过这跟头,报表漂亮,上线就现原形。所以看见高准确率先别乐,得问问数据本身平不平,这坑专坑不看数据分布的人。
为啥准确率会骗人
准确率是猜对的除以总题数。九千张猫全中、一百张狗全错,准确率九十九,看着没毛病,可狗一张都没认出来,这模型有啥用?所以不平衡的数据集上,光看准确率等于自欺。得看召回率、F1 这些分细了的指标,才知道少数类到底认得咋样。要我说,这就跟班里全是及格的,你算平均分看不出有几个不及格一个理,得单拎出来数。
模型偷懒的两种姿势
一种叫多数类偏见,模型把决策边界往少数类那边推,宁错少数不放多数。另一种更隐蔽,它其实学到了猜多类比猜少数更安全,于是对模糊样本一律归到大类。要我说,这跟考试专挑送分题做、难题直接空着一个德行,总分不低,真本事没长。等你拿它去认那一百张狗,才发现它压根没学会,全靠多数类撑场面。
常用的补法:先把数据掰匀
最直觉的是重采样。少数类太少就过采样,复制或合成一些;多数类太多就欠采样,砍掉一部分。两边数量拉近,模型没空偷懒。合成那条路里最有名的叫 SMOTE,思路是拿两个少数类样本生个中间样本,相当于给稀有的那拨补点兵。这招比单纯复制强,因为造出来的是新样本,模型不至于死记硬背那几张图。
不调数据,调损失也行
另一路是从算法下手,给少数类样本加权,它错一次罚得狠,模型就不敢随便牺牲它。这叫类别加权损失。好处是不动数据量,坏处是权重得调,调不好又矫枉过正。两路都能用,实战里常常双管齐下,既重采样又把损失加上,两头堵才稳。不过加权别太猛,否则模型又走向另一个极端,光顾着少数类把多数类搞砸。
常见问题
问:不平衡到啥程度才需要处理?
答:没死规定。一般少数类低于总样本一成,就该上心了;差出一两个数量级,基本必处理,不然模型铁定躺平,报表再好看也是假象。
问:过采样复制会不会过拟合?
答:单纯复制确实容易让模型死记那几张图。所以多用 SMOTE 这类造新样本的法子,或者配合数据增强,别光复读,让它见点新花样。
问:加权会不会让模型太偏向少数类?
答:会,权重给猛了少数类召回上去了、多数类准确率掉下来。得在验证集上慢慢试,找个两头都不太难看的平衡点,别走极端。
问:米岸AI 提这个,普通读者用得上吗?
答:用得上。你拿 AI 做筛选、风控、质检,数据天然就歪,懂这坑能少交不少学费,至少知道高准确率未必真管用。
本文由米岸AI整理。








