1. 程式人生 > >sklearn:隨機劃分訓練集和測試集

sklearn:隨機劃分訓練集和測試集

一、sklearn.model_selection.train_test_split

作用:

隨機劃分訓練集和測試集  

官網文件:

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split

一般形式:

train_test_split是交叉驗證中常用的函式,功能是從樣本中隨機的按比例選取train_data和test_data,

形式為:

X_train,X_test, y_train, y_test =  cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0) 

引數解釋:  

train_data:所要劃分的樣本特徵集;train_target:所要劃分的樣本結果;test_size:樣本佔比,如果是整數的話就是樣本的數量;random_state:是隨機數的種子。(隨機數種子:其實就是該組隨機數的編號,在需要重複試驗的時候,保證得到一組一樣的隨機數。比如你每次都填1,其他引數一樣的情況下你得到的隨機陣列是一樣的。但填0或不填,每次都會不一樣隨機數的產生取決於種子,隨機數和種子之間的關係遵從以下兩個規則:種子不同,產生不同的隨機數;種子相同,即使例項不同也產生相同的隨機數。)

二、sklearn.cross_validation模組

cross validation的含義:

對於原始資料我們要將其一部分分為train_data,一部分分為test_data。train_data用於訓練,test_data用於測試準確率。在test_data上測試的結果叫做validation error。將一個演算法作用於一個原始資料,我們不可能只做出隨機的劃分一次train_data和test_ data,然後得到一個validation error,就作為衡量這個演算法好壞的標準。因為這樣存在偶然性。我們必須好多次的隨機的劃分train data和test data,分別在其上面算出各自的validation error。這樣就有一組validation error,根據這一組validation error,就可以較好的準確的衡量演算法的好壞。 

cross validation是在資料量有限的情況下的非常好的一個evaluate performance的方法。而對原始資料劃分出train_data和test_data的方法有很多種,這也就造成了cross validation的方法有很多種。   

(1)sklearn中的cross validation模組,最主要的函式是:sklearn.cross_validation.cross_val_score

他的呼叫形式:

scores = cross_validation.cross_val_score(clf, raw data, raw target, cv=5, score_func=None) 

引數解釋: 

clf:不同的分類器,可以是任何的分類器。比如支援向量機分類器(clf = svm.SVC(kernel='linear', C=1))。 

cv:代表不同的cross validation的方法了。如果cv是一個int數字的話,並且如果提供了raw target引數,那麼就代表使StratifiedKFold分類方式,如果沒有提供raw target引數,那麼就代表使用KFold分類方式。

cross_val_score函式的返回值就是對於每次不同的的劃分raw_data時,在test_data上得到的分類的準確率。至於準確率的演算法可以通過score_func引數指定,如果不指定的話,是用clf預設自帶的準確率演算法。 還有其他的一些引數不是很重要。

(2)train_test_split 

功能:

從樣本中隨機的按比例選取train_data和test_data。

呼叫形式:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(train_data, train_target, test_size=0.4, random_state=0) 

引數解釋:

test_size是樣本佔比。如果是整數的話就是樣本的數量。random_state是隨機數的種子。不同的種子會造成不同的隨機取樣結果。相同的種子取樣結果相同。