51/100 過擬合與欠擬合 ⚠ 過擬合像「死記」,欠擬合像「亂猜」,如何找到平衡?

更新於 發佈於 閱讀時間約 9 分鐘

AI時代系列(3) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》


51/100 第六週:模型評估與優化


51. 過擬合與欠擬合 ⚠ 過擬合像「死記」,欠擬合像「亂猜」,如何找到平衡?


過擬合與欠擬合 ⚠

過擬合像「死記」,欠擬合像「亂猜」,機器學習的關鍵就在找到平衡!

________________________________________


🔎 一、什麼是 過擬合(Overfitting)?


過擬合是機器學習中最常見且危險的現象之一。

定義:模型記住了太多訓練數據中的細節,甚至連資料中的「雜訊(Noise)」都當作重要特徵學起來了。

結果:在訓練集上表現極好,但一遇到沒看過的新資料,模型卻無法正確預測,失去了泛化能力。

生活比喻:像考試時只死背了所有範例題,但一旦題目稍微變化,就完全不會了。


✅ 過擬合現象的特徵:


訓練誤差(Training Error)很低

測試誤差(Testing Error)很高

模型過於複雜,決策邊界蜿蜒扭曲,硬要穿過所有點

________________________________________


🔎 二、什麼是 欠擬合(Underfitting)?


欠擬合是另一個極端,指模型學得太淺,連基本的資料規律都沒抓住。

定義:模型過於簡單,無法捕捉資料中的核心特徵或模式,導致表現不佳。

結果:無論訓練集還是測試集,模型都預測得很差。

生活比喻:像是考試前完全沒準備,看到題目只能亂猜,結果當然很慘。


✅ 欠擬合現象的特徵:


訓練誤差和測試誤差都很高

模型過於簡化,無法刻畫數據的真實規律

例如用一條直線去逼近一個非線性的資料集

________________________________________


🧠 三、為什麼會出現過擬合或欠擬合?


造成原因 過擬合 欠擬合

模型複雜度 過度複雜(層數多、參數多) 太簡單(模型太小、層數太少)

訓練資料量 太少,容易記住雜訊 資料量不足,無法學到規律

特徵工程 特徵太多且無篩選 特徵太少或關鍵特徵缺失

訓練次數 訓練過久,導致過度擬合 訓練不足,學習不完全

________________________________________


🎯 四、如何解決或避免?


✅ 過擬合的解法:


增加數據量:讓模型學習更多泛化規律


正則化(Regularization):

o L1 / L2 正則化,抑制權重過大

o Dropout(神經網路專用)


降低模型複雜度:減少層數或神經元數量

交叉驗證(Cross Validation):提早發現過擬合

提早停止(Early Stopping):在驗證集誤差開始上升時停止訓練


✅ 欠擬合的解法:


增加模型複雜度(加深網路、加特徵)

適當增加訓練輪數(Epoch)

選擇更強大的模型(例如從線性模型換成深度神經網路)

加入更多有效特徵或進行特徵工程

________________________________________


📈 五、視覺化圖解



測試誤差

▲ ____

| / \

| / \

|__________/_____________\____> 模型複雜度


欠擬合 最佳點 過擬合


✅ 左側(欠擬合):模型太簡單,無法捕捉規律

✅ 中間(最佳點):恰到好處,準確又穩健

✅ 右側(過擬合):模型過度學習,無法泛化

________________________________________


🌟 六、學習的最終目標:泛化能力(Generalization)

泛化能力強的模型才能「考試拿高分」

目標:模型不只會「背答案」,還要「舉一反三」

________________________________________


📌 總結重點口訣:


✅ 過擬合 = 背太熟,題目一變就不會

✅ 欠擬合 = 沒學好,怎麼考都不會

✅ 好模型 = 剛剛好,能抓到規律,適應新情況

________________________________________


📊 七、Python 實測:用學習曲線視覺化過擬合與欠擬合


透過 scikit-learn 的 learning_curve 工具,我們可以觀察隨著訓練樣本數增加,模型的表現如何變化,從而判斷是否過擬合或欠擬合。


📌 範例程式碼(以決策樹為例):


python


import numpy as np

import matplotlib.pyplot as plt

from sklearn.model_selection import learning_curve

from sklearn.tree import DecisionTreeClassifier

