交叉驗證(cross-validation)主要用於建模應用中,例如pcr 、pls 回歸建模中。在給定的建模樣本中,拿出大部分樣本進行建模型,留小部分樣本用剛建立的模型進行預報,並求這小部分樣本的預報誤差,記錄它們的平方加和。
而我們常用的就是k折交叉驗證。k折就是講資料集切分成k小塊,驗證集和測試集相互形成補集,迴圈交替,它有效的避免過學習以及欠學習狀態的發生,最後得到的結果也比較具有說服性
你可能會問k選多少合適呢?我個人根據情況和個人喜好調節,常用的k值有3,6,10等。
k折交叉驗證,初始取樣分割成k個子樣本,乙個單獨的子樣本被保留作為驗證模型的資料,其他k-1個樣本用來訓練。交叉驗證重複k次,每個子樣本驗證一次,平均k次的結果或者使用其它結合方式,最終得到乙個單一估測。這個方法的優勢在於,同時重複運用隨機產生的子樣本進行訓練和驗證,每次的結果驗證一次,10折交叉驗證是最常用的。
交叉驗證的基本思想是把在某種意義下將原始資料(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set or test set),首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型(model),以此來做為評價分類器的效能指標。
用交叉驗證的目的是為了得到可靠穩定的模型。在深度學習中可以使用影象的亮度,旋轉,灰度,翻轉等等(博主cv方向),也就是所謂的資料增強,二機器學習中此種方法也就類似於此。
在建立pcr 或pls 模型時,乙個很重要的因素是取多少個主成分的問題。用cross validation 校驗每個主成分下的press值,選擇press值小的主成分數。或press值不再變小時的主成分數。
###4. sklearn實現
def
by_sklearn
(k):
train =
list()
test =
list()
x = np.random.random_integers(10,
20, size=(4
,2))
kf = kfold(n_splits=k)
for train_index, test_index in kf.split(x):)
)return train, test
def
by_keras
(param)
: data = np.random.randint(0,
100, size=
(100,12
))x = data[:,
0:11]
y = data[:,
11]model = sequential(
) model.add(dense(
18, input_dim=
12, activation=
'relu'))
model.add(dense(
12, activation=
'relu'))
model.add(dense(
1, activation=
'sigmoid'))
model.
compile
(loss=
'binary_crossentropy'
, optimizer=
'adam'
, metrics=
['accuracy'])
model.fit(x, y, validation_data=
0.33
, epochs=
100, batch_size=10)
return x, y
詳細**見搓這裡
測試準確度的乙個缺點是其樣本準確度是乙個高方差估計(high variance estimate),所以該樣本準確度會依賴不同的測試集,其表現效果不盡相同。
交叉驗證的過程
選擇k的值(一般是10),將資料集分成k等份
使用其中的k-1份資料作為訓練資料,另外乙份資料作為測試資料,進行模型的訓練
使用一種度量測度來衡量模型的**效能
交叉驗證的優點
交叉驗證通過降低模型在一次資料分割中效能表現上的方差來保證模型效能的穩定性
交叉驗證可以用於選擇調節引數、比較模型效能差別、選擇特徵
交叉驗證的缺點
交叉驗證帶來一定的計算代價,尤其是當資料集很大的時候,導致計算過程會變得很慢
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個模型,對他們的誤差取平均,來評估你選擇的模型好不好,...