sklearn中的交叉验证(Cross-Validation)
sklearn中的交叉驗(yàn)證(Cross-Validation)
? ? cross validation大概的意思是:對(duì)于原始數(shù)據(jù)我們要將其一部分分為traindata,一部分分為test data。train data用于訓(xùn)練,test data用于測(cè)試準(zhǔn)確率。在test data上測(cè)試的結(jié)果叫做validation error。將一個(gè)算法作用于一個(gè)原始數(shù)據(jù),我們不可能只做出隨機(jī)的劃分一次train和testdata,然后得到一個(gè)validation error,就作為衡量這個(gè)算法好壞的標(biāo)準(zhǔn)。因?yàn)檫@樣存在偶然性。我們必須多次的隨機(jī)的劃分train data和test data,分別在其上面算出各自的validation error。這樣就有一組validationerror,根據(jù)這一組validationerror,就可以較好的準(zhǔn)確的衡量算法的好壞。crossvalidation是在數(shù)據(jù)量有限的情況下的非常好的一個(gè)evaluate performance的方法。而對(duì)原始數(shù)據(jù)劃分出train data和testdata的方法有很多種,這也就造成了cross validation的方法有很多種。
1.?train_test_split
對(duì)數(shù)據(jù)集進(jìn)行快速打亂(分為訓(xùn)練集和測(cè)試集)
這里相當(dāng)于對(duì)數(shù)據(jù)集進(jìn)行了shuffle后按照給定的test_size?進(jìn)行數(shù)據(jù)集劃分。
2.?cross_val_score
對(duì)數(shù)據(jù)集進(jìn)行指定次數(shù)的交叉驗(yàn)證并為每次驗(yàn)證效果評(píng)測(cè)
調(diào)用方式:
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')返回值就是對(duì)于每次不同的的劃分raw data時(shí),在test data上得到的分類的準(zhǔn)確率。
參數(shù)解釋:
estimator:是不同的分類器,可以是任何的分類器。比如支持向量機(jī)分類器:estimator = svm.SVC(kernel='linear', C=1)
cv:代表不同的cross validation的方法。如果cv是一個(gè)int值,并且如果提供了rawtarget參數(shù),那么就代表使用StratifiedKFold分類方式;如果cv是一個(gè)int值,并且沒有提供rawtarget參數(shù),那么就代表使用KFold分類方式;也可以給定它一個(gè)CV迭代策略生成器,指定不同的CV方法。
scoring:默認(rèn)Nnoe,準(zhǔn)確率的算法,可以通過score_func參數(shù)指定;如果不指定的話,是用estimator默認(rèn)自帶的準(zhǔn)確率算法。
3.?KFold? (K折交叉驗(yàn)證)
最基礎(chǔ)的CV算法,也是默認(rèn)采用的CV策略?。主要的參數(shù)包括兩個(gè),一個(gè)是樣本數(shù)目,一個(gè)是k-fold要?jiǎng)澐值姆輸?shù)。
1 fromsklearn.model_selection import KFold 2 X= np.array([[1, 2], [3, 4], [1, 2], [3, 4]]) 3 y= np.array([1, 2, 3, 4]) 4 kf= KFold(n_splits=2) 5 kf.get_n_splits(X)#給出K折的折數(shù),輸出為2 6 print(kf) 7 #輸出為:KFold(n_splits=2, random_state=None,shuffle=False) 8 for train_index, test_index in kf.split(X): 9 print("TRAIN:",train_index, "TEST:", test_index) 10 X_train,X_test = X[train_index], X[test_index] 11 y_train,y_test = y[train_index], y[test_index] 12 #輸出:TRAIN: [2 3] TEST: [0 1] 13 # TRAIN: [0 1] TEST: [2 3]##這里kf.split(X)返回的是X中進(jìn)行分裂后train和test的索引值,令X中數(shù)據(jù)集的索引為0,1,2,3;第一次分裂,先選擇test,索引為0和1的數(shù)據(jù)集為test,
剩下索引為2和3的數(shù)據(jù)集為train;第二次分裂,先選擇test,索引為2和3的數(shù)據(jù)集為test,剩下索引為0和1的數(shù)據(jù)集為train。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yxh-amysear/p/9447722.html
總結(jié)
以上是生活随笔為你收集整理的sklearn中的交叉验证(Cross-Validation)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java day10(续day9)
- 下一篇: Gitlab+Jenkins学习之路(六