
120
6
章 クラス分類
II
:感情分析
「1を足すスムージング」は非常に単純な手法であり、全ての頻度に1を足すだけです。頻度に1を足
すスムージングを行うことで、全ての単語は1回以上出現したように見せかけることができます。これ
は、「たとえ与えられた単語がコーパスに存在しなかったとしても、私たちのサンプルしたツイートがそ
の単語をたまたま含まなかっただけである」というチャンスを与えていることを暗に仮定しています。
このスムージングを導入するためには、
という計算を行う代わりに、次の計算を行います。
ここで、なぜ分母には2を足しているのでしょうか? それはスムージングを行った後も、確率であ
る必要があるからです。そのため、全ての場合の確率の和が1になるように正規化を行う必要がありま
す。現在のデータセットにおいて、「awesome」という単語は、それがツイートに存在する場合と存在
しない場合(
1
か
0
)の2 通りあります。実際に、全確率の和は1になります。
同様に事前確率についても、次のように計算できます。
6.3.5
アンダーフローへの対応
まだ、もう一つ問題があります。現実では、この簡単な例で求められた確率よりも、さらに小さい値
の確率になります。また、特徴量の数は2より大きくなるのが普通です。特徴量の数だけ確率を掛け合
わせる必要があるため、最終的な確率はさらに小さな値になります。これではNumPyがカバーできる
少数の精度を保つことができません。
>>>
import numpy as np
>>>
np.set_printoptions(precision=20) ...