logo

scikit-learn の train_test_split() 関数を使用してデータセットを分割する方法

この記事では、scikit-learns の train_test_split() を使用してデータセットを分割する方法について説明します。

sklearn.model_selection.train_test_split() 関数:

train_test_split() メソッドは、データをトレーニング セットとテスト セットに分割するために使用されます。まず、データを特徴 (X) とラベル (y) に分割する必要があります。データフレームは X_train、X_test、y_train、y_test に分割されます。 X_train セットと y_train セットは、モデルのトレーニングとフィッティングに使用されます。 X_test セットと y_test セットは、モデルが正しい出力/ラベルを予測しているかどうかをテストするために使用されます。トレインとテストセットのサイズを明示的にテストできます。トレイン セットをテスト セットより大きくしておくことをお勧めします。



    トレーニング セット: トレーニング データセットは、モデルを適合させるために使用されたデータのセットです。モデルがトレーニングされるデータセット。このデータはモデルによって確認され、学習されます。テスト セット: テスト データセットは、最終的なモデルの適合性を正確に評価するために利用されるトレーニング データセットのサブセットです。検証セット: 検証データセットは、モデルのハイパーパラメーターを調整する際にモデルのパフォーマンスを推定するために使用される、モデルのトレーニング セットからのデータのサンプルです。過小適合: 過小適合したデータ モデルは、入力変数と出力変数の間の関係を効果的に表現できないため、トレーニング セットと未観測データの両方で高いエラー率を持ちます。過学習: 統計モデルがトレーニング データと正確に一致しているが、目に見えないデータに対して正確に実行できないためにアルゴリズムの目標が失われる場合、過学習と呼ばれます。

構文: sklearn.model_selection.train_test_split(*arrays、test_size=None、train_size=None、random_state=None、shuffle=True、stratify=None)

パラメーター:

    *配列: インデックス可能なシーケンス。 リスト、numpy 配列、scipy-sparse 行列、および pandas データフレームはすべて有効な入力です。 test_size: int または float、デフォルトでは None。 float の場合、0.0 ~ 1.0 の範囲で、分割をテストするデータセットのパーセンテージを表します。 int が使用される場合、それはテストサンプルの総数を指します。値が None の場合、トレイン サイズの補数が使用されます。トレイン サイズも None の場合は 0.25 に設定されます。 train_size: int または float、デフォルトでは None。 random_state : int、デフォルトではなし。 分割が実装される前にデータをシャッフルする方法を制御します。複数の関数呼び出しにわたって反復可能な出力を得るには、int を渡します。 shuffle: ブール型オブジェクト、デフォルトでは True。分割する前にデータをシャッフルするかどうか。 shuffle=False の場合、階層化は None でなければなりません。 stratify: 配列のようなオブジェクト。デフォルトでは None です。 [なし] を選択すると、これらをクラス ラベルとして使用してデータが階層化されます。

戻り値:



分割: 入力のトレーニングとテストの分割はリストとして表されます。

データセットを分割する手順:

ステップ 1: 必要なパッケージまたはモジュールをインポートします。

このステップでは、必要なパッケージまたはモジュールを作業中の Python 環境にインポートします。

Python3






# import packages> import> numpy as np> import> pandas as pd> from> sklearn.model_selection>import> train_test_split>

>

>

ステップ 2: データフレーム/データセットをインポートします。

ここでは、pandas から pd.read_csv() メソッドを使用して CSV を読み込み、shape() 関数を使用してデータセットの形状を取得します。

使用されるCSV:

Python3




# importing data> df>=> pd.read_csv(>'prediction.csv'>)> print>(df.shape)>

>

>

出力:

(13, 3)>

ステップ 3: X および Y 特徴変数を取得します。

ここでは、X 変数と Y 変数を割り当てています。X 特徴変数には独立変数があり、y 特徴変数には従属変数があります。

Python3




X>=> df[>'area'>]> y>=>df[>'prices'>]>

>

>

ステップ 4: トレーニング テスト分割クラスを使用して、データをトレーニング セットとテスト セットに分割します。

ここでは、sklearn.model_selection の train_test_split() クラスを使用して、データをトレーニング セットとテスト セットに分割し、特徴量変数がメソッドの入力として指定されます。 test_size はテスト セットに入るデータの部分を決定し、データの再現性のためにランダムな状態が使用されます。

Python3




# using the train test split function> X_train, X_test, y_train, y_test>=> train_test_split(> >X,y , random_state>=>104>,test_size>=>0.25>, shuffle>=>True>)>

>

>

例:

この例では、「predictions.csv」ファイルがインポートされます。 df.shape 属性は、データ フレームの形状を取得するために使用されます。データフレームの形状は (13,3) です。特徴列は X 変数で取得され、結果列は y 変数で取得されます。 X 変数と y 変数は train_test_split() メソッドに渡され、データ フレームをトレイン セットとテスト セットに分割します。ランダム状態パラメータはデータの再現性のために使用されます。 test_size は 0.25 として指定されます。これは、データの 25% がテスト セットに入るという意味です。データフレームの 13 行のうち 4 行がテスト セットに入ります。データの 75% がトレイン セットに入ります。これは 13 行中 9 行です。トレーニング セットは、機械学習モデルの適合とトレーニングに使用されます。テスト セットは評価に使用されます。

使用されるCSV:

Python3




