機器學習(machine learning)與 深度學習(deep learning)的相關研究中,經常會將資料集(dataset)劃分為訓練集(training set)跟測試集(testing set)這兩個子集,訓練集用以建立模型(model),測試集則用來評估該模型對未知樣本進行**時的精確度,正規的說法是模型的泛化能力(generalization ability)。
但是有時候我們的資料點少,訓練集和測試集就會很少,因此模型結果可能會有很大波動。也就是說,訓練集和測試集的劃分方式可能會對模型產生很大影響,這就無法對模型進行可靠評估。
在樣本量不充足的情況下,為了充分利用資料集對演算法效果進行測試,將資料集隨機分為k個小資料集,每次將其中乙個小資料集作為測試集,剩下k-1個小資料集作為訓練集進行訓練,這就是k-折交叉驗證
注意:當你把原始資料的訓練集和測試集都劃分好了之後,做k折交叉驗證需要在原來的訓練集上做,得出相關的結論,再在測試集上看結果。
這個方法的優勢在於,同時重複運用隨機產生的子樣本進行訓練和驗證,每次的結果驗證一次。(注意每次作為驗證模型的資料是不同的)
下面附上python中sklearn庫實現k折交叉驗證**:
再來看看結果:
最後來看看這些引數的意思:
1.n_splits:表示劃分幾等份,也就是k折。
2.shuffle :布林值,可選。是否在分割成批次之前打亂資料。
3.random_state :值為 int,randomstate例項或none,可選,預設=none
…如果是int,則random_state是隨機數生成器使用的種子;
…如果是randomstate例項,則random_state是隨機數生成器;
…如果是none,隨機數生成器所使用的randomstate例項是np.random。
…random_state,在shuffle== true時使用.
5.get_n_splits() 返回交叉驗證器中的拆分迭代次數
6.split() 將資料拆分為訓練和測試集。
當然啦,作為乙個合格的程式設計師,程式當然得自己寫,下面附上乙個我在做乙個案例時用的交叉驗證**吧
k折交叉驗證
在做機器學習這方面研究的時候,例如pcr和pls等演算法時常會遇到最佳潛變數的選取,神經元個數的選取 這些引數的選取對模型的質量產生極大的影響。如果人為選取,這樣是十分不可靠的也是不現實的。進行交叉驗證是乙個優秀模型形成必不可少的過程。交叉驗證的目的是為了得到更為穩健可靠的模型。交叉驗證的方法有許多...
K折交叉驗證
k 層交叉檢驗之後,我們得到 k 個不同的模型誤差估算值 e1,e2 ek 理想的情況是,這些誤差值相加得 0 要計算模型的偏誤,我們把所有這些誤差值相加。平均值越低,模型越優秀。模型表現變化程度的計算與之類似。取所有誤差值的標準差,標準差越 明模型隨訓練資料的變化越小。from sklearn i...
K折交叉驗證 (cv)
之前一直理解錯了 我知道k折交叉驗證是在模型選擇過程 model selection 中用來評估候選模型的。把整個訓練集分成k份,一共進行k次評估,每次用k 1份訓練,用1份來驗證。之前以為這k次是對同乙個模型迭代訓練的,其實不是!其實是產生了k個模型,對他們的誤差取平均,來評估你選擇的模型好不好,...