交叉驗證(Cross Validation)方法思想
Cross Validation一下簡稱CV。CV是用來驗證分類器性能的一種統計方法。
思想:將原始數據進行分組,一部分作為訓練集,另一部分作為驗證集,首先用訓練集對分類器進行訓練,然后利用驗證集來測試訓練得到的模型(model),以此來作為評價分類器的性能指標。
常用CV方法:
1. Hold-Out Method
將原始數據隨機分為兩組,一組作為訓練集,一組作為驗證集,利用訓練集訓練分類器,然后利用驗證集驗證模型,記錄最后的分類准確率為Hold-OutMethod下分類器的性能指標。
由於是隨機的將原始數據分組,所以最后驗證分類准確率的高低與原始數據的分組有很大關系,這種方法 得到的結果不具有說服性。
2. K-fold Cross Validation(記為K-CV)
k折交叉驗證:將原始數據分為K組(一般是均分),將每個子集數據分別做一次驗證集,其余的K-1組子集數據作為訓練集,這樣會得到K個模型,用這K個模型的驗證集的分類准確率的平均數作為K-CV分類器的性能指標。
3. Leave-One-Out Cross Validation(記為LOO-CV)
留一驗證(LOOCV)意指只使用原本樣本中的一項來當做驗證集, 而剩余的則留下來當做訓練集。 這個步驟一直持續到每個樣本都被當做一次驗證集。
LOO-CV有兩個明顯的優點:
- 每一回合中幾乎所有的樣本皆用於訓練模型,因此最接近原始樣本的分布,這樣評估所得的結果比較可靠。
- 實驗過程中沒有隨機因素會影響實驗數據,確保實驗過程是可以被復制的。
LOO-CV的缺點:
計算成本高,因為需要建立的模型數量與原始數據樣本數量相同。
主要函數:
函數:
sklearn.cross_validation.cross_val_score
調用形式:
sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None, cv=None,n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')
返回值就是對於每次不同的划分raw data(未加工的數據)時,在test data上得到的分類的准確率。
參數解釋:
estimator:不同的分類器,可以是任何分類器。比如支持向量機分類器:estimator = svm.SVC(kernel = 'linear', C = 1)
(kernel:核心 linear:直線)
cv:代表不同的cross validation的方法。如果cv是一個int值,並且提供rawtarget參數,那么就代表使用StratifiedKFold分類方式;如果cv是一個int值,並且沒有提供rawtarget參數,那么就代表使用KFold分類方式;也可以給它一個cv迭代策略生成器,指定不同的cv方法。
scoring:默認None,准確率的算法,可以通過score_func參數指定;如果不指定的話,是用estimator默認自帶的准確率方法。