2016-05-07 9 views
1

私はここR. にJ48の決定木で電車やテストを使用したいが、私のコードです:J48の木 - 電車やテストの分類

library("RWeka") 

data <- read.csv("try.csv") 
resultJ48 <- J48(classificationTry~., data) 

summary(resultJ48) 

が、私は70%に私のデータを分割したいです列車と30%のテスト、どのように私はそれを行うためにJ48のalgoを使用できますか?

多くの感謝!

+0

交換せずにデータのサンプリングについて(参照 'sample'?)どのよう –

答えて

1

caToolsパッケージのsample.split()機能を使用することができます願っています。それは(私の記憶が正しければメタパッケージです)caretパッケージよりもleightweightです:

library(caTools) 

library(RWeka) 

data <- read.csv("try.csv") 
spl = sample.split(data$someAttribute, SplitRatio = 0.7) 

dataTrain = subset(data, spl==TRUE) 
dataTest = subset(data, spl==FALSE) 

resultJ48 <- J48(as.factor(classAttribute)~., dataTrain) 
dataTest.pred <- predict(resultJ48, newdata = dataTest) 
table(dataTest$classAttribute, dataTest.pred) 
+0

dataTest.predの意味は何ですか?すべての情報をまとめてdataTestに作成し、結果を保存しますか? – moshem

+0

また、私はこのように結果の要約をどのように見ることができますか? – moshem

+0

使用 '要約(resultJ48)'「WEKA固有の」出力を得るために「正確に分類インスタンスを....」--- dataTest.predは、あなたの訓練された分類器の出力を保持している30%の学習データに適用されます。あなたのテストデータにJ48の出力を使用したいと思っていました。だから、私は自然に思えるものを書きました。あなたが実際にしたかったことは、あなたの質問に非常に一般的なものを書いただけなので、推測することはできません。 'table()'はtestdataと予測されるtestdata属性値を比較するだけです。簡単な混乱マトリックス。 – knb

1

それはR.ではなく、Javaではない...しかし、あなたはそれでロジックを理解します。

int trainSize = (int) Math.round(trainingSet.numInstances() * 0.7); //70% split 
int testSize = trainingSet.numInstances() - trainSize; 
Instances train = new Instances(trainingSet, 0, trainSize); 
Instances test = new Instances(trainingSet, trainSize, testSize) 

同じロジックで実装してください。それは:)

関連する問題