【人工知能】教師データを指定割合で学習用、評価用に分割する方法!

このページでは、csvファイルとして準備してあるAIの教師データを学習用、評価用の2つに指定した割合で分割する方法をご紹介していきます。

 

自動で実行してくれる便利なライブラリもありますが、今回紹介するような基本的な配列操作だけでも実行できますので、ぜひやりかたを覚えておきましょう。

 

それではさっそくやっていきましょう。

 

スポンサーリンク

使用するデータの紹介

今回は以下の画像のようなinput数8,output数2のcsvファイルを使用していきます。

ID数は1000まであります。

使用するcsvファイルの紹介

※データの中身に意味はありません。適当な乱数です。

 

以降で紹介する作業は、

①データをinputとoutputに分割する

(横方向に8:2で分割)

②input、outputそれぞれを学習用、評価用に分割する

(縦方向に8:2で分割)

という流れで実施していきます。

 

つまり、ID数1000、input数8,output数2、のデータを

学習用インプット:(800,8)

学習用アウトプット:(800,2)

評価用インプット:(200,8)

評価用アウトプット:(200,2)

という形に分割していくというわけです。

 

スポンサーリンク

使用するライブラリ一覧

今回は以下の2つのライブラリを使用します。

〇pandas

〇numpy

基本的にはpandasでcsvファイルを読み込み、numpyで配列を分割していく流れです。

 

スポンサーリンク

教師データを学習用、評価用に分割する方法

それでは事前説明はこのくらいにして、実際の作業にはいっていきましょう。

 

step0:ライブラリインポート

まずは使用するライブラリを読み込みましょう。

import pandas as pd
import numpy as np

 

step1:csvデータの読み込み

次はcsvデータを読み込みます。

data_file_name='training_data.csv'
data=pd.read_csv(data_file_name,index_col=0).values

 

step2:inputとoutputに分割

次は先ほど読み込んだデータをinputとoutputに分割します。
(横方向に8:2で分割します。)

inputdata=data[:,:8]
outputdata=data[:,-2:]

 

ここまででいったん状況を確認しておきましょう。
以下のコードで各変数の大きさを確認してみます。

print('data_sahpe='+str(data.shape))
print('inputdata_sahpe='+str(inputdata.shape))
print('outputdata_sahpe='+str(outputdata.shape))

 

すると以下の結果が出力されました。

分割したデータの形状を確認した結果

問題なく10個あったデータを8対2に分割できていますね。

 

念のためもとのcsvファイルと比較してみましょう。

これがcsvファイルのID1のデータです。

inputdataのID1を表示してみます。

問題なくinput8までがはいっていますね。

分割したデータの中身を確認した結果

同様にoutputdataのID1です。

分割したデータの中身を確認した結果

こちらも問題なしですね。

 

というわけでまずはinputとoutputの2つに分割ができました。

 

次はこれらを学習用、評価用にそれぞれ分割していきます。

今回は学習用を8割、評価用を2割としましょう。

 

まずはinputdataを分割してみます。

以下がそのコードです。

validation_split_rate=0.2
input_trainig=inputdata[:int(len(inputdata)*(1-validation_split_rate))]
input_validation=inputdata[-int(len(inputdata)*(validation_split_rate)):]

 

こちらも先ほど同様に以下のコードで大きさを確認してみましょう。

print('input_trainig_shape='+str(input_trainig.shape))
print('input_validation_shae='+str(input_validation.shape))

 

以下の結果が出力されました。

分割したデータの大きさを確認した結果

 

念のため分割の境目である800,801番目のデータを確認してみます。

以下がもともとのcsvファイル。

もとのcsvファイルと分割したデータを比較するための画像

このコードで先ほど分割したデータの境目を確認してみます。

print(input_trainig[799])
print(input_validation[0])

分割したデータの中身を確認した結果

上のcsvファイルと比較してみると、問題なくデーが分割されていることがわかると思います。

 

outputデータもやることは全く同じですね。

output_trainig=outputdata[:int(len(outputdata)*(1-validation_split_rate))]
output_validation=outputdata[-int(len(outputdata)*(validation_split_rate)):]

 

スポンサーリンク

教師データを学習用、評価用に分割するサンプルコード

最後に、さきほどまでの作業をぶっ通しで行うサンプルコードをご紹介していきます。

import pandas as pd
import numpy as np
data_file_name='training_data.csv'
data=pd.read_csv(data_file_name,index_col=0).values

#inputとoutputに分ける
inputdata=data[:,:8]
outputdata=data[:,-2:]
print('data_sahpe='+str(data.shape))
print('inputdata_sahpe='+str(inputdata.shape))
print('outputdata_sahpe='+str(outputdata.shape))

#inputdataをtraining用とvalidation用に分ける
validation_split_rate=0.2
input_trainig=inputdata[:int(len(inputdata)*(1-validation_split_rate))]
input_validation=inputdata[-int(len(inputdata)*(validation_split_rate)):]
output_trainig=outputdata[:int(len(outputdata)*(1-validation_split_rate))]
output_validation=outputdata[-int(len(outputdata)*(validation_split_rate)):]
print('input_trainig_sahpe='+str(input_trainig.shape))
print('input_validation_sahpe='+str(input_validation.shape))
print('output_trainig_sahpe='+str(output_trainig.shape))
print('output_validation_sahpe='+str(output_validation.shape))

 

これでinput_trainig, input_validation, output_trainig,  output_validationにそれぞれでデータが格納されています。

 

スポンサーリンク

おわりに

というわけで今回はpythonを使って、AI用の教師データを学習用、評価用に分割する方法をご紹介しました。

 

AI構築の際にぜひご活用ください。

 

このように、私のブログでは様々なスキルを紹介しています。

過去記事一覧

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました