chainer-saliencyはじめに以下の2回で補助図を用いた化合物の可視化を試してみました。算出結果に適用してみます。rkakamilan.hatenablog.comrkakamilan.hatenablog.comchainer-saliencyについて以下の論文(1)をchainerで実装したもので、記事(2)にて紹介されています。記事(2)が公開された時点では、chainer-saliencyのレポジトリにありましたが、現在はchainer-chemistry内に入っています。notebookを参考にし、一部書き方を修正しながら進めます。定義してますが、chainer-chemistryにはモデルを簡単に定義出来るchainer_chemistry.models.prediction.set_up_predictorが入ってますのでこれを使います。データセットはexampleと同じdelaneyの溶解度データセットです。device=device)学習したモデルを用いてsaliencyを計算します。notebookで紹介されています。train=True)得られたsaliencyはBaceCalculatorクラスのaggregateで集計します。55)これらsaliency_agg_xxxには学習に用いた902化合物ごとに原子の重みが入っており、各化合物のインデックスにアクセスすることで重み/saliencyが取り出せます。このsaliencyを用いてプロットする関数は、これまで用いていた関数を少し変更してます。重みのscalingにrdkit.Chem.Draw.SimilarityMaps.GetStandardizedWeightsを用いていましたが、chainer-chemistryにも幾つかscalingのメソッドが入っているためこれを指定できる形式にしました。以下同じ試しに、ID699の化合物を図示してみます。'Br'])元々化合物の描画の際のカラーマップ等はchainer-chemistryから拝借していたのでexampleとほぼ同じ描画が出来ました。(今回の記事では補助図は除いてます。)ID699_abs_maxスケーラーによる描画の違い前回の記事までは化合物の描画の際、化合物ごとに原子の重み/saliencyはrdkitのGetStandardizedWeightsを用いて、絶対値最大の値でスケーリングしていました。chainer-chemistryでもabs_max_scalerで同じスケーリングを施しています。chainer-chemistryにはabs_max_scaler以外にも、最小値と最大値を用いて0-1にスケーリングするmin_max_scalerが実装されています。(他にもnormalize_scalerがありますが、負の値を含まないsaliencyのためのメソッドなので今回は割愛します。)min_max_scalerを使って先のID699を可視化してみます。'Br'])ID699_min_max溶解度にプラスに寄与しているとされる原子が濃く描画されているものの、色の濃淡のみで分かりづらくなってしまいました。原子ごとの色はchainer_chemistry.saliency.visualizer.visualizer_utils.red_blue_cmapで決定していましたが、これは元々-1~1にノーマライズされた重み/saliencyに対応するために定義されたものであるため、min_max_scalerとの相性は良くないようです。abs_max_scalerが最適なのか。これを考えるために新しくscalerを考えます。与えた重み/saliencyの絶対値最大ではなく、指定した値でスケーリングするfixed_val_scalerを定義しました。(1.1827562)を有することがわかりました。この値をfixed_val_scalerのmax_valとして指定します。ID455の場合は、当然ですがabs_max_scalerとfixed_val_scalerで違いはありません。ID455_abs_maxID455_fixed次に重み/saliencyの絶対値最大の値が小さい化合物で描画してみます。(0.114224076)を有するようです。0.114224076)ID762_abs_maxID762_fixedfixed_val_scalerを用いた方が色が薄くなっています。このように、abs_max_scalerを用いた場合は、一つの化合物"内"の原子の寄与度を比較する場合には良いですが、化合物"間"で比較する場合には注意が必要そうです。fixed_val_scalerで単純にデータセット内の重み最大値を用いると、各化合物の描画が分かりづらくなってしまいます。下記の通り、個々の化合物の重み/saliencyの和は目的変数とよく相関しており、実際の目的変数/予測値を併記したり、目的変数/予測値で重みを補正する等の対処も可能かもしれません。2.617349583427535e-243)おわりに今回はchainer-chemistryで計算できるsaliencyを元に、スケーリングによる違いを試してみました。説明可能性は機械学習において注目されており、化合物関連でも色々な手法が出てきています。下記のTJOさんの記事でも紹介されていましたが、そもそも機械学習のモデルの説明可能性に対して批判的な意見も出てきているようです。tjo.hatenablog.com自分としては、これら出てきた手法をそのまま実務での活用にあたってはまだまだ研究・考察が必要であると言うのが個人的な感想です。単純にケミストのintuitionとの比較だけで良し悪しを論じる前に幾つかのポイントを検証していく必要があると思います。思いつくところを書いてみましたが、もっとあるかもしれません。ご意見等いただければ幸いです。(学習データセットの中に、予測したい化合物の部分構造は十分に含まれているのか。予測したい化合物は適用範囲内か。(カラーマップ、重み/saliencyのスケーリング方法、など)今回のコードはGistにアップしておきました。chainer-saliency新規性が高いけれど合成が難しい部分構造に今後どのように向き合っていくか化合物の可視化を機械学習に適用してみた少し拡張した化合物の可視化を試してみたPD-1/PD-L1タンパクタンパク相互作用阻害剤の特許を調べてみた月別アーカイブはてなブログをはじめよう!rkakamilanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。