模型为啥啥也没学会?聊聊欠拟合这个没睡醒的看门大爷

啥叫欠拟合:题都做不对,还聊啥举一反三
过拟合咱前面聊过,模型把训练题背成了标准答案,换个花样就傻。欠拟合正好反过来——它连训练题都没整明白,老师在黑板上讲的例题它都做错,更别提考试遇新题了。打个比方,就像雇了个看门大爷,连谁是自己人、谁是生脸都分不清,天天把老板拦在门外,把推销的放进屋。这号模型,压根没「学进去」,你说它泛化、说它聪明,都是白扯。
长相好认:训练和考试两头都拉胯
认欠拟合有个笨办法:看它的成绩单。模型在训练集上就错一大片,准确率上不去;拿去测试集一考,照样稀碎。这跟过拟合正好相反——过拟合是训练集满分、测试集露怯,是「家里横、出门怂」;欠拟合是「家里门外都怂」,一处都没占着。所以你瞅见一条曲线,训练误差和测试误差都高高的、死活下不来,八成就是这位没睡醒的看门大爷在值班。
根子在哪:模型太笨,或活儿没干到位
欠拟合一般俩出处。一是模型本身太简单,好比你拿个一元一次方程去拟合一条弯弯曲曲的曲线,再怎么拧参数也对不上,因为它「表达能力」就那么点儿,装不下数据的弯弯绕。二是活儿没干到位:特征没选好、训练时间太短、参数设得保守,模型还没来得及把规律摸出门道就停了。就像让小学生做高数,不是他不努力,是课本和本事都不配套。
跟过拟合凑一对:一个没学会,一个学过了头
这俩是一对反义词,摆在一起好记。欠拟合是「学不够」,模型太简单、训练太浅,连该记的都没记住;过拟合是「学过头」,模型太复杂、把训练题里的噪声都当真理背了,换个新题就懵。一个欠、一个过,都不到位。老程序员调模型,多半就在它俩之间来回拧那根旋钮,找个不上不下、刚刚好的平衡点,这活儿叫偏差方差权衡,后面咱单独聊。
咋把它叫醒:加料、加复杂、调到位
治欠拟合路子也直白。模型太笨就换个复杂点的,比如从直线换成曲线、从浅网络加深几层,让它「表达得动」;特征不行就重新挑、多造点有用的特征,别拿一堆没用的糊弄它;训练太浅就多练几轮、把学习率调合适,别练两下就收工。一句话:给它配得上任务的本事,再把活儿干足,它自然就醒过来了。这比治过拟合省心,因为方向明摆着——往「更强」拧就对了。
心里有杆秤:不是越复杂越好
但咱也别矫枉过正。为了不治欠拟合,咣当塞个巨复杂的模型,容易一脚踩进过拟合的坑,按下葫芦浮起瓢。所以加复杂度要一点点试,看训练误差和测试误差是不是一起往下走;一旦测试误差不降反升,就说明拧过头了。模型这玩意儿,跟炖肉一个理——火候到了就成,过火就柴。差不多得了,是老炮的口头禅,也是真经验。火候这东西急不得也欠不得,得自己多拧几回才有手感。








