データ・セットの分割(train_test_split)、考え方の共有とハンド・コードの紹介sklearnのtrain_test_split、シロの入門に適しています

9187 ワード

ブログ紹介train_test_split,ステップ1-4は自分の手でコードを打つことと考え方を共有することであり,ステップ5はsklearnのtrain_をどのように使うかを紹介する.test_split、手順3ランダムシードの紹介がありますよ、簡単で分かりやすくて、白の入門に適しています
1分割データセット
前言:機械学習はデータをアルゴリズムに投げ込み、モデル(パラメータ)を訓練し、モデルで未知のデータを予測することである.
なぜデータセットを切り分けるのか:1すべてのデータをアルゴリズムに直接投げてモデルを得てからデータ(モデルを訓練するためのデータ)を予測すると予測しやすいが、未知のデータに対しては必ずしも良いとは限らない.例えば、先生が宿題を出してから評価してあげます.試験の問題は宿題の問題です.みんながよく試験を受けると思います.しかし、宿題の問題以外の試験については、みんなが試験できるかどうかは未知です.一部の学生は宿題の問題を完成し、原理を理解しているので、これらの学生は同じタイプの試験に対して高い点数を取ることができます.一部の学生は先生の説明の過程しか覚えていないので、原理が分からないので、この部分の学生は低い点数を取りやすいです.②このようなことを避けるために、試験の時に原理は同じだが問題は違う試験用紙を出して、学生が原理を理解しているかどうかを検査しなければならない.機械学習に類比するデータセットも同様である:一部のデータでモデルを訓練し、異なるデータで予測し、このモデルが良いかどうかを見る.
2考え方
  • 分割比
  • を決定する.
  • データのインデックスを乱す
  • 対応するインデックス
  • を乱順のインデックスで取り出す.
  • インデックス別データセット
  • ①データのインデックスを乱す
    shuffle_indexes = np.random.permutation(len(X))
    

    ②乱順の索引で対応する索引を取り出す
    #       
    test_ratio = 0.3
    #      
    test_size = int(test_ratio * len(X))
    #      
    test_indexes = shuffle_indexes[:test_size]
    #      
    train_indexes = shuffle_indexes[:test_size]
    

    ③インデックスごとのデータセット
    x_test = X[test_indexes]
    
    x_train = X[train_indexes]
    
    y_test = y[test_indexes]
    
    y_train = y[train_indexes]
    

    3関数にカプセル化
    test_ratio:分割スケールseed:ランダムシード
    ここでランダムシードについてお話しします:train_test_split分割のデータセットはランダムに取得され、決定された値は2つが同じになるように設定されます.例えば同じデータセット、私は私のコンピュータでランダムな種子を10に設定して、あなたたちも10に設定して分割した後に私たちのデータは同じです
    import numpy as np
    def Train_test_split(x, y, test_ratio, seed):
        if seed:
            '''      '''
            np.random.seed(seed)
            
        #           
        shuffle_indexes = np.random.permutation(len(x))
        
        #     
        test_size = int(test_ratio * len(x))
        #      
        test_indexes = shuffle_indexes[:test_size]
        #      
        train_indexes = shuffle_indexes[test_size:]
       
        #   
        x_train = x[train_indexes]
        x_test = x[test_indexes]
        y_train = y[train_indexes]
        y_test = [test_indexes]
        
        return x_train, x_test, y_train, y_test
    

    4実戦してみる
    ①アヤメデータセットで実戦
    from sklearn import datasets
    import numpy as np
    
    #    
    iris = datasets.load_iris()
    
    #   X_train y_train
    X = iris.data
    print('      :',X.shape)
    y = iris.target
    

    出力:データセットのサイズ:(150,4)
    ②分割データセット
    x_train, x_test, y_train, y_test = Train_test_split(X, y, test_ratio=0.3, seed=66)
    

    出力:トレーニングセットのサイズ:(105,4)テストセットのサイズ:(45,4)
    5 sklearnでtrain_test_split
    ①モジュールのインポート
    from sklearn.model_selection import train_test_split
    

    ②データセットのインポート
    from sklearn import datasets
    import numpy as np
    
    #    
    iris = datasets.load_iris()
    
    #   X_train y_train
    X = iris.data
    y = iris.target
    

    ③データセットの分割
    x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=66)