sunpongber

17分钟带你避开所有机器学习新手常犯的错误!

机器学习初学者常犯的所有错误以及如何避免这些错误,涵盖从数据准备到模型评估的所有内容,主要有以下5个领域

Data-Related Issues(与数据相关的问题)
Model Training Pitfalls(模型训练中的常见陷阱)
Implementation Problems(实现过程中的问题)
Evaluation Mistakes(评估中的错误)
Common Beginner Traps(初学者常犯的错误)

如何发现并修复这些错误,有一种系统的方法来避免这些陷阱
通过从别人的错误中学习来建立更好的模型,而不是让自己犯错误

  1. Not cleaning your data properly
    dirty data
    你可能会认为几个缺失值或异常值不会造成太大影响,但它们就像白蚁一样,正在悄无声息地破坏你模型的基础
    那些重复的条目正在悄然偏颇你的结果
    那些格式混杂、包含特殊字符和拼写不一致的文本字段,则将你的特征提取变成了一场赌博
    现实世界中的数据是混乱的,不同的拼写、不可能的值、不同的日期格式或不同的货币
    跳过适当的清理就像在流沙上建房子,虽然一开始更快,但你将花两倍的时间来调试神秘的模型行为
    记住,垃圾进垃圾出,无论多么复杂的建模都无法挽救糟糕的数据质量
  2. Forgetting to normalize/standardize
    忘记对特征进行标准化或归一化处理,是许多初学者在建模时容易忽略的关键步骤
    当特征处于不同量级时(例如,基于房屋面积预测房价与基于卧室数量预测房价),模型无法有效从数据中学习
    想象一下梯度下降算法在处理这些不均匀量级时的情景,这就像同时调整显微镜和望远镜一样困难
    算法难以找到合适的步长,导致训练速度缓慢且效果不佳
    解决方法很简单,但非常重要,将特征标准化为零均值和单位方差,或将其缩放至0到1之间
    这将使所有特征处于平等的竞争环境,让模型能够专注于发现数据中的真实模式
  3. Data leakage
    数据泄露是指测试集或验证集中的信息意外渗入训练过程
    这是最危险的错误之一,因为它会导致训练结果出现虚假乐观的结论,而在实际生产环境中这些结论往往会失效
    一个常见的例子是,在分割数据集之前对整个数据集进行预处理,如果你使用整个数据集的统计信息进行标准化,你就让测试数据影响了你的训练过程,你的模型得以一窥它本不该看到的内容
    正确的方法虽然简单但严格,首先分割数据集,然后分别对训练集、验证集和测试集进行预处理,你的验证集和测试集在特定的评估阶段之前应完全未被触碰
  4. Class imbalance issues
    类不平衡是指数据集中不同类别样本数量存在巨大差异
    以欺诈检测为例,你可能拥有数百万笔正常交易记录,但仅有数十笔欺诈交易记录
    如果你忽略这种不平衡,你的模型可能会通过每次都预测正常来实现99%的准确率,但在实际应用中这毫无用处,而且在训练过程中,你的模型几乎无法从少数类别的示例中学习
    解决方案?使用诸如对少数类别进行过采样、对多数类别进行欠采样,或使用合成数据生成技术(如Smoke)等方法,并且始终使用考虑类不平衡的适当指标,如精确率召回率曲线,而不仅仅是准确率,关于这一点,我们稍后再详细讨论
  5. Not handling missing values correctly
    数据集中的缺失值可能会严重影响模型性能
    初学者常犯两种错误:要么删除包含缺失值的行,从而丢失潜在的有价值数据,要么盲目用均值或零填充缺失值
    每个缺失值都需要根据其缺失原因进行适当处理,有时缺失是随机的,有时则具有特定含义,例如客户故意跳过调查问题,解决方法可能是使用均值、中位数或更复杂的方法(如k近邻算法或回归)进行插值
    请记住,缺失值本身可能包含信息,例如,缺失的收入字段可能表明失业,这是信号,而非噪声,因此,如果你认为缺失性是有意义的,可以将其编码为新特征,例如一个名为“缺失字段”的布尔特征,该特征本身可能通过错误的指标预测目标变量
  1. Using wrong metrics
    选择错误的指标是机器学习中的经典陷阱
    仅凭准确率可能具有误导性,回顾之前的类不平衡示例,在一个99%数据属于单一类的数据集上,99%的准确率并不代表好模型,准确率不适用于不平衡数据集
    你需要使用精确率、召回率或F1分数,对于排序问题,可使用MAP或NDCG等指标,对于回归问题,RMC或MAE可能比R平方更合适
    合适的指标不仅取决于问题类型,还取决于问题在现实世界中的影响,始终牢记项目目标
    在医学诊断中,你可能更关心避免假阴性而非假阳性,例如,在预测癌症的诊断工具中,漏诊潜在癌症比将良性肿瘤误判为癌症(随后可通过二次检测快速排除)更严重
    选择与实际目标一致的指标
  2. Overfitting/underfitting
    过拟合发生在模型记忆训练数据而非学习通用模式时,它在训练数据上表现出色,但在新数据上却失败,就像一个学生死记硬背考试答案却不理解概念一样
    欠拟合则相反,模型过于简单,无法捕捉重要模式,即使在训练数据上表现也差,就像试图用直线拟合曲线数据一样
    平衡点在于模型复杂度与训练时间,这是机器学习的核心
    我在其他视频中讨论过偏置-方差权衡的重要性,不妨看看那些视频,使用交叉验证、正则化及早停等技术来找到最佳平衡点
    你的训练曲线与验证曲线如何?若两者出现分歧,很可能因学习率设置不当导致过拟合
  3. Wrong learning rate
    学习率是控制模型在训练过程中调整权重程度的关键超参数
    过高会导致模型超过最优值,可能导致过低,训练速度缓慢,可能陷入局部最优
    注意警示信号,如果损失函数剧烈波动,学习率过高,如果几乎没有改善,学习率过低
    从常见默认值如0.01或0.001开始,并考虑在训练过程中动态调整学习率的策略。
  4. Poor hyperparameter choices
    超参数选择不当会严重影响模型的性能
    常见错误包括使用任意批量大小、随机选择网络架构,或从无关问题中复制参数
    这些选择需要系统性调优,可采用网格搜索、随机搜索、概率优化等技术寻找最优值,记录实验过程,对一个数据集有效的方案可能在另一个数据集上失效
    然而,需注意过度进行网格搜索,尤其在数据集规模不大时,这可能导致模型对验证集过拟合,并在真实数据上表现不佳
    与其穷尽所有超参数组合,不如采用更具策略性的方法,可先设置粗略的网格,使用间隔较大的初始值,随后对有潜力的区域进行更精细的调整,或考虑随机搜索,其往往能比网格搜索更高效地找到优质解
  5. Not using cross-validation
    不使用交叉验证是评估模型性能的关键
    仅在单一数据集上进行训练和测试,就像仅凭一顿饭来评判一位厨师的水平,你可能会碰运气,也可能运气不佳
    相反,应使用K折交叉验证在不同数据集分割上测试模型,这能展示模型在不同数据子集中的表现,为你提供更贴近实际应用的性能估算
    注意分层和分类问题,确保每个折叠保持与完整数据集相同的类分布,确保折叠是随机选择的
  1. Train/test set contamination
    快速区分污染与数据泄露,数据泄露是指测试或验证信息通过间接方式(如特征缩放、使用全部数据的统计信息或利用未来时间戳信息提取特征)微妙地影响训练过程
    训练集与测试集污染则是更直接的滥用行为,例如明确使用测试数据进行超参数调优、使用测试样本进行模型选择或直接在测试数据上进行训练,这通常是对训练集与测试集分离原则的更明显违反
    训练测试集污染比数据泄露更严重,因为它会破坏整个评估设置,修复起来也更困难,因为你现在需要一个全新的测试集,因为原来的测试集已不再有效
    常见的例子包括使用测试数据进行超参数调优,或在包含测试集的完整数据集上进行特征选择
    最终得到的乐观结果无法反映实际性能,始终确保测试集完全独立,将其视为只能使用一次的最终考试
  2. Wrong loss function
    使用错误的损失函数会干扰模型的学习过程
    损失函数需要与问题类型相匹配,例如使用均方误差(MSE)进行分类或二元交叉熵(binary cross entropy)进行回归,否则会干扰模型的学习过程
    分类任务通常需要交叉熵损失函数,而回归任务通常需要MSE或Ma损失函数
    对于特定问题,如排序或目标检测,您需要使用专门的损失函数来捕捉正确的目标
    与选择正确的指标类似,选择正确的损失函数取决于问题的目标,始终牢记您的实际目标
  3. Incorrect feature encoding
    特征编码错误是处理类别变量时的一大关键问题
    常见错误包括对名义类别使用标签编码、创建虚假的普通关系,或完全忘记对类别变量进行编码
    以颜色特征为例,其取值为红色、蓝色和绿色,标签编码会将这些值转换为红色等于0、蓝色等于1、绿色等于2,问题在于,模型现在认为绿色大于蓝色,它假设蓝色位于红色和绿色之间,这些数值关系完全是人为的,颜色本身没有自然的排序关系
    文本变量需要正确的编码方式,无论是one-hot编码、标签编码还是嵌入编码
    序数特征应保留其自然顺序,并始终处理可能出现在测试数据中的未知类别
    与往常一样,在准备数据时,请始终将现实世界目标和直觉放在心上,而不是盲目操作,这往往比使用更强大的算法更为重要。
  4. Not shuffling data
    不打乱数据可能会严重偏倚模型训练
    如果您的数据集按时间序列或按类别排序,模型会学习这些人为模式而非真实关系
    在批量训练过程中,未打乱的数据意味着每个批次可能包含相似示例,例如本例中代理人明显是按县分组的。这会导致梯度更新不稳定和学习效果差
    在创建批次前,请务必随机打乱训练数据
  5. Memory management issues
    内存管理常让许多机器学习新手措手不及,一次性加载过多数据、保留不必要的变量在内存中,或在训练运行之间未清除GPU内存,都可能导致系统崩溃
    对于大型数据集,应使用批处理或数据生成器
    当模型权重和梯度不再需要时,应及时清除
    特别是在使用GPU时,需密切监控内存使用情况
  1. Not checking for bias
    模型偏差可能以多种形式出现,例如人口统计偏差、训练数据中的选择性偏差,或类别不平衡导致的偏差
    模型可能会在性别或种族上表现出歧视性行为,如果这些偏差存在于训练数据中,比如在这个例子中可以看到,模型对男性和肤色较浅的人处理得更好,可能是因为数据集中这类样本数量更多
    因此,你需要在不同的子群体和场景下对模型进行测试,检查其在各种人群和边缘情况中的预测表现,并清晰记录任何发现的偏差
  2. Ignoring model assumptions
    每种机器学习算法都有其内在假设
    例如,线性回归假设变量之间存在线性关系且误差相互独立;朴素贝叶斯(Naive Bayes)则假设各个特征之间是独立的
    如果这些假设被违背,模型性能就会大打折扣,因此,务必检查你的数据分布和特征之间的关系
    以下是忽视模型假设的一些典型错误例子:
    线性回归:用于指数增长的数据,却期望获得良好的拟合效果
    朴素贝叶斯:将“New York”分成两个独立的词“New”和“York”,忽略了它们是一个整体
    时间序列:使用普通的交叉验证而不是时间顺序划分,从而等于用未来预测过去
    K 均值聚类(K-means):应用在螺旋形的数据上,而它本质假设簇是圆形的
    K 近邻(K-NN):直接用于高维数据,却没有进行特征选择或归一化
    解决方法:
    要么对数据进行变换以满足模型假设
    要么选择适合你数据特点的算法
  3. Poor validation strategy
    糟糕的验证策略会破坏整个模型评估的可靠性
    常见错误包括:
    仅使用一次性划分的训练集和测试集,没有在划分中进行分层处理(如类别比例不均衡时),或者将验证数据泄露到了训练过程中
    应根据具体问题选择合适的交叉验证方法:
    时间序列任务应使用时间顺序划分
    用户相关的数据应采用基于用户的划分
    确保划分是随机且具有代表性的,验证过程应尽可能贴近真实世界的数据情况和分布
  4. Misinterpreting results
    误解模型结果会导致对模型性能的错误判断
    要真正理解模型的表现,不能只看整体指标,还要深入分析模型的实际行为
    即使评估指标看起来很好,模型在某些特定子群体、边缘情况,或面对真实世界中与测试条件不同的数据时,可能会出现系统性失败
    要检查每个预测结果,特别是错误预测,它们往往揭示出在总体统计中无法察觉的规律
    你需要思考:
    是否某类错误更频繁?失败是否集中出现在某些特定条件下?
    比如,一个客户流失预测模型整体表现不错,但却经常无法识别即将流失的高价值客户,这种问题,只有通过细致的错误分析才能发现
    再比如,一个制造缺陷检测系统,初看之下性能极佳,准确率高达99%,看似完美地支持了质控流程,但当我们分析其在不同条件下的错误模式时,发现了一个严重问题:在夏季热浪期间,模型性能急剧下降,虽然这些炎热天气仅占总运行时间的15%,但它们恰好对应着产量最高的季节, 在这些温度超过30℃的时间段内,准确率下降到了62%,结果是在最需要模型可靠性的时候,质控系统却变得不可靠了
  1. Using complex models too early
    过早使用复杂模型是初学者常见的误区之一
    深度学习并不是万能的解决方案——实际上,在很多情况下,它反而不是最优选择
    更简单的模型,比如逻辑回归、决策树或随机森林,往往表现更好
    复杂模型带来了许多缺点:
    需要更多数据才能有效训练,防止过拟合
    训练过程需要更多计算资源和更长时间,增加了成本和开发周期
    模型难以解释和调试,当出错时,很难查明原因
    部署和维护难度也更高,特别是在生产环境中
    最好的方法是从简单模型开始,比如逻辑回归或线性回归,先建立一个基线模型
    这样可以提供一个清晰的参考点,同时往往能揭示数据中的关键特征和问题本质
    然后,如果确有需要,再逐步增加模型复杂度,并始终评估这种复杂度是否真的带来了足够的性能提升,值得为此付出更多代价
    你会发现,很多时候,经过良好特征工程的简单模型,性能胜过复杂架构的模型
    要记住,许多著名的 Kaggle 比赛的冠军方案,靠的并不是深度神经网络,而是精调的梯度提升模型(如 XGBoost、LightGBM)
    关键通常在于特征工程和对问题的深入理解,而不是模型的复杂程度
  2. Not understanding the baseline
    我们再来谈谈基线模型(baseline model)
    基线模型是你设定的最低可接受性能标准,比如在回归任务中用平均值预测,在分类任务中用多数类作为预测结果
    如果没有基线模型,你就无法判断复杂模型是否真的带来了提升
    举个例子:
    在做房价预测时,你的复杂神经网络模型的平均误差是 $50,000,乍看之下似乎很不错,但如果你用所有房子的平均价格来做预测,误差只有 $55,000,这说明你的复杂模型几乎没带来改进,又比如你的垃圾邮件分类器准确率达到了 98%,看起来很厉害,但如果你把所有邮件都标记为“非垃圾邮件”,也能有 97% 的准确率,这表明你的模型也只是略好于“瞎猜”
    这两个例子都说明了:如果没有基线模型作为对比,你很容易被“看起来不错”的数字误导
    所以,先测试简单模型,比如线性回归,如果它的表现和你的神经网络差不多,那你很可能是在过度复杂化问题
    此外,良好的基线模型还有助于发现数据泄露
    如果你的模型表现好得令人难以置信,那多半是出了问题
    总结:从简单做起,逐步加深复杂度,并用基线作为参照,才能真正评估模型的价值。
  3. Ignoring domain knowledge
    忽视领域知识是一个至关重要却常被初学者忽略的问题,甚至一些经验丰富的机器学习专家也会犯这个错误
    仅靠技术手段和数据模式是远远不够的,理解业务背景、行业趋势和专业知识,才能构建真正有效的模型
    领域专家可以:
    帮助识别或构造重要特征
    发现数据中的质量问题
    验证模型预测是否在现实世界中有意义
    如果没有领域知识,你可能会:
    优化了错误的指标
    忽略问题中的关键约束
    或做出看似合理但实际上有误的结论
    举两个例子:
    在医疗诊断中,一个模型通过学习“那些每小时都被测量生命体征的病人更可能病情严重”而获得高准确率
    但领域专家会立刻指出这是一种误导性模式——每小时检查是病情严重的结果,而不是病情的原因或预测因素
    在零售销售预测中,模型可能学到“每周三销售额都会下降”
    但一位零售行业专家会解释说:这其实是因为每周三进行库存更新,导致销售数据记录出现延迟,并不是真正的销量下降
    这些模式在统计上看似合理,但在现实中却毫无意义。这正说明了领域知识在构建有价值模型中的重要性
  4. Poor documentation
    文档缺失是一个常见错误,往往会在日后反复“反噬”你
    你需要记录以下内容:
    数据来源
    预处理步骤
    模型参数
    实验结果等
    当几个月后模型出现异常行为时,良好的文档能帮助你迅速找出原因
    同时,良好的文档还能:
    提高与他人的协作效率
    让你更容易将项目交接给别人继续维护
    请务必清晰记录模型设计的决策过程和性能指标,包括特征工程的步骤以及所有数据清洗的规则
    将来的你,或者你的团队成员,一定会为你当初的认真记录而感激
  5. Not version controlling
    缺乏版本控制和缺乏文档一样,是机器学习项目中的一大问题
    如果没有版本控制,你将无法:
    追踪哪些代码更改带来了性能提升
    复现实验结果
    或有效地与团队协作
    你需要对所有内容进行版本管理,包括:
    代码
    数据
    预处理脚本
    配置文件
    甚至模型的中间检查点(checkpoints)
    像 Git 搭配 DVC(Data Version Control)或 MLflow 等工具
    可以帮助你同时管理代码和机器学习过程中的各种“工件”(artifacts)
    良好的版本控制,是可重复、可协作和可维护机器学习项目的基础

原始资料地址:
17分钟带你避开所有机器学习新手常犯的错误!
All Machine Learning Beginner Mistakes explained in 17 Min
如有侵权联系删除 仅供学习交流使用