2017年7月13日木曜日

ストップワード

ストップワードに疾患名を設定していなかったため,ベイズ分類の成績が本来よりも良くなっていたようで,ストップワードを加えると正確度(Accuracy)が下がってしまった。まあ,これは当然の結果。さて,気を取り直してストップワードを設定して疾患ごとのデータサイズを100~500に変えながら分類を行ったところ,データサイズが500件のとき0.62になったということ。ストップワードを入れなかったときに比べ約0.8の減少。なお,この分類テストでは品詞を絞らず,すべての形態素を素性に使っている。また,KH Coderが自動的に作成する複合語を設定して過分割を抑制している。だが,しかし,この効果がプラスに出ているかどうかはためしてみないとわからない。そう,何事もやってみないとわからない。多分こうだろうと安易に考えて安心してはいけない。
さて,同じ実験をKH Coderではなくscikit-learnというライブラリのBayes分類器を用いてやってみた。1疾患当たりのデータサイズを100~600に増やしながら,交差検証テストだけでなく,訓練データ並びに別途作った検証用データについても分類性能(正確度)を測定してみた。なお,検証用データの件数は,訓練用が300件までは訓練用データ件数と同じで,400件の時は300件,500件の時は200件,そして600件の時は100件とした。これは,利用できるデータサイズが700件以下だったためである(子宮体癌)。結果を下表に示す。

表1 scikit-leanを使ったBayes分類の結果

なお,表中のalphaは分類器のパラメタ(Laplace smoothing)で,ゼロ頻度を避けるためのものである(θ=(x + alpha)/(N + alpha*d) for more detail see Wikipedia "Additive smoothing")。下図はこの結果をグラフにしたものである。

図1 学習曲線

この結果から,1疾患当たりのデータサイズが500件および600件のとき,正確度は0.72となり,今回調べた範囲ではもっとも高くなった。また,表1から,データサイズが増加するにつれて,訓練スコアは徐々に減少し,それとは反対に検証データによる分類正確度は増加している。これは,過学習が抑制されていることを表しているのだろう。

今回の結果はKH Coderの結果と異なっている。 考えられる原因は
  1. 分類の特徴量(素性)として名詞しか使っていない
  2. 複合語を使った過分割抑制を行っていない
の2点である。この他にも形態素解析器が使っている辞書やアルゴリズムも影響しているかもしれない(KH CoderはChasen,scikit-learnはMeCab)。


0 件のコメント:

コメントを投稿