機械学習記8日目続き ~ データの分割

 まず最初に、irisデータセットを訓練用のデータと評価用のデータに分割します。これは、生成した学習モデルの正解率を正しく判断するためです。訓練用のデータを評価用にも使ってしまうと、既に知っているデータなので、当然、正解率は高くなります。そこで、データセットを訓練用(training data)と評価用に分割してから使います。

 ちなみに、学習データを訓練用と評価用に分割して、学習と評価を繰り返す方法を「クロスバリデーション」と呼びます。

 データの分割には、scikit-learnの「train_test_split」という関数を使います。

書式は図1のようになります。

f:id:hackU0001:20190227165226p:plain

図1.model_selection.train_test_split関数

 

 train_test_split関数を使うと、データセットをランダムにシャッフルして、好きな割合で分割できます。

 それでは、データの分割をやってみます。まず、irisデータセットを読み込みます。

f:id:hackU0001:20190227170206p:plain

 

次に、train_test_split関数でデータと正解ラベルを訓練用と評価用に分割します。分割後のリストは、次のように命名しました。scikit-learnでは、データを大文字、正解ラベルを小文字で表現するようなのでそれにならっています。

f:id:hackU0001:20190227171059p:plain

図2.分割後のリスト名

 

 では、70%を訓練データ、30%を評価用データに分割してみます。

f:id:hackU0001:20190227174808p:plain

f:id:hackU0001:20190227180100p:plain


 引数test_sizeを0.3にしているので、評価用データが3割、残りが訓練用のデータになります。正しく分割されているか確認してみましょう。

 訓練用データであるX_trainをPandasのDataFrameを表示してみると、105個のデータが入っていることが分かります。データの順番はシャッフルされています。

f:id:hackU0001:20190227180616p:plain

 

f:id:hackU0001:20190227180810p:plain

図3.訓練用データ

f:id:hackU0001:20190227181125p:plain

図3.訓練用データ(その2)

 

 評価用データX_testには、残りの45個(No.0~44まで)が含まれています。

f:id:hackU0001:20190227181626p:plain

 

f:id:hackU0001:20190227182125p:plain

図4.評価用データ

 

f:id:hackU0001:20190227181910p:plain

評価用データ(その2)

 

 正解ラベルも分割されているか確認します。

f:id:hackU0001:20190227182445p:plain

f:id:hackU0001:20190227182658p:plain

図5.正解ラベル(分割)

f:id:hackU0001:20190227183146p:plain

f:id:hackU0001:20190227182952p:plain

図5.正解ラベル(その2)

ちゃんと分割されています。