【W7】活性予測のための機械学習モデル_14_Step3_08_ANN_WF実行
【W7の目的】
前回でRProp MLP Learnerノードのおかげでニューラルネットワークが簡便に体験できるのだと話してきました。
ではいよいよ実行結果を見てみましょう。
【WFの流れをおさらい】
ニューラルネットワーク(NN)で、k分割交差検証しつつ予測するワークフロー(WF)をおさらいしましょう。
ランダムフォレスト(RF)での同様のWFを詳しめに説明したので、その記事を参考にしつつ以下各ノードの設定など見ていきます。
【X-Partitioner】
RF用のX-Partitionerと完全に設定が同じです。
Random seedまで一致していますので、10回に分けるデータセットも完全に一致します。
例えばですがデモデータで10回目の分割時のTest dataを見比べてみましょう。下の出力ポートを見てみると
RF: X-Partitioner (#246)
NN: X-Partitioner (#263)
選ばれた化合物群は一緒ですね。RFとNNは同じ学習データで学んで、同じTest dataを予測した結果を返しています。
【余談: ノードのID番号表示】
#の後の番号はノードのID番号です
メニューの目玉のアイコンをクリックして表示をオン・オフできます。
その右のアイコンだとノード名表示をオン・オフできるんですけど、オフしたいときってどういう時ですか?
「さあ、このWFのこの絵のノードでは何をしてるでしょうか!」みたいなクイズでもするんかな。
【RProp MLP Learner】
機能説明で2章に分けたのはこのノードが初めてでしたね。
設定:
ご覧の通りこのノード、本来は設定を工夫すべき(ハイパー)パラメータがあります。
でも今回はデモデータの設定のままです。
Number of hidden layersの数などを増やしていけば深層学習ですから底なしですよー。今回は意図的にさらっと流します。
些細な疑問なんですが、Random seedに-416818657を選ぶのはどんな気持ちの時だろう。
【MultiLayerPerception Predictor】
Learnerで作られたモデルの実行ノードです。日本語化されたディスクリプションを引用します。
今回の設定はこちら
今回はクラス判別モデルなので
とのこと。
Append columns with class probabilitiesにチェックが入れてあるので、クラス別の確率が予測されて出力されます。そして最も高い確率すなわち勝者ニューロンのクラス名が文字列データとして出力されます。
結果:デモデータで10回目の分割時のTest data予測結果
【X-Aggregator】
上記のデータを含め、10回ループしたすべての予測結果を集計します。
設定:
RFの場合と設定は同じでした。
【実行時間を計ってみた】
まだ3層ですし、4511化合物のデータ数ですからそんなに計算時間はかからないです。
下図のようにTimer Infoノードをくっつけて、X-PartitionerをリセットしてからTimer Infoノードを実行してみました。
結果は下表の通り。PCの仕様や状態に左右されてしまうのですが、今回は
RProp MLP Learnerも77秒ほどでモデル作成を完了できました。かわいい感じです。伝わらんか。
予測精度はRFの際と同じく今のところはOverall Accuracyのみ取り上げておきます。
デフォルト設定でも0.809となかなかの好成績でした。
以上でANNの体験学習は終わりです。次回からはこれまたディープなサポートベクターマシンです。
おまけ:
【深層学習は玄人の御業】
NNを多層化すればディープニューラルネットワークすなわち深層学習となるはずなので、今回は深層学習も本当に浅ーいところをちょっとだけ勉強したことになると思います。
RProp MLP Learnerは下記の3つの設定を変えることが可能です。
① Maximum number of iterations
学習の反復回数です。
② Number of hidden layers
ニューラルネットワークのアーキテクチャにおける隠れ層の数を指定します。
③ Number of hidden neurons per layer
各隠れ層に含まれるニューロンの数を指定します。
TeachOpenCADDのW7では
①は100回,②は3層,③は5個との設定でした。
それぞれどれぐらいの幅でスクリーニングするものなのかが知りたいです。きっと入力データの数や分布、モデルの目的などで工夫されるのでしょうね。実際のMLPモデルのトレーニングはどのあたりを工夫するものなのか、藤さんから一例を挙げていただきました。
上記の3つだけでも最適化を目指せば大変であることは推察されました。
さらにscikit-learnのMLP classifierの記事を見つけて、「あ、素人は手を出してはいけないのでは」と気づいたのでここまでとします。玄人の皆さん、頑張ってください!
パラメータ最適化の話ではないですが、最近見かけた下記のtwitterも印象深かった。
生兵法は大怪我の基。失礼しました。
記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。