from sklearn.datasets import load_digits

from sklearn.model_selection import ShuffleSplit


# 載入資料集

X, y = load_digits(return_X_y=True)


# 模型與學習曲線設定

estimator = DecisionTreeClassifier(max_depth=3) # 可改變 max_depth 觀察效果

cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=0)


# 計算學習曲線

train_sizes, train_scores, test_scores = learning_curve(

estimator, X, y, cv=cv, n_jobs=-1,

train_sizes=np.linspace(0.1, 1.0, 10), scoring='accuracy'

)


# 計算平均與標準差

train_scores_mean = np.mean(train_scores, axis=1)

test_scores_mean = np.mean(test_scores, axis=1)


# 畫圖

plt.figure()

plt.title("Learning Curve - Decision Tree (max_depth=3)")

plt.xlabel("Training Examples")

plt.ylabel("Accuracy")

plt.grid()


plt.plot(train_sizes, train_scores_mean, 'o-', label="Training Score")

plt.plot(train_sizes, test_scores_mean, 'o-', label="Cross-validation Score")

plt.legend(loc="best")

plt.show()


這段程式碼透過 scikit-learn 套件與手寫數字資料集 load_digits(),建構一個最大深度為 3 的決策樹分類模型,並使用 learning_curve 函數計算模型在不同訓練資料量下的學習效果,進一步繪製出「訓練分數」與「交叉驗證分數」的學習曲線,藉此觀察模型是否出現 過擬合(train高、test低) 或 欠擬合(兩者皆低) 現象;plt.show() 是整段視覺化流程的最後一行,負責真正「顯示出」這張圖,讓我們能直觀地判斷模型的泛化能力與學習狀況。


🔍 分析結果:

若訓練分數高但驗證分數低:可能過擬合(模型背熟資料但無法應對變化)


兩者皆低且差距小:表示欠擬合(模型太弱)


兩者收斂且都高:模型有良好 泛化能力





