注目キーワード

sklearnを使ってCSVの行を分割する方法(train_test_split)

こんにちは、Tamagoです。機械学習の勉強中です。

学習している書籍のアウトプットとして、今回は「sklearn」の「train_test_split」を使ってCSVデータを分割します。

この、「train_test_split」を使うことによって、CSVファイルの行を一定の割合で分割することが出来ます。

対象レベル

Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。

詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。

サンプルソースを読むうえで理解しておきたいこと

基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。

sklearnのインストール

sklearnはインストールが必要なので以下のコマンドを叩いてインストールしてください。

pip install sklearn

使用するCSVファイル

今回使用するCSVファイルです。

少し見ずらいのですが「 Japanese 」、「 Mathematics 」、「English」と「国語」、「数学」、「英語」3教科の点数を想定したファイルを作りました。

ファイルの作り方は「Pythonで機械学習用のCSVファイルを作成する」の記事で紹介しています。

train_test_splitの使い方

「train_test_split」の使い方は初めにインポート、分割対象のデータとパラメータを設定します。

あとで、細かく説明しますが、「分割するデータ」を「学習データ」と「テストデータ」の二つに分割します。

分割の割合は「train_size」と「test_size」を設定することによって変更できます。以下のサンプルの場合は学習データが8割、テストデータが2割で分割されます。

スポンサーリンク

また、「train_test_split」のデフォルトの設定で分割する際にはCSVファイルをシャッフルして分割します。

from sklearn.model_selection import train_test_split
学習データ, テストデータ, = train_test_split(分割するデータ, train_size=0.8, test_size=0.2)

行を分割 train_test_split(data, train_size=0.8, test_size=0.2)

以下のサンプルは「train_test_split」の基本的な使い方で

実行した場合は、行データをシャッフルして、8対2の割合で分割します。

分割したデータは「 x_train 」と「 x_test 」に設定されています。

sample_sklearn_train_test_split_1.py  実行結果

行を分割(shuffleなし) train_test_split(data, train_size=0.8, test_size=0.2, shuffle=False)

先ほど、少し触れましたが、

「train_test_split」のパラメータ「shuffle」はデフォルトは「True」です。

「shuffle」を「False」にすることでCSVデータをシャフルしないで分割することができます。

sample_sklearn_train_test_split_2.py  実行結果

列も分割 train_test_split(data1, data2, train_size=0.8, test_size=0.2)

pandasで列を分割したデータに対しても分割が可能です。

データを十文字に切るようなイメージですね。

下のサンプルソースでは、5行目、6行目で「国語」、「数学、英語」に分割したデータを分割します。

戻ってきた値は2×2で4つの値が返されます。

引数と戻り値の関係はこんな感じで「引数」のかたまりで「学習データ」と「テストデータ」が返されます。

  • japanese ⇒ j_train j_test
  • other ⇒ o_train o_test
sample_sklearn_train_test_split_3.py  実行結果➀ ( j_train ,j_test )
sample_sklearn_train_test_split_3.py  実行結果② ( o_train,o_test )

複数列を分割 train_test_split(data1, data2, data3, train_size=0.8, test_size=0.2)

列が3つ以上でも分割は可能です。以下のサンプルソースでは、「国語」、「数学」、「英語」の3教科をバラバラにしてから行単位で分割しています。

sample_sklearn_train_test_split_4.py  実行結果➀ (data)
sample_sklearn_train_test_split_4.py  実行結果②( j_train,j_test )
sample_sklearn_train_test_split_4.py  実行結果③( m_train,m_test )
sample_sklearn_train_test_split_4.py  実行結果④( e_train,e_test )
最新情報をチェックしよう!