加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 簡單交叉驗證
    • K折交叉驗證(K-Fold)
    • 留一法交叉驗證(LOO-CV)
    • 留P法交叉驗證(LPO-CV)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

極速理解ML交叉驗證

10/02 10:55
594
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

交叉驗證(Cross Validation)是驗證分類器(你訓(xùn)練的模型)性能的一種統(tǒng)計分析方法。其基本思想是在某種意義下將原始訓(xùn)練數(shù)據(jù)進行分組,訓(xùn)練集和驗證集。所以對于一個大數(shù)據(jù)集,一般我們會把它按照 6:2:2 分成訓(xùn)練集、驗證集和測試集(簡易的機器學(xué)習(xí)過程會省去驗證集)。

首先用訓(xùn)練集對模型進行訓(xùn)練,再利用驗證集來測試訓(xùn)練得到的模型,以此來初步評價模型的性能(注意!交叉驗證還是處于訓(xùn)練的階段,不是測試階段)。
常見的交叉驗證方法包括簡單交叉驗證、K折交叉驗證、留一法交叉驗證留P法交叉驗證

簡單交叉驗證

就是上面最簡單的概念,將訓(xùn)練數(shù)據(jù)分為訓(xùn)練集和驗證集,訓(xùn)練集訓(xùn)練模型,驗證集驗證模型,驗證得到的準確率就是模型的性能指標。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( data, target, test_size=.4, random_state=0 )

K折交叉驗證(K-Fold)

將訓(xùn)練數(shù)據(jù)分為K組(一般是均分),然后將每個子集數(shù)據(jù)分別做一次驗證集,其余K-1組子集當作訓(xùn)練集,所以會進行K次交叉驗證,得到K個模型,將K個模型最終的驗證準確率取平均值,作為模型的性能指標,通常設(shè)K大于或等于3。

from sklearn.model_selection import KFold
kf = KFold(n_splits = 10) # k取10

留一法交叉驗證(LOO-CV)

留一法交叉驗證(leave-one-out cross validation)就是K折交叉驗證里K=N的情況,就是每個子集只由一個樣本數(shù)據(jù)組成,N個樣本數(shù)據(jù),所以會進行N次交叉驗證,得到N個模型,將N個模型最終的驗證準確率取平均值,作為模型的性能指標。

from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()

留P法交叉驗證(LPO-CV)

留P法交叉驗證(leave-p-out cross validation)則是從數(shù)據(jù)集中留下P個數(shù)據(jù)點作為驗證集,而其他的數(shù)據(jù)用作訓(xùn)練集。這個過程會遍歷所有可能的訓(xùn)練集/驗證集分割方式。如果數(shù)據(jù)集有N個樣本,那么將會有從N個樣本中選出P個樣本的組合方式,對于每一種組合,訓(xùn)練一次模型并評估一次性能。由于組合數(shù)可能非常大,這種方法在計算上通常非常昂貴,特別是當數(shù)據(jù)集的大小相對于P來說較大時。

from sklearn.model_selection import LeavePOut
lpo = LeavePOut(p=5) #p取5

相關(guān)推薦

電子產(chǎn)業(yè)圖譜