留言
avatar-img
留言分享你的想法!
avatar-img
Hansen W的沙龍
7會員
112內容數
AIHANS沙龍是一個結合AI技術實戰、產業策略與自我成長的知識平台,主題涵蓋機器學習、生成式AI、創業經驗、財務規劃及哲學思辨。這裡不只提供系統化學習資源與實作案例,更強調理性思維與行動力的結合。無論你是AI初學者、創業者,還是追求人生升維的行者,都能在這裡找到前進的方向與志同道合的夥伴。
Hansen W的沙龍的其他內容
2025/05/28
非監督學習是資料探索的萬能瑞士刀:K-Means 快速分群、PCA 智慧降維、DBSCAN 抓離群、GAN 造影像、Apriori 挖關聯、SOM 畫腦圖,Autoencoder 更能自動壓縮並檢測異常。掌握這套工具箱,無需標籤也能洞見價值,讓資料自己說話;新手入門或專家優化皆受用,偵錯如虎添翼!
Thumbnail
2025/05/28
非監督學習是資料探索的萬能瑞士刀:K-Means 快速分群、PCA 智慧降維、DBSCAN 抓離群、GAN 造影像、Apriori 挖關聯、SOM 畫腦圖,Autoencoder 更能自動壓縮並檢測異常。掌握這套工具箱,無需標籤也能洞見價值,讓資料自己說話;新手入門或專家優化皆受用,偵錯如虎添翼!
Thumbnail
2025/05/28
SOM透過競爭學習與鄰域更新,把高維資料映射至2D網格並維持拓撲,可一眼看出群落、邊界與異常。無需標籤,特別適合客戶分群、金融風險、基因與市場行為探索,並支援降維與特徵萃取,U-Matrix視覺化使模式更直觀,是快速理解資料隱藏結構的神經網路利器。
Thumbnail
2025/05/28
SOM透過競爭學習與鄰域更新,把高維資料映射至2D網格並維持拓撲,可一眼看出群落、邊界與異常。無需標籤,特別適合客戶分群、金融風險、基因與市場行為探索,並支援降維與特徵萃取,U-Matrix視覺化使模式更直觀,是快速理解資料隱藏結構的神經網路利器。
Thumbnail
2025/05/28
Apriori逐層掃描,FP-Growth以FP-Tree壓縮,大幅加速挖掘購物籃規則。透過支持度、信賴度、提升度,快速找出「買A也買B」的黃金組合,優化推薦與行銷策略,並支援交叉銷售、庫存佈局及客群洞察,驅動精準營銷與利潤提升。
Thumbnail
2025/05/28
Apriori逐層掃描,FP-Growth以FP-Tree壓縮,大幅加速挖掘購物籃規則。透過支持度、信賴度、提升度,快速找出「買A也買B」的黃金組合,優化推薦與行銷策略,並支援交叉銷售、庫存佈局及客群洞察,驅動精準營銷與利潤提升。
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
本文介紹了人工智慧(AI)及機器學習(ML)的基本概念和關係,探討了數據在機器學習中的重要性,以及深度學習和生成式人工智慧的應用。
Thumbnail
本文介紹了人工智慧(AI)及機器學習(ML)的基本概念和關係,探討了數據在機器學習中的重要性,以及深度學習和生成式人工智慧的應用。
Thumbnail
AI繪圖要廣泛用於商用還有一大段路,還需要依賴人類的經驗判斷、調整,為什麼呢?
Thumbnail
AI繪圖要廣泛用於商用還有一大段路,還需要依賴人類的經驗判斷、調整,為什麼呢?
Thumbnail
這是一篇描述測試AI功能的文章,內容是一些隨心所欲的想法和想像,引導讀者思考現實世界及經歷。文章內容充滿了一些具有戲劇性和冒險色彩的詞彙和描述。
Thumbnail
這是一篇描述測試AI功能的文章,內容是一些隨心所欲的想法和想像,引導讀者思考現實世界及經歷。文章內容充滿了一些具有戲劇性和冒險色彩的詞彙和描述。
Thumbnail
加強媒體素養教育 : 教導學生如何辨識AI生成的資訊,培養批判性思維。 設計更有針對性的作業 : 要求學生提供思考過程,而不只是最終結果。 結合AI與傳統教學 : 善用AI優勢,同時保留人際互動和深度討論。 定期檢視AI工具 : 了解其局限性,並向學生說明可能的錯誤。 .....
Thumbnail
加強媒體素養教育 : 教導學生如何辨識AI生成的資訊,培養批判性思維。 設計更有針對性的作業 : 要求學生提供思考過程,而不只是最終結果。 結合AI與傳統教學 : 善用AI優勢,同時保留人際互動和深度討論。 定期檢視AI工具 : 了解其局限性,並向學生說明可能的錯誤。 .....
Thumbnail
科技發達,AI智能也越來越發達。 蠢孩子,我每篇小說的圖片都是用AI製作的唷!!
Thumbnail
科技發達,AI智能也越來越發達。 蠢孩子,我每篇小說的圖片都是用AI製作的唷!!
Thumbnail
筆記-曲博談AI模型.群聯-24.05.05 https://www.youtube.com/watch?v=JHE88hwx4b0&t=2034s *大型語言模型 三個步驟: 1.預訓練,訓練一次要用幾萬顆處理器、訓練時間要1個月,ChatGPT訓練一次的成本為1000萬美金。 2.微調(
Thumbnail
筆記-曲博談AI模型.群聯-24.05.05 https://www.youtube.com/watch?v=JHE88hwx4b0&t=2034s *大型語言模型 三個步驟: 1.預訓練,訓練一次要用幾萬顆處理器、訓練時間要1個月,ChatGPT訓練一次的成本為1000萬美金。 2.微調(
Thumbnail
這陣子使用AI模型,還有參考國內外一些喜歡玩語言模型的同好發文,一個很有趣的結論就是,有時候把大型語言模型(尤其ChatGPT)當作一個人來溝通,會得到比較好的結果,這的確是非常反直覺的,也就是說很多時候ChatGPT耍懶不肯工作的時候,你用加油打氣,或是情緒勒索的方法,確實是可以得到比較好的結果。
Thumbnail
這陣子使用AI模型,還有參考國內外一些喜歡玩語言模型的同好發文,一個很有趣的結論就是,有時候把大型語言模型(尤其ChatGPT)當作一個人來溝通,會得到比較好的結果,這的確是非常反直覺的,也就是說很多時候ChatGPT耍懶不肯工作的時候,你用加油打氣,或是情緒勒索的方法,確實是可以得到比較好的結果。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News