跳到主要內容

淺談機器學習原理-估模型好壞

評估模型好壞

淺談機器學習原理筆記--

評估模型好壞

  • MSE (Mean Squared Error) 是用來評估模型預測值與實際值之間差異的一種常用指標。將預測誤差平方後平均,懲罰大誤差, MSE 的值越小,表示模型的預測越準確。公式如下:

    MSE=1ni=1n(yiy^i)2MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

    其中:

    • ( n ) 是樣本數量
    • ( y_i ) 是實際值
    • ( \hat{y}_i ) 是模型的預測值

適合用 MSE 的情境:

  1. 回歸(Regression)問題

不適合用 MSE 的情境:

  1. 資料尺度差異大 :
  2. 對離群值敏感的場景:資料裡常有極端值
  3. 分類問題(Classification)

RMSE (Root Mean Squared Error)

  • RMSE (Root Mean Squared Error)
    RMSE 是 MSE 的平方根,能夠將誤差的單位與原始數據保持一致,因此更容易解釋。公式如下:

    RMSE=1ni=1n(yiy^i)2RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2}

    其中:

    • ( n ) 是樣本數量
    • ( y_i ) 是實際值
    • ( \hat{y}_i ) 是模型的預測值

    適用情境:

    • 與 MSE 類似,適合回歸問題。
    • 結果的單位和原數據一樣,例如房價是 $10,000,那 RMSE = 8,000 是好解釋的。

    不適合用 RMSE 的情境 :

    • 與 MSE 一樣,對離群值敏感。
  • MAE (Mean Absolute Error)
    MAE 是另一種用來評估模型預測誤差的指標,計算的是預測值與實際值之間誤差的絕對值平均。公式如下:

    MAE=1ni=1nyiy^iMAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|

    其中:

    • ( n ) 是樣本數量
    • ( y_i ) 是實際值
    • ( \hat{y}_i ) 是模型的預測值

    適用情境:

    • 回歸問題,尤其是對離群值不敏感的場景。
    • 當需要簡單解釋誤差時,MAE 提供了直觀的平均偏差。

    不適合用 MAE 的情境:

    • 當需要懲罰大誤差時,MAE 不如 MSE 或 RMSE 敏感。
    • 當數據尺度差異較大時,MAE 可能無法提供足夠的信息。
  • R2R^2 Score (決定係數)
    R2R^2 Score 衡量的是「你的模型預測有多接近真實值」,可以理解為模型對資料的解釋力或擬合度。是用來評估回歸模型性能的一個指標,表示模型解釋變異的能力。其值介於 0 和 1 之間,越接近 1 表示模型的解釋能力越強。公式如下:

    R2=1i=1n(yiy^i)2i=1n(yiyˉ)2R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}

    其中:

    • ( y_i ): 實際值
    • ( \hat{y}_i ): 模型的預測值
    • ( \bar{y} ): 實際值的平均值
    • ( n ): 樣本數量

    適用情境:

    • 回歸問題,尤其是需要衡量模型對數據變異的解釋能力時。
    • 用於比較不同回歸模型的性能。

    注意事項:

    • R2=1R^2 = 1 時,表示模型完美擬合數據。(預測值 = 真實值)
    • R2=0R^2 = 0 時,表示模型的預測能力與簡單使用平均值的模型相同。
    • R2R^2可能為負值,表示模型的預測能力比使用平均值更差。

    範例:
    假設我們有以下數據:

    • 實際值 y=[3,0.5,2,7]y = [3, -0.5, 2, 7]
    • 預測值 y^=[2.5,0.0,2,8]\hat{y} = [2.5, 0.0, 2, 8]

    因此,模型的 ( R^2 ) Score 約為 0.948,表示模型能解釋約 94.8% 的數據變異。

    適用情境:

    • 回歸問題

    不適合用 MAE 的情境:

    • 如果資料有離群值,R² 容易被影響
  • 混淆矩陣(Confusion Matrix) 是用來評估分類模型性能的一種工具。它是一個表格,顯示了模型的預測結果與實際結果之間的對應關係。混淆矩陣的基本結構如下:

    實際\預測 陽性 (Positive) 陰性 (Negative)
    陽性 TP (True Positive) FN (False Negative)
    陰性 FP (False Positive) TN (True Negative)
    • TP (True Positive): 實際為陽性,且模型預測為陽性
    • FN (False Negative): 實際為陽性,但模型預測為陰性
    • FP (False Positive): 實際為陰性,但模型預測為陽性
    • TN (True Negative): 實際為陰性,且模型預測為陰性

    常見指標

    1. 準確率 (Accuracy):

      Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP + TN}{TP + TN + FP + FN}

      表示模型預測正確的比例。
    2. 精確率 (Precision):

      Precision=TPTP+FPPrecision = \frac{TP}{TP + FP}

      表示模型預測為陽性的結果中,實際為陽性的比例。
    3. 召回率 (Recall):

      Recall=TPTP+FNRecall = \frac{TP}{TP + FN}

      表示實際為陽性的樣本中,被模型正確預測為陽性的比例。
    4. F1 分數 (F1 Score):

      F1=2PrecisionRecallPrecision+RecallF1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall}

      是精確率與召回率的調和平均,用於平衡兩者。

    適用情境

    • 分類問題: 如垃圾郵件檢測、醫學診斷、信用卡欺詐檢測等。
    • 不平衡資料集: 當正陰性樣本數量差異較大時,混淆矩陣能提供更細緻的評估指標。
    • 模型調參: 幫助選擇最佳的分類閾值或模型參數。

    範例

    假設我們有一個二元分類問題,模型預測結果如下:

    • 實際陽性: 50 個
    • 實際陰性: 50 個
    • 預測陽性: 40 個,其中 35 個為正確預測 (TP),5 個為錯誤預測 (FP)
    • 預測陰性: 60 個,其中 45 個為正確預測 (TN),15 個為錯誤預測 (FN)

    混淆矩陣如下:

    實際\預測 陽性 (Positive) 陰性 (Negative)
    陽性 35 15
    陰性 5 45

    根據此矩陣,我們可以計算:

    • 準確率:
    • Accuracy=35+45100=0.8Accuracy = \frac{35 + 45}{100} = 0.8

    • 精確率:
    • Precision=3535+5=0.875Precision = \frac{35}{35 + 5} = 0.875

    • 召回率:
    • Recall=3535+15=0.7Recall = \frac{35}{35 + 15} = 0.7

    • F1 分數:

      F1=20.8750.70.875+0.70.778F1 = 2 \cdot \frac{0.875 \cdot 0.7}{0.875 + 0.7} \approx 0.778

