読者です 読者をやめる 読者になる 読者になる

MARSによる分類

 RでMARS (Multivariate Adaptive Regression Splines) を実行するには、earthパッケージのearth関数を使います。なお、今回は、kernlabパッケージのspamを用いて、スパムメールの分類実験を行います。

# 分析データの読み込み
library(kernlab)
data(spam)
# データの分割
tr.index <- sample(nrow(spam), as.integer(nrow(spam) * 0.5))
spam.train <- spam[tr.index, ]
spam.test <- spam[-tr.index, ]
# MARSの実行
library(earth)
spam.earth <- earth(type ~ ., data = spam.train)
# 結果の確認
summary(spam.earth)

 上記のスクリプトを実行すると、以下のような結果が得られます。*1

Call: earth(formula=type~., data=spam.train)

                           coefficients
(Intercept)                  0.88230494
h(address-0.69)             -0.01685897
h(0.69-address)             -0.08534780
h(our-0.51)                 -0.08343596
h(2.89-our)                 -0.15361380
h(remove-0.15)               0.09305013
h(0.15-remove)              -0.90516159
h(internet-1.26)             0.12267828
h(1.26-internet)            -0.08626596
h(4.34-will)                 0.03679776
h(2.94-free)                -0.08746670
h(0.93-you)                 -0.05131778
h(credit-1.68)               0.09220937
h(1.68-credit)               0.07248092
h(your-5.19)                -0.15442214
h(5.19-your)                -0.04456107
h(1.29-font)                -0.09847574
h(1.12-num000)              -0.08912040
h(0.17-money)               -0.54177685
h(0.49-hp)                   0.53399944
h(1.4-george)                0.12489797
h(num650-2.94)               0.09889506
h(0.76-technology)          -0.18498675
h(num1999-0.19)              0.08045744
h(0.19-num1999)              0.78368176
h(1.27-meeting)              0.11202463
h(original-0.89)            -0.11747044
h(0.89-original)            -0.18339902
h(0.5-project)               0.18368261
h(0.28-re)                   0.23802635
h(0.4-edu)                   0.48671391
h(0.74-conference)           0.19018021
h(charSemicolon-0.442)      -0.18343098
h(0.181-charSquarebracket)   0.50382147
h(charExclamation-0.224)     0.10307978
h(0.224-charExclamation)    -0.69338841
h(charExclamation-2.894)    -0.12923540
h(0.11-charDollar)          -1.43007676
h(7.82-capitalAve)          -0.03543770
h(235-capitalLong)           0.00136168
h(capitalTotal-225)          0.00003656
h(225-capitalTotal)         -0.00096670

Selected 42 of 63 terms, and 30 of 57 predictors 
Importance: charExclamation, charDollar, remove, hp, capitalTotal, free, ...
Number of terms at each degree of interaction: 1 41 (additive model)
GCV 0.06551323    RSS 140.0015    GRSq 0.7252963    RSq 0.744543

 また、回帰診断グラフを表示するには、plot関数を使います。

# 回帰診断グラフ
plot(spam.earth)

 上記のスクリプトを実行すると、以下のような図が得られます。

f:id:langstat:20141104201501p:plain

 そして、混同行列と分類精度を確認するには、以下のようにします。

# 混同行列
(tab <- table(spam.predict, spam.test$type))
# 分類精度
sum(diag(tab)) / sum(tab)

 上記のスクリプトを実行すると、以下のような結果が得られます。それを見ると、MARSによるスパム分類の精度は、93.18%であることが分かります。

spam.predict nonspam spam
     nonspam    1337  105
     spam         52  807

[1] 0.9317688

*1:上記のsample関数のところでset.seed関数を使っていないため、実行するたびに微妙に異なる結果が得られる可能性があります。

広告を非表示にする