見出し画像

30日Python #24 機械の判断を、のぞき込む(plot_tree)

「読むデータ」は、臨床医・医学研究者のための、Pythonと機械学習の連載。プログラミングの技術を身につけることから始め、自分のデータを「読み解く」力を鍛える。今回の#24では、学習した決定木そのものを図にして、機械がどんな樹を育てたのかを読む。第22回で動かしたモデルの、中身をのぞき込む回だ。所要時間は5分。読むのに3分、手を動かすのに2分。


「なぜそう判断したか」が、見える

第22回で、決定木に学習させた。第23回で、それが患者を予測することも確かめた。だが、ここまで機械の「中身」は、見ていない。

多くの機械学習モデルは、中身が見えない。よく当たるが、なぜそう判断したのかは分からない——いわゆるブラックボックスだ。だが決定木は違う。育てた樹を、そのまま図にして見られる。「どの項目を、どの値で分けたか」を、人間の目で一つずつ追えるのだ。

これは、本連載の名前「読むデータ」が最もよく効く瞬間だ。機械の判断を、ありのままに読む。第21回では考え方を示す概念図を見たが、今日見るのは、前回あなたが実際に学習させたモデルそのものの姿だ。


要点

  • 学習した決定木は plot_tree で図にできる。機械が組み上げた枝分かれが、そのまま見える。

  • 各ノードには「分ける条件」「振り分けられた人数」「悪性・良性の内訳」が書かれている。

  • 機械が最初の手がかりに何を選んだかを読めば、機械の「着眼点」が分かる。


1. 樹を、図にする

学習済みモデル(第22回の model)を、plot_tree で描く。

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

plt.figure(figsize=(15, 8))
plot_tree(model,
          feature_names=X.columns,
          class_names=["malignant", "benign"],
          filled=True, rounded=True, fontsize=9)
plt.show()

実行すると、この枝分かれした樹が表示される。

plot_tree は、機械が育てた決定木を、そのまま図にする命令だ。feature_names で項目名を、class_names で答えの名前(malignant=悪性, benign=良性)を表示させ、filled=True で、悪性寄り、良性寄りに応じてノードを色分けしている。これは整えた概念図ではない。機械が吐き出した、ありのままの姿だ。

2. ノードに書かれていることを、読む

一つひとつのノード(箱)には、いくつかの情報が詰まっている。いちばん上の箱(根)を読んでみよう。

一行目に、分ける条件。機械が最初の手がかりに選んだのは worst concave points(核の切れ込みの最悪値)だ。第21回の概念図でも切れ込みが最初に来たが、本物のモデルも、与えた30項目の中から、これを第一の質問に選んでいる。核膜の不整は、病理で悪性を疑う重要な所見だ。機械はそれを、データだけから自力で見つけ出した。

samples はその箱に振り分けられた人数、value は悪性・良性の内訳、class はそのノードでの多数派の答えだ。下へたどるほど、悪性と良性がきれいに分かれていく。色が濃くなるほど、どちらか一方に偏っている、つまり判断がはっきりしている、という意味だ。

3. 読めることの、価値

この「読める」という性質は、医療でこそ重要になる。

もしモデルが「この患者は悪性」と予測したとき、決定木なら理由を追える。「核の切れ込みが基準を超え、さらに面積も大きかったから」と、判断の道筋を示せる。患者にも、同僚にも、説明できる。

よく当たるが理由を説明できないモデルと、多少精度が劣っても理由を読めるモデル。どちらを目の前の患者に使うべきか、これは、機械学習を医療に持ち込むときの、核心的な問いだ。決定木は「読める」側の代表であり、その価値を、今日あなたは自分の目で確かめた。

(この「読めるかどうか」は、連載の終盤でもう一度、強い形で問い直すことになる。)


今日の実習(2分)

新しいセルで、上から順にやってみよう。
(第22回の学習済み model がある状態を想定)

  1. 本文1のコードを実行し、決定木の図を表示する。

  2. いちばん上の箱(根)を読み、機械が最初に選んだ項目が worst concave points であることを確かめる。

  3. 一番下の箱(葉)の色に注目する。濃い箱ほど、悪性または良性にはっきり偏っていることを読み取る。

機械が育てた樹を、上から下へ、自分の目でたどってみよう。


今日のまとめ

決定木は plot_tree で図にでき、機械の判断を一つずつ読める。機械が最初の手がかりに選んだのは「核の切れ込み」——病理医が悪性を疑う所見を、データだけから見つけ出していた。よく当たるだけでなく、なぜそう判断したかを読める。この「読めること」の価値こそ、決定木がくれる最大の贈り物だ。


次回、第25回「当たった、外れた、を数える」

いよいよモデルの成績をつける。学習に使っていないテスト用の患者で、どれだけ当てられたか。正解率と、その限界を学ぶ。

いいなと思ったら応援しよう!