2016-10-25 13 views
2

私は現在、Rの問題に取り組んでいます。データセットに分類ツリーを適用したいのですが、Wekaを使用して同じ問題を既に解決しているので、結果は間違っているようです。私は別の結果を得た。デシジョンツリー解析の問題

私は次のようにcsvファイルに含まれるデータセットを得た:

age,menopause,tumor.size,inv.nodes,node.caps,deg.malig,breast,breast.quad,irradiat,class 
40-49,premeno,15-19,0-2,yes,3,right,left_up,no,recurrence-events 
50-59,ge40,15-19,0-2,no,1,right,central,no,no-recurrence-events 
50-59,ge40,35-39,0-2,no,2,left,left_low,no,recurrence-events 
40-49,premeno,35-39,0-2,yes,3,right,left_low,yes,no-recurrence-events 
40-49,premeno,30-34,3-5,yes,2,left,right_up,no,recurrence-events 

を、これはスクリプトです:

#Open r file 
cancer = read.csv("cancer.csv") 
#Data Exploration 
summary(cancer) 
str(cancer) 
#Divide into test and train sets 
set.seed(1234) 
ind <- sample(2, nrow(cancer), replace=TRUE, prob=c(0.7, 0.3)) 
trainData <- cancer[ind==1,] 
testData <- cancer[ind==2,] 
#Build the model 
library(party) 
cancermodel <- class ~ age + menopause + tumor.size + inv.nodes + node.caps + deg.malig + breast + breast.quad + irradiat 
cancertree <- ctree(cancermodel,trainData) 
table(predict(cancertree),trainData$class) 
#Draw tree 
plot(cancertree, type="simple") 
#Testset 
testPred <- predict(cancertree, newdata = testData) 
table(testPred, testData$class) 
+3

なぜ彼らは同じである必要がありますか? – rawr

+0

私は両方の場合(決定木) – Zak

+0

とランダムにサンプリングされた訓練とテストデータに適用されたのと同じアルゴリズムなので、同じである必要がありますか? – rawr

答えて

1

あなたはR内ここにコード内のランダムなサンプルを選択しました:< - サンプル(2、nrow(癌)、replace = TRUE、prob = c(0.7、0.3))

どのようにWekaで同じランダムサンプルを複製して使用しましたか?木々は非常に非腐食性のモデルであり、異なるデータファイルによって素早く変化する可能性があります。

2

R(ツリー、rpart、パーティ)とWeka(J48、LMT、DecisionStump)のディシジョンツリーにはさまざまなアルゴリズム実装があり、異なるアルゴリズムは同じデータセットで異なるディシジョンツリーを生成する可能性がありますゲイン/ジニー指数、カイ二乗統計を用いた仮説検定を用いたもの)。

どのようなアルゴリズムであっても、異なる入力パラメータ(切り取られたノードまたは切り出されていないノードの中の最小のデータポイントなど)を持つ異なる決定木が生成されます。

また、@RomRomによって指摘されているように、意思決定ツリーは非常に堅牢なモデルではありません。つまり、トレーニングデータのわずかな変更によって、異なるツリーが完全に出力される可能性があります。

これらをすべて念頭に置いて、RとWekaで同じデシジョンツリーを作成することは難しく、可能であれば、モデルパラメータを非常に慎重に調整しなければならず、多くの実験が必要になります。

以下は、いくつかのR決定木モデルおよびRWeka決定木モデルを有する虹彩データセットの例である(プロットされた樹木から見ると、異なるモデルは同じ訓練データセット虹彩で異なるツリーを生成する)。

library(RWeka) 
m1 <- J48(Species ~ ., data = iris) 
if(require("partykit", quietly = TRUE)) plot(m1) 

enter image description here

library(rpart) 
m2 <- rpart(Species ~ ., data = iris) 
library(rpart.plot) 
prp(m2) 

enter image description here

library(party) 
m3 <- ctree(Species ~ ., data = iris) 
plot(m3) 

enter image description here