sklearn中的交叉验证(Cross-Validation)
sklearn中的交叉驗證(Cross-Validation)
? ? cross validation大概的意思是:對于原始數(shù)據(jù)我們要將其一部分分為traindata,一部分分為test data。train data用于訓練,test data用于測試準確率。在test data上測試的結果叫做validation error。將一個算法作用于一個原始數(shù)據(jù),我們不可能只做出隨機的劃分一次train和testdata,然后得到一個validation error,就作為衡量這個算法好壞的標準。因為這樣存在偶然性。我們必須多次的隨機的劃分train data和test data,分別在其上面算出各自的validation error。這樣就有一組validationerror,根據(jù)這一組validationerror,就可以較好的準確的衡量算法的好壞。crossvalidation是在數(shù)據(jù)量有限的情況下的非常好的一個evaluate performance的方法。而對原始數(shù)據(jù)劃分出train data和testdata的方法有很多種,這也就造成了cross validation的方法有很多種。
1.?train_test_split
對數(shù)據(jù)集進行快速打亂(分為訓練集和測試集)
這里相當于對數(shù)據(jù)集進行了shuffle后按照給定的test_size?進行數(shù)據(jù)集劃分。
2.?cross_val_score
對數(shù)據(jù)集進行指定次數(shù)的交叉驗證并為每次驗證效果評測
調(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')返回值就是對于每次不同的的劃分raw data時,在test data上得到的分類的準確率。
參數(shù)解釋:
estimator:是不同的分類器,可以是任何的分類器。比如支持向量機分類器:estimator = svm.SVC(kernel='linear', C=1)
cv:代表不同的cross validation的方法。如果cv是一個int值,并且如果提供了rawtarget參數(shù),那么就代表使用StratifiedKFold分類方式;如果cv是一個int值,并且沒有提供rawtarget參數(shù),那么就代表使用KFold分類方式;也可以給定它一個CV迭代策略生成器,指定不同的CV方法。
scoring:默認Nnoe,準確率的算法,可以通過score_func參數(shù)指定;如果不指定的話,是用estimator默認自帶的準確率算法。
3.?KFold? (K折交叉驗證)
最基礎的CV算法,也是默認采用的CV策略?。主要的參數(shù)包括兩個,一個是樣本數(shù)目,一個是k-fold要劃分的份數(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中進行分裂后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。
?
轉載于:https://www.cnblogs.com/yxh-amysear/p/9447722.html
總結
以上是生活随笔為你收集整理的sklearn中的交叉验证(Cross-Validation)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java day10(续day9)
- 下一篇: Gitlab+Jenkins学习之路(六