トレーニングセットとテストセットの分割

1369 ワード

前言


より良い訓練データとより良いテストモデルのために、一般的に機械学習をする前に訓練セットとテストセットの切り分けを行う.

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デフォルトパラメータ、乱数シードは、一般的にデバッグするたびにカットが同じであれば、このシードに一定の値を与えればいいのです.