參考資料

留言

這個網誌中的熱門文章

JavaBean 和POJO

前言 今天介紹JavaBean和POJO的不同,這兩個名詞在JAVA文章常常被拿來使用以及討論。在JDK1.1時候釋出才有的一個標準架構,很多時候常常被搞混,所以我們特別開闢一章來加以討論。POJO規範在企業級應用已經廣大的被使用的規範。 解釋 POJO : 全名為Plain-old-Java-object,只需要繼承Object就可以,沒有特定規定,只要建立的類別有setter/getter方法都可以稱為POJO JavaBean: JavaBean通常用來封裝多個物件成為單獨物件使用,規範比較嚴格,規則如下 規則 說明 1 需要實作序列(Serializable/Externalizable) 2 不能有參數的建構子( no-arg constructor) 3 需要有公用setter/getter 4 屬性必須要私人(private) 5 屬於特定POJO規則 比較 所有的JavaBean都為POJO,但是所有的POJO不一定為JavaBean 都可以當作重複元件 都必須序列化 特性都為可用性、易用性和持久化使用 - 應用 由圖我們可以知道POJO在應用程式中,主要用來存取資料庫資料達到持久化的目的,並提供給商業邏輯流程處理使用。這種POJO的架構提供程式人員開發時的可以很有規則將資料封裝並加以使用。 範例1. JavaBean(以員工為實例) JavaBean建立員工物件,可以發現Employee物件建構子沒有任何參數,屬性為私有化並setter/getter的命名方式。 //實作序列化 public class Employee implements java.io.Serializable{ private int id; private String name; //無參數建構子 public Employee(){} //以下實作setter/getter public void setId(int id){this.id=id;} public int getId(){return id;} public void setName(String ...

