見出し画像

【W7】活性予測のための機械学習モデル_10_Step3_04_RF利活用

【W7の目的】

ターゲット分子(EGFR)に対して新規な化合物の活性を予測するために、様々な教師あり機械学習(supervised ML)アルゴリズムを使用する方法について学習します。

ランダムフォレスト(RF)のworkflow(WF)はすでに話題にしました。

WFは極めてシンプル。

10分割交差検証を4ノードで実装できるので、今回はせっかくなので動かして途中の様子も見てみます。

【X-Aggregatorの動かし方2つ】

前回紹介したとおり、X-Aggregator はX-Partitionerで設定した分割回数分のループ処理を実施し、集計するためのノードです。デモデータは10分割交差検証ですから10回ループが回ります。

①    まとめて10回処理

②    1回ずつループを回す

の2通りの動かし方ができます。
私はWFを組み上げた後、いきなりまとめて処理ではなく、1回だけループを回してみて、自分の思い通りにデータ処理できているかを確認するようにしています。まあ私の場合、自分の設計した通り初回からうまくWF構築できていなかったケースが多いからなんですけどね。

今回は①②両方を体験してみようと思います。

【リセット処理】

ではまず、デモデータは10回のループを実行済みですから、いったんリセットします。

X-Partitionerで右クリックしてReset

これでX-Partitioner以降のWFは黄信号に変わりました。未実行だが設定は正常にできていて実行可能ということです。

【10分割交差検証を10回分まとめて実行する】

①   まとめて処理

X-Aggregatorを右クリックしてExecute

今回のデモデータなら10回のループを全実行しても数分ですね。
結果は元のデモデータと同じはずですので前回表示したとおりです。

X-Partitioner, Random Forest Learner, Random Forest Predictorの3つのノードの出力部分は、10回目のループが回った際のデータが出力されています。

【X-Aggregator 1回目】

②   1回ずつループを回す

またResetして、次はステップワイズに実行させてみます。
X-Aggregatorを右クリックしてStep Loop Executionを選択すると、1回だけWFが動きます。

1回目のみループを回した状態

【X-Partitioner 1回目】

設定は前回紹介済みですから結果だけ。TrainingDataは4059化合物なので4511化合物の90%相当です。

ちなみに何回リセットして実行しても同じ9割のデータが選ばれていますよね。前回ちょまどさんの記事を紹介したとおり、Random Seedを変えない限りは同じ乱数が発生しているからです。

【Random Forest Learner 1回目】

9割分の学習データを用いてRFを作成し、活性のあるなしの予測を行った結果などを出力しています。

【Random Forest Learnerから得られる情報紹介】

予測結果以外にも重要な情報を出力してくれます。

まずはt-kahiさんの記事から引用します。

"Attribute Statistics"では属性の統計値を得ることができるので,ここからどの属性がより分類に重要か(属性重要度)を算出することができます

この機能を活用すると、問題として設定した目的変数を改善したい場合、どの説明変数に注目すべきかの優先順位が推定できます。デモデータの場合はMACCSキーが説明変数ですから、活性発現に重要な寄与をする官能基を推定することができるかもしれません。

あるいは、機械学習モデルの予測精度を改善するために特徴量の選択をしたい場合にも、RFで重要な説明変数には注意を払うといった利用もあり得るでしょう。こちらはすでに記事を紹介しました。

玄人の方も属性重要度の分析をRFの利用理由の一つとすることがあるようです。
人間にも予測根拠がわかりやすいXAI(Exprainable AI)というのが今も話題になりますが, RFは人間にもわかりやすい機械学習モデルであるといえるかなと思います。

わかりやすさといえば、KNIMEのRandom Forest Learnerは決定木もノーコードで可視化してくれる親切設計です。

細かくは説明しないですが、分岐の根拠や深さなど上図に緑色でマークした場所などをクリックしたりするだけで直観的に操作して見ていくことができます。

初心者が機械学習を学ぶ教材としてKNIMEでのRF実装は非常に良いと思います。TeachOpenCADDの設計者の皆さんは本当にあちこちで気配りを行き届かせてくださっているなと思います。

さて寄り道しましたが再度WFに戻ります。

【Random Forest Predictor 1回目】

予測結果の出力なのでX-Aggregatorの全デモデータのうち1回目分と一致します。

上記Random Forest Learnerで4059化合物で学習して得られたRFモデルを用いて、残りの452化合物の活性あるなしを予測した結果です。

ここであまり他に紹介すべき情報はないのですが、もしここでScorerをつないで予測精度を見たらどうかというのは、興味があったらやってみてもいいと思います。今回の場合、10回のモデル生成をしますが、モデル間で予測精度の指標は大きくはぶれないと推測されます。

詳しくは述べないですがX-Partitionerでの化合物のスプリットはStratifiedすなわち目的変数の分布が均等になるように設定しているし、Random Forest Learnerのハイパーパラメータは固定だからです。

<参考>層化抽出法(そうかちゅうしゅつほう、: stratified sampling)

【X-Aggregator 2回目以降】

X-Aggregatorを単回実行した結果がループを回した数だけ集計されていきます。
もう一回Step Loop Executionを選べば、再度単回処理されて一旦停止します。

手動でループを回すのに飽きたらResume Loop Executionで最後まで一気に処理します。

皆さんもきっともう読み飽きてきているのではないかと。
今回はここまでとして、次回はハイパーパラメーターチューニングを勉強してみようと思います。


おまけ (でいいのか?) :

【予測精度が気になる方へ】

前回に予測精度はSteo4でまとめて扱うと言いましたが、何か月も先になりかねないのでごく一部だけ結果を掲示しておきます。

ComponentをOpenして、中にあるScorerの一番下のポートを見ます。

結果:

予測精度の評価についてのいろいろは今回はしょって、Overall Accuracyだけ見てみます。0.824はなかなか優秀だと思いませんか?

また後日詳しく見ていきましょう。


記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。