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 |