【Chainer実践編2】scikit-learnのデータはどう使うの?データセットの中身を加工してみたら理解できた。
- 2018.04.14
- 作り方

春はあけぼの。やうやう白くなりゆく山際、少しデコルテ、紫だちたる雲の細くたなびきたる。 っと
ども、アイーンです。
さぁ、前回に引き続きChainerの実践ということであいかわらずやっておりますけども。
どんなデータが必要なのかは前回でお分かりいただけたと思います。しかし、しかしですよ。データの扱い方について我々はまだ何も知らない。そうは思いませんか!そうでしょう!そうに違いない!
というわけで・・・
今回はsckit-learnからアヤメのデータを取り出して、深層学習に使える形に加工してやるところまでをやってみます。
それでは行ってみましょ~
作成準備
それではimportです。
いつもどおり、importしてください。
import chainer
import chainer.links as L
import chainer.functions as F
from chainer import Variable,Chain,optimizers
import numpy as np
今回の新登場importは下の一行です。
from sklearn import datasets
この操作によって、sckit-learnの中にあるデータセットをこのPythonファイルでごにょごにょ出来るようになります。
さ、ごにょごにょしましょう。
IrisData = datasets.load_iris()
datasets.load_iris()によって、アイリス(アヤメ)のデータをIrisDataへ移してみました。中身はこんな感じです。
・・・行が長すぎて全部見せれねぇ・・・
どうせこの後の操作でも分けて使うんで、IrisDataの中身を分けてみましょう。
x = IrisData.data.astype(np.float32)
t = IrisData.target
n = t.size
アイリスデータセットの中には3種類のデータが入ってます。
data がく片と花弁の長さ、幅
target 品種の正解データ(data[n]行目に対応)
target_names 花の品種名
今回は、品種名を加工する必要はないので、みなさんでコードを書いて、中身を確認してください。
かわりに、入ってるデータの数が必要になるため、t.sizeでリスト数を取り出しました。
これを、それぞれx、t、nに入れましょう。
個別にみるとこんな感じ。
それでも全部はみれねぇw
さて、これからコイツを、深層学習に使えるように加工していきます。
データの加工ってどうやるの?
前回ご説明したとおり、今回は分類をやります。
入力が4種(がく片、花弁の幅や長さ)に対し、出力が3つ(花の品種)になりますが、出力結果がもっとも1に近いものが「その品種である可能性が高い」ものとして判定させます。
なので、いまの t「0、1、2」という形で品種を表すのは不都合です。
これを、正解を1、それ以外を0というリストに加工してやりましょう。
t_matrix = np.zeros(3 * n).reshape(n, 3).astype(np.float32)
t_matrixに0の入ったn行3列のリストを作成します。
今回はnには150が入ってますので、150行です。
[0. 0. 0.]
[0. 0. 0.]
…
for i in range(n):
t_matrix[i, t[i]] = 1.0
これで150回ループさせて、t_matrixに正解データの位置には1、間違いには0を入力します。
詳しく解説しとくと
第1ループでは
t_matrix[0,0] = 1.0 のように、0行0列に1.0を代入
[1. 0. 0.]
第51ループでは
t_matrix[51,1] = 1.0 のように、51行1列に1.0を代入
[0. 1. 0.]
第101ループでは
t_matrix[101,2] = 1.0 のように、101行2列に1.0を代入
[0. 0. 1.]
となります。tリストの使い方が重要。
こ~んな素敵なリストが出来ました。
訓練用データとテストデータに分割しよう
さぁ、出来た150個のリストを全部使って訓練はしません。
全部使うと、一度訓練で使用したデータを、もう一度仕訳けられるか確認するだけになります。カンニング野郎の汚名を着せられます。
ちゃんと、見たことないデータも正解に分類できたら本物ですよね。
ではコイツを、訓練用データとテストデータに分けてやりましょう。
index = np.arange(n)
index_train = index[index % 2 != 0]
index_test = index[index % 2 == 0]
この3行で、偶数と奇数の入ったリストを作ります。
コレを使って、偶数と奇数でデータを2分割してやりましょう。
x_train = x[index_train, : ]
t_train = t_matrix[index_train, : ]
x_test = x[index_test, : ]
t_test = t[index_test]
xの偶数をx_trainに、t_trainにはxに使われたのと同じ箇所の正解データをぶち込み、同じように奇数のデータをx_testとt_testに入れます。
t_testだけ、マトリックス[1,0,0]である必要がないため
tからデータを取り出しているところだけご注意ください。
ここまで出来たらあとは簡単。
Variableタイプのデータに変換しましょう。
x_train_v = Variable(x_train)
t_train_v = Variable(t_train)
x_test_v = Variable(x_test)
それではみなさんお疲れさまでした。
データの加工は終了です。これで、深層学習に使える形になりました。
次回がコレを使って学習を実施してみましょう。
これで貴方の肩書は「データ加工師」です。
印鑑偽造などの悪用はいけませんよ。
それでは。
関連記事
-
前の記事
【Chainer実践編1】深層学習に必要なデータってどんなの?ニューラルネットワークを訓練してみたら理解できた。 2018.04.10
-
次の記事
【Chainer実践編3】加工データはどう学習に使う?学習させてみたらそりゃ理解できるだろうよ。 2018.04.14
Advertisement

コメントを書く