GSON基礎教學

GSON 前言 JSON是很常見的資料交換格式,在JAVA領域常用處理JSON的函式庫:GSON、FastXML和JSON-B,本章節會以GSON為主,學習目標如下 JSON格式說明 GSON 套件函式 GSON: 物件轉換JSON字串 GSON: JSON字串轉換物件 JSON 格式說明 JSON全名為JavaScript Object Notation,它是一種輕量級的資料交換格式,會大為流行的理由,主要是他比傳統用xml更輕巧且容易處理, JSON表達方式物件會用大括弧{},陣列則是用中括號[]。 用JSON字串來表達Employee的物件內容,由JSON字串可以知道物件name、age、sex和salary屬性。 JSON表示員工資料方式: {“name”:”Jack Bryant”, “age”:18, “sex”:”M”,”salary”:3500.00} JSON陣列表示方式: 跟我們使用JAVA的陣列方式類似,內容值可以是數字’、文字、布林、陣列、物件、null等等。 範例: 字串: [“紅”、”橙”、”黃”、”綠”、”青”、”藍”、”紫”} 布林: [true, true, false, false, true, true] GSON 套件函式 Gson為google所發布的函式庫,主要將物件與json字串之間的轉換時方便使用。當我們將JAVA物件轉換成JSON字串稱為 序列化 ,JSON字串轉換至JAVA物件稱為 反序列化 。 GSON: 物件轉換JSON字串 有了JSON基本概念後,我們進入本章重點,首先我們需要建立員工類別(Employee),定義如下 物件 屬性 員工類別 Employee name 名字 age 年紀 sex 性別 salary 薪水 /** * name:員工類別 */ public class Employee implements Serializable { //constructor public Employee(String name, double salary){ this.name = name; this.sala...

H2資料庫(1)-基本安裝與介紹

H2資料庫介紹 H2為嵌入式資料庫,使用java開發,跨平台且內含資料庫管理介面,好處開發階段方便開發人員使用。 比較 詳細比較表: http://www.h2database.com/html/features.html#comparison 由圖比較可以知道,H2比其他資料庫更為優勢,以下會介紹開發時常用的模式: 嵌入式模式Embedded Mode 嵌入式資料庫會與應用程式共用同一JVM底層,在這個模式下persistent或是in-memory資料庫都支援,也沒有連線數的限制。但壞處是只可以給該應用程式使用,其他人無法直接存取資料庫。 伺服器模式 Server Mode 外部應用程式可以藉由JDBC或是OBC的方式連結該資料庫,它也支援persistent或是in-memory資料庫,也沒有連線數的限制。 混合模式 Mixed Mode 同時有嵌入式與伺服器的模式去讓外部應用程式連線或是自己應用程式連線。 安裝H2 database 官方網站: http://www.h2database.com/html/main.html 下載安裝程式 出現安裝連結,本次範例使用 Windows installer 的安裝連結 下載安裝程式後,點擊兩下,進入安裝畫面,按”下一步” 一直按”下一步”後,會出現”完成” 安裝完成後,會出現一個說明網頁,你可以點選Quickstart 它會告訴你,如何進入DBRMS畫面以及開啟資料庫服務 開啟windows的視窗圖示,執行 H2 Console後,會執行H2資料庫 進入DBRMS的登入畫面,使用者預設為”SA”,密碼為空值”“,按下”connect”進入,SQL命令中心 登入後,可以在空白處執行SQL語法 8.大致上安裝H2資料庫滿快速,操作畫面也是很好上手,如果系統在開發階段個人覺的滿推薦給大家使用看看。 參考 H2官方網站