いろいろ難しい Python
原題は "Elegant SciPy"。 副題は「Python による技術計算」。
本書は、私には難しい。
この章は、高速フーリエ変換に伴う話題を扱っている。ここでは、 from scipy import fftpack で、fftpack サブモジュールを扱っているが、 https://docs.scipy.org/doc/scipy/reference/fftpack.html によれば、scipy.fftpack は legacy であるらしい。scipy.fft https://docs.scipy.org/doc/scipy/reference/fft.html を使うべきだろう。(2020-10-01)
5章は「疎行列を用いた分割表」である。いろいろコードを打って、p.128 の plt.imshow(out); を実行したら、 pp.126-128 で定義された homography という関数内で、sparse.coo_matrix の sparse が定義されていないというエラーが出た。この対応は、関数定義の前に、本書に書かれている from itertools import product と合わせて、from scipy import sparse を書いておくことである。 この、from scipy import sparse は p.121 には書かれているのだが、 本文中のコード断片を眺めてばかりいて打ち忘れていると、痛い目に合う。
ところで、「分割表」とは、contingency table の日本語訳である。これ自身は定着しているといっていいが、 p.119 では、対応行列という用語が出てきて、これには contingency matrix の訳であるとしている。 実際には、分割表と対応行列とは実質的に同じものであるから、訳も同じようにすればいいと思う。 たとえば、contingency matrix を「分割行列」と訳すのがその一例である。
もともと分割表の概念は、分散分析という統計学の検定手法に対応した生まれたものである。正確には逆で、 分割表の結果の統計学的な信頼性を検定するために分散分析という手法が生まれた。どういうことかというと、 本書の分割表の例で考えよう。十通のメールのうち、スパムメールの自動検出器で、 スパムでない場合は 0 、スパムである場合は 1 を対応することにする。
ベクトルを扱うには、numpy を使うのがいいだろう。
import numpy as np
予測値(predicition)のベクトルが次のように得られたとしよう。
pred = np.array([0, 1, 0, 0, 1, 1, 1, 0, 1, 1])
一方、人間が確認したメールの結果、すなわち正解データ(ground truth)が次の通りであったとする。
gt = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])
このようにしたとき、次の表が 2 x 2 の分割表(contingency table)と呼ばれるものである:
| 正解:非スパムメール | 正解:スパムメール | |
|---|---|---|
| 予測:非スパムメール | 3 | 1 |
| 予測:スパムメール | 2 | 4 |
これは p.120 で array として得られたそのものである
| 書 名 | エレガントな SciPy |
| 著 者 | Juan Nunez-Iglesias, Stéfana van der Walt, Harriet Dashnow |
| 訳 者 | 山崎 邦子、山崎 康宏 |
| 発行日 | 2018 年 11 月 9 日 初版第1刷 |
| 発行所 | オライリー・ジャパン |
| 発売元 | オーム社 |
| 定 価 | 3400 円(税別) |
| サイズ | 版 |
| ISBN | 978-4-87311-860-4 |
| その他 | 越谷市立図書館で借りて読む |
| NDC |
まりんきょ学問所 > コンピュータの部屋 > コンピュータの本 > Python > Juan Nunez-Iglesias, Stéfana van der Walt, Harriet Dashnow:エレガントな SciPy