- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 入门
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 必备技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 限制
- ML - 现实生活中的例子
- ML - 数据结构
- ML - 数学
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习与无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 平均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- ML 中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- ML 中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K 近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- ML 中的聚类算法
- ML - 聚类算法
- ML - 基于中心点的聚类
- ML - K 均值聚类
- ML - K 中值聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN 聚类
- ML - OPTICS 聚类
- ML - HDBSCAN 聚类
- ML - BIRCH 聚类
- ML - 亲和传播
- ML - 基于分布的聚类
- ML - 凝聚层次聚类
- ML 中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 后退消除法
- ML - 前向特征构造
- ML - 高相关性过滤器
- ML - 低方差过滤器
- ML - 缺失值比率
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q 学习
- ML - REINFORCE 算法
- ML - SARSA 强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 使用 Python 的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动工作流
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC 曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori 算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精确率和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 时期
- ML - 感知器
- ML - 正则化
- ML - 过拟合
- ML - P 值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的盈利模式
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试问题
- ML - 有用资源
- ML - 讨论
机器学习 - 过拟合
过拟合是指模型学习训练数据中的噪声,而不是潜在模式。这会导致模型在训练数据上表现良好,但在新数据上表现不佳。从本质上讲,模型变得过于专门化,无法泛化到新数据。
在使用复杂模型(例如深度神经网络)时,过拟合是一个常见问题。这些模型具有许多参数,并且能够非常紧密地拟合训练数据。但是,这通常是以牺牲泛化性能为代价的。
过拟合的原因
有几个因素可能导致过拟合 -
复杂模型 - 如前所述,复杂模型比简单模型更容易过拟合。这是因为它们具有更多参数,并且能够更紧密地拟合训练数据。
训练数据有限 - 当训练数据不足时,模型难以学习潜在模式,反而可能学习数据中的噪声。
训练数据不具有代表性 - 如果训练数据不能代表模型试图解决的问题,那么模型可能会学习不相关的模式,这些模式无法很好地泛化到新数据。
缺乏正则化 - 正则化是一种通过向成本函数添加惩罚项来防止过拟合的技术。如果不存在此惩罚项,则模型更容易过拟合。
防止过拟合的技术
有几种技术可用于防止机器学习中的过拟合 -
交叉验证 - 交叉验证是一种用于评估模型在新数据上的性能的技术。它涉及将数据分成几个子集,并依次使用每个子集作为验证集,同时在剩余数据上进行训练。这有助于确保模型能够很好地泛化到新数据。
提前停止 - 提前停止是一种通过在训练过程完全收敛之前停止训练过程来防止模型过拟合的技术。这是通过在训练期间监控验证误差,并在误差停止改善时停止训练来完成的。
正则化 - 正则化是一种通过向成本函数添加惩罚项来防止过拟合的技术。惩罚项鼓励模型具有较小的权重,并有助于防止其拟合训练数据中的噪声。
Dropout - Dropout 是一种用于深度神经网络中防止过拟合的技术。它涉及在训练期间随机丢弃一些神经元,这迫使剩余的神经元学习更健壮的特征。
示例
以下是使用 Keras 在 Python 中实现提前停止和 L2 正则化的示例 -
from keras.models import Sequential from keras.layers import Dense from keras.callbacks import EarlyStopping from keras import regularizers # define the model architecture model = Sequential() model.add(Dense(64, input_dim=X_train.shape[1], activation='relu', kernel_regularizer=regularizers.l2(0.01))) model.add(Dense(32, activation='relu', kernel_regularizer=regularizers.l2(0.01))) model.add(Dense(1, activation='sigmoid')) # compile the model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # set up early stopping callback early_stopping = EarlyStopping(monitor='val_loss', patience=5) # train the model with early stopping and L2 regularization history = model.fit(X_train, y_train, validation_split=0.2, epochs=100, batch_size=64, callbacks=[early_stopping])
在此代码中,我们使用了 Keras 中的 Sequential 模型来定义模型架构,并且使用 kernel_regularizer 参数向前两层添加了 L2 正则化。我们还使用 Keras 中的 EarlyStopping 类设置了一个提前停止回调,它将监控验证损失并在其停止改善 5 个时期后停止训练。
在训练期间,我们传入 X_train 和 y_train 数据以及 0.2 的验证拆分以监控验证损失。我们还设置了 64 的批大小并最多训练 100 个时期。
输出
执行此代码时,它将生成如下所示的输出 -
Train on 323 samples, validate on 81 samples Epoch 1/100 323/323 [==============================] - 0s 792us/sample - loss: -8.9033 - accuracy: 0.0000e+00 - val_loss: -15.1467 - val_accuracy: 0.0000e+00 Epoch 2/100 323/323 [==============================] - 0s 46us/sample - loss: -20.4505 - accuracy: 0.0000e+00 - val_loss: -25.7619 - val_accuracy: 0.0000e+00 Epoch 3/100 323/323 [==============================] - 0s 43us/sample - loss: -31.9206 - accuracy: 0.0000e+00 - val_loss: -36.8155 - val_accuracy: 0.0000e+00 Epoch 4/100 323/323 [==============================] - 0s 46us/sample - loss: -44.2281 - accuracy: 0.0000e+00 - val_loss: -49.0378 - val_accuracy: 0.0000e+00 Epoch 5/100 323/323 [==============================] - 0s 52us/sample - loss: -58.3326 - accuracy: 0.0000e+00 - val_loss: -62.9369 - val_accuracy: 0.0000e+00 Epoch 6/100 323/323 [==============================] - 0s 40us/sample - loss: -74.2131 - accuracy: 0.0000e+00 - val_loss: -78.7068 - val_accuracy: 0.0000e+00 -----continue
通过使用提前停止和 L2 正则化,我们可以帮助防止过拟合并提高模型的泛化性能。