perl-Algorithm-ComplementNB(complement naive Bayes)

最近は教師あり学習の分類器について調べている。そこで2年ほど前に話題になったcomplement naive BayesをPerlで実装した。コードは「y-tag/perl-Algorithm-ComplementNB - GitHub」にある。

Algorithm::ComplementNBは通常のnaive Bayesにおいてシンプルに補集合の頻度を用いたcomplement naive Bayes、Algorithm::TWCNBはオリジナルの論文に記されていたtransformed weight-normalized complemnt naive Bayesであり、こちらはTFやIDFの情報を用いたり、ドキュメントの長さで正規化したり、さらに対数をとって正規化を行ったりしている。

以下「Algorithm::NaiveBayes」とComplementNBおよびTWCNBを比較した。Algorithm::NaiveBayesのバージョンは0.04、CompelmentNBとTWCNBは0.01である。用いたデータは「Csmining Group」で公開されている「20 Newsgroups data set」と「R52 and R8 of Reuters 21578」。どちらもstemmedなものを用い、ComplementNBとTWCNBのスムージングパラメータであるalphaは1.0で計測した。評価指標はaccuracyである。

NaiveBayes ComplementNB TWCNB
20Newsgroup 0.810 0.824 0.835
r8 0.961 0.951 0.941
r52 0.869 0.877 0.868

結果としては、予想していたようなgainを得られなかった。ただし今回計測したのはaccuracyであり、precissionやrecallでは異なる傾向が見られるかもしれない。

以下、正解ラベルごとのaccuracyの結果である。

20Newsgroup NaiveBayes ComplementNB TWCNB
alt.atheism 0.749 0.727 0.740
comp.graphics 0.810 0.771 0.756
comp.os.ms-windows.misc 0.621 0.631 0.746
comp.sys.ibm.pc.hardware 0.735 0.740 0.763
comp.sys.mac.hardware 0.761 0.766 0.836
comp.windows.x 0.788 0.883 0.829
misc.forsale 0.662 0.628 0.772
rec.autos 0.934 0.927 0.916
rec.motorcycles 0.935 0.970 0.975
rec.sport.baseball 0.914 0.929 0.950
rec.sport.hockey 0.975 0.995 0.990
sci.crypt 0.952 0.972 0.975
sci.electronics 0.677 0.679 0.677
sci.med 0.854 0.922 0.889
sci.space 0.893 0.937 0.931
soc.religion.christian 0.945 0.940 0.940
talk.politics.guns 0.923 0.918 0.945
talk.politics.mideast 0.899 0.939 0.931
talk.politics.misc 0.581 0.568 0.529
talk.religion.misc 0.390 0.430 0.351
all 0.810 0.824 0.835
r8 NaiveBayes ComplementNB TWCNB
acq 0.983 0.973 0.953
crude 0.967 0.975 0.917
earn 0.983 0.990 0.994
grain 0.600 0.600 0.700
interest 0.691 0.531 0.654
money-fx 0.943 0.839 0.793
ship 0.611 0.583 0.639
trade 0.947 0.947 0.773
ALL 0.961 0.951 0.941
r52 NaiveBayes ComplementNB TWCNB
acq 0.984 0.974 0.950
alum 0.211 0.632 0.474
bop 0.111 0.000 0.000
carcass 0.000 0.000 0.000
cocoa 0.733 1.000 0.933
coffee 0.909 1.000 1.000
copper 0.385 0.846 0.692
cotton 0.111 0.889 0.667
cpi 0.588 0.353 0.353
cpu 0.000 0.000 0.000
crude 0.967 0.975 0.926
dlr 0.000 0.000 0.000
earn 0.983 0.989 0.994
fuel 0.000 0.000 0.000
gas 0.000 0.250 0.125
gnp 0.267 0.400 0.267
gold 0.550 0.850 0.550
grain 0.100 0.600 0.800
heat 0.000 0.000 0.250
housing 0.500 0.500 0.500
income 0.000 0.000 0.000
instal-debt 0.000 0.000 0.000
interest 0.667 0.543 0.679
ipi 0.455 0.000 0.091
iron-steel 0.083 0.250 0.250
jet 0.000 0.000 0.000
jobs 0.667 0.750 0.417
lead 0.000 0.000 0.000
lei 0.000 0.000 0.333
livestock 0.200 0.400 0.600
lumber 0.000 0.000 0.000
meal-feed 0.000 0.000 0.000
money-fx 0.943 0.839 0.839
money-supply 0.750 0.286 0.393
nat-gas 0.000 0.000 0.000
nickel 0.000 0.000 0.000
orange 0.444 0.667 0.778
pet-chem 0.167 0.167 0.167
platinum 0.000 0.000 0.000
potato 0.000 0.667 0.333
reserves 0.083 0.000 0.000
retail 0.000 0.000 0.000
rubber 0.333 0.778 0.778
ship 0.611 0.667 0.667
strategic-metal 0.000 0.000 0.000
sugar 0.880 0.960 0.960
tea 0.000 0.000 0.000
tin 0.000 0.800 0.600
trade 0.947 0.920 0.840
veg-oil 0.000 0.000 0.091
wpi 0.000 0.000 0.111
zinc 0.000 0.000 0.400
ALL 0.869 0.877 0.868