男のブログ俺は中卒だ。学歴なんて無くても生きていける。機械学習pythonsuckamonTensorFlowをバックグラウンドで動作させるKerasを使って、scikit-learnで提供されているアヤメのデータセットを学習し、分類させる多層パーセプトロンのニューラルネットワークモデルを作ってみたので、サンプルコードを紹介する。今回はJupyterNotebookでコードを書いていく。Anaconda仮想環境にTensorFlow環境を構築する必要があるので、下記の記事を参考にまずは環境構築をおこなう。install」コマンドで随時インストールをおこなう必要がある。環境が用意できたらJupyterNotebookを起動し、以下のコードを実行する。エラーが発生しなければOK。メッセージはエラーではない。keras補足で説明しておくと「Keras」はTensorFlowのようなディープラーニングに対応したライブラリを、より簡単に扱うためのライブラリだ。「Keras」だけでは動作しないので、必ずTensorFlowなどのライブラリも同時に必要となる。データセットの読み込み今回使用するデータセットは「scikit-learn」から読み込む。iris.targetまた、読み込んだデータセットを説明変数(x)と目的変数(y)に分けておく。それぞれのデータの中身を確認しよう。Virginicaxにはアヤメの特徴量が格納されており、それぞれの説明変数によってアヤメは3つの種類(y)に分類される。このデータセットをディープラーニングさせたモデルを作り、アヤメの分類器を作っていく。説明変数xの正規化xは大体0.1〜8.0の間にデータが散らばっている。データの正規化は、例えば身長・体重など単位の違う複数の説明変数を使用する際によく行われ、正規化をすることでモデルの精度が向上する場合がある。今回xに対し、次のとおりscale関数を使って正規化をおこなう。]])これにより説明変数が平均値0、標準偏差1の値に正規化された。目的変数yをダミー変数(One-Hot)に変換する今回の目的変数は0、1、2のいずれかの値だが、これはアヤメの品種を表す値のため、量的データでなく質的データと言える。この目的変数をそのまま使用すると、量的データとして認識され、結果として1.5や0.8などの半端な値が予測されてしまうことになる。この問題を避けるため、目的変数を「One-Hot」と呼ばれる形式に変換する。変換後のデータは次のとおり、行列形式にエンコーディングされる。1]One-Hotへのエンコーディングは次のとおり、np_utilsを使えば良い。...説明変数を訓練データとテストデータに分割する次に正規化した説明変数を、訓練データとテストデータに分割する。random_state=0)モデルの作成と学習Kerasを使ったモデルの学習の流れは、まずモデルを用意し、モデルにいくつかのパラメータを与えてcompileする。最後にfit関数で訓練データを使って学習といった手順でおこなっていく。モデルの作成からパラメータを与えるところまで一気に見ていこう。3種の分類をしたいので出力層は3を指定model.add(Dense(3))model.add(Activation('softmax'))補足として、今回はニューロン数を16としたが特に決まりはなく、本来は学習の結果を見ながら調整するところだ。Activationは活性化関数と呼ばれるものだが、ここでは深く掘り下げない。次はモデルをcompileし、fit関数で学習をおこなっていく。verbose=1)補足すると、まずcompile関数のoptimizerで最適化アルゴリズムを指定する。多数のアルゴリズムが用意されているが今回は「adam」を使用した。次にlossだが、ここでは任意の損失関数を指定できる。今回は「categorical_crossentropy」という関数を選択。最後にmetricsだが、これは評価関数を意味し「accuracy」を選択した。モデルの学習をfit関数で実行するが、引数について簡単に紹介しておこう。epochsは整数でモデルを訓練するエポック数(x・y全データの反復)を指定する。batch_sizeは設定したサンプル数ごとに勾配の更新を行う。verboseはログの表示形式を表す。0はログを出力せず、1はプログレスバーで標準出力、2はエポックごとに1行のログを出力する。今回はverboseに1を指定したので、fit関数を実行すると以下のように学習の過程が出力されるはずだ。0.9732ログの「loss」に注目してほしい。この値が小さければ小さいほど、モデルの精度は高まっているということだ。今回はepochsに50を指定したが、学習が進むにつれてloss値が小さくなっていることが分かる。モデルの精度を評価では学習したモデルの精度を測ってみよう。0.9797%とかなり高い精度の学習モデルができあがった。実際にテストデータを使って分類をおこなってみる。1])」のVirginicaだ。1.]]この説明変数を学習器に与えてみる。array([2])見事に正解結果が得られた。重複した時系列データを扱うプロフィール中卒男15歳で熊本から単身大阪へ渡り、囲碁棋士になるための修行を積む。その後、紆余曲折ありプログラミングを学び職とする。現在プログラミングや統計、機械学習の勉強に合わせ、双子の育児に奮闘中。