評估機器學習模型的方法

2022-07-06 18:57:10 字數 2643 閱讀 1696

我們將資料劃分為訓練集、驗證集和測試集,並沒有在訓練模型的相同資料上對模型進行評估,其原因很快顯而易見:僅僅幾輪過後,三個模型都開始過擬合。也就是說,隨著訓練的進行,模型在訓練資料上的效能始終在提高,但在前所未見的資料上的效能則不再變化或者開始下降。

機器學習的目的是得到可以泛化( generalize)的模型

評估模型的重點是將資料劃分為三個集合:訓練集、驗證集和測試集。在訓練資料上訓練模型,在驗證資料上評估模型。一旦找到了最佳引數,就在測試資料上最後測試一次。

在於開發模型時總是需要調節模型配置,比如選擇層數或每層大小[這叫作模型的超引數( hyperparameter),以便與模型引數(即權重)區分開]。這個調節過程需要使用模型在驗證資料上的效能作為反饋訊號。這個調節過程本質上就是一種學習:在某個引數空間中尋找良好的模型配置。因此,如果基於模型在驗證集上的效能來調節模型配置,會很快導致模型在驗證集上過擬合,即使你並沒有在驗證集上直接訓練模型也會如此。

造成這一現象的關鍵在於資訊洩露( information leak)。每次基於模型在驗證集上的效能來調節模型超引數,都會有一些關於驗證資料的資訊洩露到模型中。如果對每個引數只調節一次,那麼洩露的資訊很少,驗證集仍然可以可靠地評估模型。但如果你多次重複這一過程(執行一次實驗,在驗證集上評估,然後據此修改模型),那麼將會有越來越多的關於驗證集的資訊洩露到模型中。最後,你得到的模型在驗證集上的效能非常好(人為造成的),因為這正是你優化的目的。 因此你需要使用乙個完全不同的、前所未見的資料集來評估模型,它就是測試集。**你的模型一定不能讀取與測試集有關的任何資訊,即使間接讀取也不行。 **

將資料劃分為訓練集、驗證集和測試集可能看起來很簡單,但如果可用資料很少,還有幾種高階方法可以派上用場。我們先來介紹三種經典的評估方法:簡單的留出驗證、 k 折驗證,以及帶有打亂資料的重複 k 折驗證 。

留出一定比例的資料作為測試集。在剩餘的資料上訓練模型,然後在測試集上評估模型。如前所述,為了防止資訊洩露,你不能基於測試集來調節模型,所以還應該保留乙個驗證集。

如果可用的資料很少,那麼可能驗證集和測試集包含的樣本就太少,從而無法在統計學上代表資料。這個問題很容易發現:如果在劃分資料前

進行不同的隨機打亂,最終得到的模型效能差別很大,那麼就存在這個問題。

k 折驗證( k-fold validation)將資料劃分為大小相同的 k 個分割槽。

k 折驗證

對於每個分割槽 i,在剩餘的 k-1 個分割槽上訓練模型,然後在分割槽 i 上評估模型。最終分數等於 k 個分數的平均值。

對於不同的訓練集 - 測試集劃分,如果模型效能的變化很大,那麼這種方法很有用。

k 折交叉驗證的實現偽**:

k = 3  # 假設3折驗證

num_validation_samples = len(train_data) // k # 分割槽後每個分割槽的樣本數

validation_scores = # 記錄每輪得分

np.random.shuffle(train_data) # 可選,用於隨機打亂資料

for fold in range(k):

# 劃分分割槽

vali_begin = num_validation_samples * fold

vali_end = num_validation_samples * (fold + 1)

# 分割出本折的訓練集和驗證集

vali_data = train_data[vali_begin: vali_end]

vali_targets = train_targets[vali_begin: vali_end]

partial_train_data = train_data[: vali_begin] + train_data[vali_end:]

partial_train_targets = train_targets[: vali_begin] + targets_data[vali_end:]

# 獲得乙個模型並訓練

model = build_model()

model.fit(partial_train_data, partial_train_targets)

score = evaluate(model, vali_data, vali_targets)

vali_score = np.mean(validation_scores) # 最終驗證分數:k 折驗證分數的平均值

如果可用的資料相對較少,而你又需要盡可能精確地評估模型,那麼可以選擇帶有打亂資料的重複 k 折驗證( iterated k-fold validation with shuffling)。

重複 k 折驗證

多次使用 k 折驗證,在每次將資料劃分為 k 個分割槽之前都先將資料打亂。最終分數是每次 k 折驗證分數的平均值。

機器學習模型評估方法

分類模型評價度量 概率輸出型 這個有邏輯回歸 隨機森林 梯度提公升 adaboost等演算法,都是以概率作為輸出的。要想把概率型輸出變為分型別輸出,只要為其設立乙個閾值即可。positive predictive value 陽性 值 or precision 精度 陽性 值被 正確的比例。nega...

機器學習方法 機器學習模型評估方法

通常我們採用實驗測試的方法對模型的泛化誤差做出評估。為此我們就需要乙個測試集用來測試訓練好的模型。通常情況下,在我們拿到資料之後,在正式開始訓練模型前,就會將資料劃分為訓練集合測試集。需要注意的是 訓練集與測試集應盡可能互斥,也就是盡量不要重複。測試集要符合真實樣本的分布,也就是說在劃分時要隨機抽樣...

機器學習中模型評估方法

交叉驗證 什麼是交叉驗證 cv 交叉驗證的基本思想是把在某種意義下將原始資料 dataset 進行分組,一部分做為訓練集 train set 另一部分做為驗證集 validation set or test set 首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型 model 以此來做...