
- 機器學習基礎
- 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 正則化,我們可以幫助防止過擬合併提高模型的泛化效能。