模型調參必備技能-交叉驗證

模型調參必備技能-交叉驗證


在一般訓練監督學習模型的時候,我們一般將數據分為訓練集和測試集來進行測試,比如訓練集為總樣本量的80%,測試集的總樣本量剩餘的20%。一般考慮將測試數據的評價指標(如準確率)作為整個模型的評價指標,因為我們訓練模型不是為了擬合,而是為了預測。

那麼在模型驗證時候,往往將總樣本數據只進行1次的訓練和測試的數據劃分是不合理的,因為這樣我們訓練的模型只是提高了那20%數據的準確率。實際在訓練模型時我們最常用的方法就是K折交叉驗證,英文為K-fold方法。

K折交叉驗證非常容易理解,就是將樣本集分成K份,依次將其中1份作為測試集,餘下作為訓練集,那麼循環下來就是進行了K次的訓練,得到K個評價指標,將這K個評價指標的均值作為模型的評價指標。一般K取值為5或10,根據樣本的總體數量決定。

[python]


import numpy as np
from sklearn.model_selection import KFold
from sklearn.svm import SVC
clf = SVC(C=0.1)
X = np.random.rand(50,4)

y = np.random.randint(4,size =(50,1))
kf = KFold(n_splits=5)
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
model_train = clf.fit(X_train, y_train)
y_predict = clf.predict(X_test)
print(y_predict)

這種方式的交叉驗證,相當於半自動化的拆分,這樣做的好處是我們能得到每個測試樣本的模型輸出結果,有助於我們根據業務模型分析錯誤結果的原因,總結出到底什麼樣的數據會經常出錯,其實這是一種非常有用的改進模型的方式。

當然在更高級的自動尋參方式如GridsearchCV中,直接一個參數cv=5,函數包就會把你的樣本數據進行拆分進行交叉驗證,你坐等 查看模型的訓練結果即可。但是這相當於是個黑盒,我們只得到了模型評價結果,無法分析具體是哪些樣本錯了。


分享到:


相關文章: