このページでは、csvファイルとして準備してあるAIの教師データを学習用、評価用の2つに指定した割合で分割する方法をご紹介していきます。
自動で実行してくれる便利なライブラリもありますが、今回紹介するような基本的な配列操作だけでも実行できますので、ぜひやりかたを覚えておきましょう。
それではさっそくやっていきましょう。
使用するデータの紹介
今回は以下の画像のようなinput数8,output数2のcsvファイルを使用していきます。
ID数は1000まであります。
※データの中身に意味はありません。適当な乱数です。
以降で紹介する作業は、
①データを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ファイル。
このコードで先ほど分割したデータの境目を確認してみます。
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構築の際にぜひご活用ください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント