使用交叉驗證技術提高模型準確率


介紹

交叉驗證 (CV) 是一種訓練機器學習模型的方法,其中多個模型在資料的一部分上進行訓練,然後評估其效能或在獨立的未見資料集中進行測試。在交叉驗證技術中,我們通常迭代地將原始訓練資料分成不同的部分,以便演算法在資料的每個部分上進行訓練和驗證,在這個過程中沒有一個部分被遺漏。

在本文中,讓我們深入瞭解交叉驗證技術及其在提高模型準確性方面的重要性。

交叉驗證 (CV)

交叉驗證是在許多情況下提高準確性的首選技術,但當資料有限時它非常有用。它透過使用資料取樣的輪換方案並使用這些部分來訓練多個模型並選擇最佳模型,從而防止模型過擬合。原始資料被隨機取樣並分成不同的資料集。然後,模型在所有子集上進行測試,留下一個用於評估模型效能或簡單測試的子集。在某些情況下,我們可以進行多輪交叉驗證,並取最終結果的平均值。

交叉驗證的重要性是什麼?

交叉驗證在提高模型準確性方面非常重要。當資料集較小時,這一事實通常很明顯。例如,讓我們考慮預測地震的機率。對於這種情況,我們需要諸如緯度、經度、發生日期、深度、深度誤差、位置源、震級源、震級型別等資料。為了確定地震發生的機率,我們需要訓練模型並對其進行測試。由於資料集很小,如果所有資料都用於訓練,模型將學習所有變化甚至噪聲並過擬合。將沒有資料剩餘用於測試模型效能。在實際場景中,我們在使用預測模型時可能會遇到未見資料的變化,因此在這種情況下它可能無法很好地執行。

解決此問題的方法是使用交叉驗證,這是一種將資料集劃分為多個子集的隨機重取樣技術,這些子集通常稱為 k 折交叉驗證,其中 k 表示子集的數量,例如 5、10 等。在交叉驗證中,模型在除一個子集之外的所有子集上進行訓練,該子集用於測試。測試集是完全未見的資料,可用於正確評估模型。

交叉驗證的型別

它們分為兩種型別——窮舉和非窮舉。在窮舉策略中,所有技術都應用於透過應用所有組合將資料集劃分為訓練和測試子集。但是,在非窮舉中,不使用創新的方法來拆分資料集。

留出法

在這種型別的交叉驗證中,初始資料集僅分成兩部分——訓練子集和測試子集。模型在訓練集上進行訓練並在測試集上進行評估。這是一種非窮舉方法。例如,資料集可以按 70:30 或 75:25 等比例拆分。這裡,每次訓練時結果可能會有所不同,因為資料點的組合會有所不同。這種方法通常用於資料集很大或存在時間限制以快速訓練模型並儘快獲得結果時。

K 折交叉驗證

與留出法相比,這是一種更好的方法,因為它是對留出法的重大改進。它是非窮舉的,並且不依賴於資料集如何拆分為訓練和測試子集。K 折交叉驗證中的 K 表示資料集的折數或分割槽數,例如 5 折、10 折等。

在 K 折交叉驗證中,模型在所有 K-1 個數據集上進行訓練,並在第 k 個數據集上測試效能。此過程持續進行,直到每個折數至少用作驗證集一次。在 K 折迭代後,模型取模型結果的平均值。

K 折模型有助於減少偏差並提高準確性,因為每個資料集都有機會充當訓練集和測試集。但是,K 折交叉驗證的過程可能有點耗時。

分層 K 折交叉驗證

在 K 折交叉驗證中,我們可能會遇到問題,因為該方法隨機抽樣資料並進行混洗和拆分,並且資料集可能會變得不平衡。讓我們用一個例子來理解它。

例如,假設我們必須將電子郵件分類為垃圾郵件和非垃圾郵件。在 K 折交叉驗證中,可能會發生在一個折數中,我們可能會獲得更多垃圾郵件類別的電子郵件,而對非垃圾郵件的表示較少,這可能會產生有偏差的評估結果。

為了解決此問題,使用了名為分層的方法,其中確保每個拆分或子集都具有相同數量的兩個類別(或在多類分類的情況下為 N 個類別)。這是分層 K 折背後的理念。

交叉驗證技術的實現

from sklearn import datasets
from sklearn.model_selection import KFold, cross_val_score
from sklearn.tree import DecisionTreeClassifier as DTC
x_train, y_train = datasets.load_iris(return_X_y=True)
model = DTC(random_state=1)
foldsK = KFold(n_splits = 10)
s = cross_val_score(model, x_train, y_train, cv = foldsK)
print("Scores CV", s)
print("Avg CV score: ", s.mean())
print("No of CV scores used in Avg: ", len(s))

輸出

Scores CV [1.         1.         1.         0.93333333 0.93333333 0.86666667
 1.         0.86666667 0.86666667 1.        ]
Avg CV score:  0.9466666666666667
No of CV scores used in Avg:  10

結論

交叉驗證是一種用於訓練機器學習模型的高效且流行的技術。它極大地提升了模型的整體效能和準確性,就像它如何有效地拆分和使用資料集一樣。在每個機器學習過程中應用此技術至關重要,以確保獲得具有更高準確性的更好的模型輸出。

更新於:2023 年 9 月 26 日

191 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告