Juan Nunez-Iglesias, Stéfana van der Walt, Harriet Dashnow:エレガントな SciPy

いろいろ難しい Python

作成日:2020-09-20
最終更新日:

概要

原題は "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)と呼ばれるものである:

正解:非スパムメール正解:スパムメール
予測:非スパムメール31
予測:スパムメール24

これは p.120 で array として得られたそのものである

書誌情報

書 名エレガントな SciPy
著 者Juan Nunez-Iglesias, Stéfana van der Walt, Harriet Dashnow
訳 者山崎 邦子、山崎 康宏
発行日2018 年 11 月 9 日 初版第1刷
発行所オライリー・ジャパン
発売元オーム社
定 価3400 円(税別)
サイズ
ISBN978-4-87311-860-4
その他越谷市立図書館で借りて読む
NDC

まりんきょ学問所コンピュータの部屋コンピュータの本Python > Juan Nunez-Iglesias, Stéfana van der Walt, Harriet Dashnow:エレガントな SciPy


MARUYAMA Satosi