郭震 AI公众号:郭震AI

15 机器学习小白教程系列:模型评估之过拟合与欠拟合

发布日期:

分类: 机器学习小白

预计阅读: 4 分钟

阅读: --

过拟合与欠拟合流程图查看大图
过拟合与欠拟合流程图

过拟合是模型把训练集记得太细,欠拟合是模型连基本规律都没学到。判断时要同时看训练集和验证集表现。

过拟合与欠拟合核对图查看大图
过拟合与欠拟合核对图

我会画训练分数和验证分数曲线。两条线之间的距离,往往比单个准确率更能说明问题。

在上一篇教程中,我们讨论了模型评估的重要性,以及如何使用交叉验证来确保我们的模型具有良好的泛化能力。在本篇中,我们将深入探讨两个关键概念:过拟合(Overfitting)欠拟合(Underfitting)。这两者的问题会直接影响我们的模型在未知数据上的表现,因此理解它们是每一个机器学习小白必须掌握的技能。

过拟合与欠拟合的定义

  • 过拟合(Overfitting):当模型在训练数据上表现得非常好,但在测试数据上表现不佳时,就发生了过拟合。过拟合通常是由于模型复杂度过高,或者训练数据量不足,导致模型学习到了训练数据中的噪声细节

  • 欠拟合(Underfitting):当模型在训练数据和测试数据上都表现不佳时,就发生了欠拟合。欠拟合通常是由于模型复杂度过低,无法捕捉数据中的潜在模式

  • 过拟合与欠拟合的图示

    通常,我们可以通过模型的学习曲线来观察过拟合和欠拟合的现象:

    • 过拟合:在训练曲线中,训练损失迅速降低,但验证损失在某一点后开始上升。
    • 欠拟合:在训练和验证损失都很高且处于相近的水平。

    这里是一个简单的示意图,以帮助理解这两个概念:

    损失
    |
    |      .                .
    |     .                 .
    |    .                  .
    |   .                   .
    |  .                    .
    | .                     .
    |.                      .
    |--------------------------> 训练轮次
    
    • 过拟合:训练损失急剧下降,而验证损失在某一阶段开始上升。
    • 欠拟合:训练损失和验证损失都保持在高水平。

    如何检测过拟合与欠拟合

    要检测模型的过拟合或欠拟合,可以采用以下几种方法:

    1. 交叉验证:如上一篇中提到的,交叉验证可以帮助我们更好地理解模型在不同数据子集上的表现。
    2. 学习曲线:通过绘制学习曲线,我们可以观察到模型的训练损失与验证损失之间的关系,从而判断模型是否过拟合或欠拟合。
    3. 评估指标:使用如精度召回率F1分数等指标来评估模型的性能。

    解决过拟合与欠拟合的方法

    解决过拟合的方法

    1. 减少模型复杂度:选择一个更简单的模型,或者使用正则化技术,如L1或L2正则化。
    机器学习过拟合欠拟合判断卡查看大图
    机器学习过拟合欠拟合判断卡

    排查机器学习过拟合与欠拟合时,先比较训练误差、验证误差、特征数量、正则化和学习曲线。

    from sklearn.linear_model import Ridge
    
    model = Ridge(alpha=1.0)  # 使用L2正则化
    
    1. 增加训练数据:获取更多的训练数据,可以帮助模型更好地泛化。
    2. 使用Dropout:在神经网络中,可以使用Dropout层来随机丢弃部分神经元,从而减少过拟合风险。
    3. 提早停止:在训练过程中监控验证损失并提早停止训练。

    解决欠拟合的方法

    1. 增加模型复杂度:选择更复杂的模型,或者增加特征数量。

      from sklearn.tree import DecisionTreeRegressor
      
      model = DecisionTreeRegressor(max_depth=None)  # 不限制树的深度
      
    2. 相应的数据预处理:确保特征经过适当的预处理,如标准化归一化

    3. 特征工程:创造新的特征,或者尝试非线性模型(如多项式回归)。

    代码示例:过拟合与欠拟合实例

    下面是一个简单的例子,通过使用sklearn库来展示过拟合和欠拟合的概念。我们将使用决策树回归模型来拟合数据:

    机器学习阅读地图卡查看大图
    机器学习阅读地图卡

    《机器学习小白教程系列:模型评估之过拟合与欠拟合》可以按“场景、概念、动作、结果”来读。先把这四件事对齐,再回到正文里的参数、代码或流程。

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.tree import DecisionTreeRegressor
    from sklearn.model_selection import train_test_split
    
    # 生成数据
    X = np.sort(np.random.rand(100))
    y = np.sin(2 * np.pi * X) + np.random.normal(0, 0.1, X.shape)
    
    # 切分数据
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # 训练一个过拟合模型
    model_overfit = DecisionTreeRegressor(max_depth=5)
    model_overfit.fit(X_train.reshape(-1, 1), y_train)
    
    # 训练一个欠拟合模型
    model_underfit = DecisionTreeRegressor(max_depth=1)
    model_underfit.fit(X_train.reshape(-1, 1), y_train)
    
    # 预测
    y_pred_overfit = model_overfit.predict(X_test.reshape(-1, 1))
    y_pred_underfit = model_underfit.predict(X_test.reshape(-1, 1))
    
    # 绘制结果
    plt.figure(figsize=(12, 6))
    
    plt.subplot(1, 2, 1)
    plt.scatter(X_test, y_test, color='black')
    plt.scatter(X_test, y_pred_overfit, color='red')
    plt.title('Overfitting Model')
    
    plt.subplot(1, 2, 2)
    plt.scatter(X_test, y_test, color='black')
    plt.scatter(X_test, y_pred_underfit, color='blue')
    plt.title('Underfitting Model')
    
    plt.show()
    

    在这个示例中,我们生成了一些数据并通过决策树模型实现了过拟合与欠拟合的例子。你应该会看到,红色的点代表过拟合模型的预测,它在训练数据上表现良好,但在测试数据上表现不好,而蓝色的点代表欠拟合模型的预测,它在两者上都表现不佳。

    机器学习小白教程系列:模型评估之过拟合与欠拟合应用复盘卡查看大图
    机器学习小白教程系列:模型评估之过拟合与欠拟合应用复盘卡

    如果《机器学习小白教程系列:模型评估之过拟合与欠拟合》还没完全消化,可以从这张卡片的四个动作重新走一遍。

    机器学习小白教程系列:模型评估之过拟合与欠拟合应用检查卡查看大图
    机器学习小白教程系列:模型评估之过拟合与欠拟合应用检查卡

    回看《机器学习小白教程系列:模型评估之过拟合与欠拟合》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。

    总结

    在本篇教程中,我们探讨了过拟合欠拟合的概念,这是模型评估中的关键点。通过理解这些概念,我们可以有效地调整和优化我们的机器学习模型,以便在实际应用中取得更好的表现。在下一篇中,我们将介绍一个实际项目,帮助你巩固并应用所学的知识。

    希望本篇内容对你理解模型的评估能力有所帮助!

    相关教程

    相关页面

    AI 教程列表

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    延伸教程

    AI 教程列表

    相关内容

    相关 AI 教程

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...