#16学習とテストデータセットを分離する


Model Selection


ラーニングデータセット

  • を用いて機械学習アルゴリズム
  • を学習する
  • データを持つ属性と決定値(ラベル)値
  • 学習データに基づいて、機械学習アルゴリズムはデータ属性と決定値のモードを認知し、
  • を学習する.

    データセットのテスト


    テスト
  • データ集中学習の機械学習アルゴリズム
  • 試験データは機械学習アルゴリズムにのみ属性データを提供し、機械学習アルゴリズムは提供するデータに基づいて決定値
  • を予測する.
  • テストデータは、学習データとは独立したデータセットとして提供する必要がある、
  • .
    from sklearn.datasets import load_iris
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.metrics import accuracy_score
    
    iris = load_iris()
    dt_clf = DecisionTreeClassifier()
    train_data = iris.data
    train_label = iris.target
    dt_clf.fit(train_data, train_label)
    
    # 학습 데이터 셋으로 예측 수행
    pred = dt_clf.predict(train_data)
    print('예측 정확도:',accuracy_score(train_label,pred))
    個別のテストデータが必要です.

    train_test_split()

    X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size= 0.3, random_state=121)
  • test size:データ全体からどれだけのテストデータセットをサンプリングするかを決定します.既定値は0.25、つまり25%
  • です.
  • train size:学習用のデータセットをデータ全体からどれだけサンプリングするかを決定します.通常test size parameterを使用するため、train sizeは
  • を常用しない.
  • shuffle:データを分離する前に、データを事前に混合するかどうかを決定します.デフォルトはTrueです.データを分散して、より効率的な学習およびテストデータセットを作成します.
  • random state:random stateは、出力のたびに同じ学習/テストデータセットを作成するための数値です.train test split()は呼び出し時にランダムにデータを分離するため、random stateを指定しないと、実行するたびに異なる学習/テストデータが生成されます.
  • from sklearn.tree import DecisionTreeClassifier
    from sklearn.metrics import accuracy_score
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    
    dt_clf = DecisionTreeClassifier( )
    iris_data = load_iris()
    
    X_train, X_test,y_train, y_test= train_test_split(iris_data.data, iris_data.target, 
                                                        test_size=0.3, random_state=121)

    NumberPandaryだけでなくPandas Data Frame/Seriesもtrain test split()に分割できます。

    import pandas as pd
    
    iris_df = pd.DataFrame(iris_data.data, columns=iris_data.feature_names)
    iris_df['target']=iris_data.target
    iris_df.head()
    ftr_df = iris_df.iloc[:, :-1]
    tgt_df = iris_df.iloc[:, -1]
    X_train, X_test, y_train, y_test = train_test_split(ftr_df, tgt_df, 
                                                        test_size=0.3, random_state=121)
                                                        
    print(type(X_train), type(X_test), type(y_train), type(y_test))                                                    
    dt_clf = DecisionTreeClassifier( )
    dt_clf.fit(X_train, y_train)
    pred = dt_clf.predict(X_test)
    print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))