1. 程式人生 > >訓練集與測試集切分

訓練集與測試集切分

前言

為了 更好的訓練資料並且更好測試模型,一般做機器學習之前都會進行訓練集和測試集的切分。

train_test_split實現

其實我們可以先把資料的輸入X和輸出向量y進行一個水平拼接,然後隨機之後拆開,但是過程比較麻煩。在sklearn中shuffle的並不是訓練集,而是訓練集長度大小的隨機索引

產生隨機索引值

shuffle_indexes=np.random.permutation(len(X)) #X為資料的輸入
shuffle_indexes

np.random.permutation( x )這個函式可以產生x和隨機數,並且隨機數的範圍是0~x

shuffle_indexes=np.random
.permutation(3) shuffle_indexes array([2, 0, 1])

設定切分的比例

test_ratio=0.2
test_size=int(len(X) * test_ratio)

求出切分索引

test_indexes=shuffle_indexes[:test_size]
train_indexes=shuffle_indexes[test_size:]

獲得資料

X_train=X[train_indexes]
y_train=y[train_indexes]

X_test=X[test_indexes]
y_test=y[test_indexes]

sklearn中的劃分

有了之前的知識就能更好的理解sklearn中的切分函式的每個引數的意思。

匯入包

from sklearn.model_selection import train_test_split

呼叫

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2, 
random_state=0)

引數意義:
X,資料集的輸入
y, 資料集的輸出
test_size 預設引數,這個測試集所佔百分比。
radom_state 預設引數,隨機數種子,一般除錯的時候希望每次切分要是一樣的,就給這個種子一個固定的值就好了。