sklearnでtrain_test_split()関数の詳細

2087 ワード

train_test_split関数は、マトリクスをランダムにトレーニングサブセットとテストサブセットに分割し、分割されたトレーニングセットテストセットサンプルとトレーニングセットテストセットラベルを返すために使用されます.
corpus総数10001本のデータ、train_X, test_Xはテキストデータ、train_Y, test_Yはラベルデータ
test_size = 0.3
train_X, test_X, train_Y, test_Y = train_test_split(corpus, labels,
                                                    test_size=test_data_proportion, random_state=42)
print(len(train_X),len(test_X),len(train_Y),len(test_Y))

結果は毎回固定されます.
7000 3001 7000 3001

すなわち、7000対のトレーニングデータ、3001対のテストデータである.
パラメータの説明:
train_data:分割されたサンプルフィーチャーセット
train_target:分割されたサンプルラベル
test_size:浮動小数点数の場合、0-1の間で、サンプルの割合を表します.整数ならサンプルの数です
random_state:乱数のシードで、ランダム状態を制御します.
shuffle:データの順序を乱すかどうか、再分割、デフォルトTrue.
stratify:noneまたはarray/seriesタイプのデータは、この列で階層的にサンプリングされることを示します.
乱数シード:実はこのグループの乱数の番号で、繰り返し試験が必要な場合、同じ乱数を得ることを保証します.例えば、毎回1を記入し、他のパラメータが同じ場合、あなたが得たランダム配列は同じです.しかし、0を記入するか、記入しないかは、毎回違います.
乱数の生成は、シード、乱数、シードの関係によって異なります.
種子が異なり、異なる乱数を生成する.シードは同じで、インスタンスが異なる場合でも同じ乱数を生成します.
理由:なぜこのようなパラメータrandom_を使用する必要があるのかstate(ランダム状態)?
random_についてstate、ここではまず3つの状況を簡単に羅列します:1、モデルを構築する時:
random_state = 0 
2、データセットを生成する時:
random_state = 1
3、データセットを訓練セット、テストセットに分割する時:
random_state = 42
random_を設定しない場合stateならどうなるの?たとえば1では、構築するたびにモデルが異なります.例えば2では、生成されるデータセットごとに異なる.例えば3では,分割されるたびに訓練セット,テストセットが異なる.
なぜなら、モデルの構築、データセットの生成、データセットの分割はランダムなプロセスであるからです.
結果を再現したい場合はrandomを固定しますstateはとても重要です.
コンストラクションモデルでは、本質的にランダムであり、異なるランダム状態(random_stateパラメータを設定しない)を設定すると、コンストラクションモデルを完全に変更できます.データセットを生成する場合、本質的にはランダムであり、異なるランダム状態(random_stateパラメータを設定しない)を設定すると、生成されたデータセットを完全に変更できます.分割データセットがトレーニングセット、テストセットである場合、本質的にはランダムであり、異なるランダム状態(またはrandom_stateパラメータを設定しない)を設定すると、分割の結果を完全に変更できます.
固定random_state後、構築されるたびにモデルは同じであり、生成されるデータセットは同じであり、分割結果も同じである.
まとめ:それらが本質的にランダムなプロセスである場合、同じ結果を繰り返すためにランダムな状態を制御する必要があります.もし,ランダム状態を制御しなければ,実験の結果は固定できず,ランダムに現れる. 
参照先:https://blog.csdn.net/az9996/article/details/86616668
            https://www.cnblogs.com/bonelee/p/8036024.html