実行速度の比較¶
便利な実行環境である ipython
を用いて,二つのクラス NaiveBayes1
と NaiveBayes2
の訓練の実行速度を比較します.
そのために, ipython を起動し,訓練に必要なデータを読み込みます.
In [10]: data = np.genfromtxt('vote_filled.tsv', dtype=int)
In [11]: X = data[:, :-1]
In [12]: y = data[:, -1]
次に,クラスを読み込み,単純ベイズ分類器を実装した二つクラス NaiveBayes1
と NaiveBayes2
のインスタンスを生成します.
In [13]: from nbayes2 import *
In [14]: clr1 = NaiveBayes1()
In [15]: clr2 = NaiveBayes2()
最後に, %timeit
コマンドを使って,訓練メソッド fit()
の実行速度を測ります.
In [10]: %timeit clr1.fit(X, y)
100 loops, best of 3: 16.2 ms per loop
In [11]: %timeit clr2.fit(X, y)
1000 loops, best of 3: 499 us per loop
実行速度を見ると NaiveBayes1
の16.2ミリ秒に対し, NaiveBayes2
では499マイクロ秒と,後者が 32.5 倍も高速です.
for
ループを用いた実装では Python のインタプリタ内で実行されるのに対し, NumPy で配列の演算を用いて実装すると,ほとんどがネイティブコードで実行されるため非常に高速になります.
このようにブロードキャストを活用した実装は,コードが簡潔になるだけでなく,実行速度の面でも有利になります.