# import packages> import> numpy as np> import> pandas as pd> from> sklearn.model_selection>import> train_test_split> # importing data> df>=> pd.read_csv(>'prediction.csv'>)> print>(df.shape)> # head of the data> print>(>'Head of the dataframe : '>)> print>(df.head())> print>(df.columns)> X>=> df[>'area'>]> y>=>df[>'prices'>]> # using the train test split function> X_train, X_test, y_train, y_test>=> train_test_split(> >X,y , random_state>=>104>,test_size>=>0.25>, shuffle>=>True>)> # printing out train and test sets> print>(>'X_train : '>)> print>(X_train.head())> print>(X_train.shape)> print>('')> print>(>'X_test : '>)> print>(X_test.head())> print>(X_test.shape)> print>('')> print>(>'y_train : '>)> print>(y_train.head())> print>(y_train.shape)> print>('')> print>(>'y_test : '>)> print>(y_test.head())> print>(y_test.shape)>

>

>

出力:

Java文字列には次のものが含まれます
(13, 3) Head of the dataframe : Unnamed: 0 area prices 0 0 1000 316404.109589 1 1 1500 384297.945205 2 2 2300 492928.082192 3 3 3540 661304.794521 4 4 4120 740061.643836 Index(['Unnamed: 0', 'area', 'prices'], dtype='object') X_train : 3 3540 7 3460 4 4120 0 1000 8 4750 Name: area, dtype: int64 (9,) X_test : 12 7100 2 2300 11 8600 10 9000 Name: area, dtype: int64 (4,) y_train : 3 661304.794521 7 650441.780822 4 740061.643836 0 316404.109589 8 825607.876712 Name: prices, dtype: float64 (9,) y_test : 12 1.144709e+06 2 4.929281e+05 11 1.348390e+06 10 1.402705e+06 Name: prices, dtype: float64 (4,)>

例:

この例では、次の手順が実行されます。

  • 必要なパッケージがインポートされます。
  • Advertising.csv データ セットがロードおよびクリーンアップされ、null 値が削除されます。
  • フィーチャー配列とターゲット配列が作成されます (X andy)。
  • 作成された配列は、トレーニング セットとテスト セットに分割されます。データセットの 30% がテスト セットに入ります。これは、データの 70% がトレイン セットであることを意味します。
  • 標準のスケーラー オブジェクトが作成されます。
  • X_train はスケーラーに適合します。
  • X_train と X_test は、transform() メソッドを使用して変換されます。
  • 単純な線形回帰モデルが作成されます
  • 列車セットが模型に収まります。
  • detect() メソッドは、X_test セットの予測を実行するために使用されます。
  • モデルの評価には、mean_squared_error() メトリックが使用されます。

この例で使用されている CSV ファイルを表示およびダウンロードするには、 ここ

Python3




# import packages> import> pandas as pd> import> numpy as np> from> sklearn.model_selection>import> train_test_split> from> sklearn.preprocessing>import> StandardScaler> from> sklearn.linear_model>import> LinearRegression> from> sklearn.metrics>import> mean_squared_error> df>=> pd.read_csv(>'Advertising.csv'>)> # dropping rows which have null values> df.dropna(inplace>=>True>,axis>=>0>)> y>=> df[>'sales'>]> X>=> df.drop(>'sales'>,axis>=>1>)> # splitting the dataframe into train and test sets> X_train,X_test,y_train,y_test>=> train_test_split(> >X,y,test_size>=>0.3>,random_state>=>101>)> scaler>=> StandardScaler()> scaler.fit(X_train)> X_train>=> scaler.transform(X_train)> X_test>=> scaler.transform(X_test)> model>=> LinearRegression().fit(X_train,y_train)> y_pred>=> model.predict(X_test)> print>(y_pred)> print>(mean_squared_error(y_test,y_pred))>

>

>

出力:

配列([19.82000933, 14.23636718, 12.80417236, 7.75461569, 8.31672266,

15.4001915、11.6590983、15.22650923、15.53524916、19.46415132、

17.21364106、16.69603229、16.46449309、10.15345178、13.44695953、

24.71946196、18.67190453、15.85505154、14.45450049、9.91684409、

10.41647177、4.61335238、17.41531451、17.31014955、21.72288151、

5.87934089、11.29101265、17.88733657、21.04225992、12.32251227、

14.4099317、15.05829814、10.2105313、7.28532072、12.66133397、

23.25847491、18.87101505、4.55545854、19.79603707、9.21203026、

10.24668718、8.96989469、13.33515217、20.69532628、12.17013119、

21.69572633、16.7346457、22.16358256、5.34163764、20.43470231、

7.58252563、23.38775769、10.2270323、12.33473902、24.10480458、

9.88919804、21.7781076 ])

2.7506859249500466

例:

この例では、K 最近傍分類子モデルを使用します。

この例では、次の手順が実行されます。

  • 必要なパッケージがインポートされます。
  • 虹彩データは sklearn.datasets からロードされます。
  • フィーチャーとターゲットの配列が作成されます (X andy)。
  • 作成された配列は、トレーニング セットとテスト セットに分割されます。データセットの 30% がテスト セットに入ります。これは、データの 70% がトレイン セットであることを意味します。
  • 基本的な Knn モデルは、KNeighborsClassifier クラスを使用して作成されます。
  • 列車セットは knn モデルに適合します。
  • detect() メソッドは、X_test セットの予測を実行するために使用されます。

Python3




# Import packages> from> sklearn.neighbors>import> KNeighborsClassifier> from> sklearn.model_selection>import> train_test_split> from> sklearn.datasets>import> load_iris> > # Load the data> irisData>=> load_iris()> > # Create feature and target arrays> X>=> irisData.data> y>=> irisData.target> > # Split data into train and test sets> X_train, X_test, y_train, y_test>=> train_test_split(> >X, y, test_size>=> 0.2>, random_state>=>42>)> > knn>=> KNeighborsClassifier(n_neighbors>=>1>)> > knn.fit(X_train, y_train)> > # predicting on the X_test data set> print>(knn.predict(X_test))>

>

>

出力:

[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0]