データ分析とか基盤系に興味あります。MLChainerで癌の良性・悪性の分類予測を試してみたいと思います。Networks社が開発を進めているディープラーニング(ニューラルネットワーク)に特化したフレームワークです。ディープラーニングについては以下の記事を見て頂けると嬉しいです。Runと呼ばれる仕組みがあります。TensorFlowや他のディープラーニングに特化したフレームワークと比較して学習途中に数値やサイズの確認が出来るためデバックがしやすいです。Chainerの構成はシンプルなのでパラメータのチューニングも理解しやすいのがメリットです。Chainer構造理解Chainerの構成要素は以下となります。詳細については実装編で説明させて頂きますが簡単に全体像を把握できるように内容を記載します。定義してモデル構築optimizerを定義:パラメータの更新を行うアルゴリズムの選択iteratorを定義:バッチサイズを指定updaterを定義:optimizerの設定や使用するデバイス(CPUやGPU)を選択します。実装編それでは実際にChainerで癌の分類予測問題を解きたいと思います。必要となるライブラリをインポートします。jsoncancerデータを取得しどのようなデータ確認します。shape:[30]2クラス分類問題で、入力層は30となります。扱いやすいよう、DataFrameにします。get_target_names(x))cancer_data.head(5)データを確認してみます。32)32カラムで569レコードのデータセットができました。入力変数と教師データ(出力変数)に切り分けます。30)入力変数と教師データに切り分けることができました。このままではChainerで学習させることはできません。Chainerで計算できるデータ形式に変換する必要があります。Chainerで計算できるデータ形式に変換Chainerで計算を行うために、下記の3点を満たしている必要があります。定義されているか作ったデータが上記のルールに従っているか確かめmす。check:float64データ形式や要素のデータ型がChainerで計算できるデータ形式になっていないため、変換する必要があります。check:float32正しくデータ形式を変換させることができました。Chainerで使用するデータセットの形式メモリに乗の小さなデータの場合は、入力変数と教師データをタプルで1セットにし、リスト化しておくことがChainer推奨のデータ形式となります。t))次に教師データと検証データに分割したいと思います。seed=1)以上でChainerで必要とされるデータ形式が完成しました。ここからは、modelの宣言、optimizerを定義、iteratorを定義、updaterを定義していきます。モデルの定義ここでは入力層・隠れ層・出力層を定義し損失関数を求めています。詳しくは以下をご確認下さい。u2モデルを定義できたのでインスタンス化します。L.Classifier(nn)これでmodelの定義とインスタンス化は完了です。次は「optimizer」を定義します。Optimizerの定義optimizerとはパラメータの更新を行う箇所で、パラメータの最適化を行うための最適化のアルゴリズムを選択します。ついては別途記事を書きたいと思います。アルゴリズムを定義するだけでは、モデルに反映されないためoptimizer.setup(model)でアルゴリズムをモデルに適用させます。次はIteratorを定義する必要があります。Iteratorの定義Iteratorでは「バッチサイズ」を決めます。順伝播で評価関数を計算するとき全てのサンプルを使用するのではなく、ミニバッチと呼ばれるサンプルの一部のデータセットのみで評価関数の計算を行いパラメータの学習を行います。バッチサイズとは「バッチサイズ」とはランダムに抽出したサンプルの一部のデータセットのことです。100万レコードある場合、100万レコードいっぺんに実施することはメモリやCPUが足りません。100サンプルずつ実施するようにします。この1回の試行で利用するデータのサイズをバッチサイズといいます。epochといいます。100万レコードを、100サンプルずつ行う場合1万epochとなります。shuffle=False)Iteratorを定義できました。次はupdaterの定義です。updaterの定義Updaterでは、Optimizerの設定・デバイス(CPUやGPU)の設定を行うことができます。CPUを利用する場合、device=-1とオプションに指定し、GPUを使用する場合にはdevice=0と明示しておく必要があります。deviceを指定しない場合は、CPUが使用されます。今回はCPUを利用します。device=-1)updaterを定義できました。次はTrainerとextensionsの設定を行います。Trainerとextensionsの設定Trainerでは、エポック(ミニバッチを全て処理して1エポック)の回数や、そのextensionsでオプションを指定することにより、結果をログ出力や標準出力できます。実行trainer.run()実行結果を確認してみてみましょう。Trainerを使用すると、事前に定義しておいたresult/cancerというディレクトリができ、その中のlogというファイルが生成されます。logのファイルを確認してみてみましょう。検証データに対して65%ほどであることが分かります。損失関数も確認してみたいと思います。'validation/main/loss']].plot()とりあえず一連の流れは理解できました。色々なアルゴリズムが多く何が最適なのか判断が難しいですね。調べたところ画像認識ではChainerが優れているようです。次はChainerで精度を向上させる方法や予測問題・他のフレームワークとも比較してみたいですね。追記ランダムフォレストでも試してみました。BCPプラクティスBCPコマンドの備忘録となります。検索はてなブログをはじめよう!casekblogさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。