2

2つの異なる分類方法、つまり、それぞれライブラリパーティのctreeとC5.0とc50を比較したいのですが、比較は、最初の開始点に対する感度をテストすることです。間違った分類項目の数が計算されてベクトルに格納されるたびに、テストを30回実行する必要があります。次に、t検定を使用して、それらが本当に異なるかどうかを確認したいと思います。

library("foreign"); # for read.arff
library("party") # for ctree 
library("C50") # for C5.0 

trainTestSplit <- function(data, trainPercentage){
    newData <- list();
    all <- nrow(data);
    splitPoint <- floor(all * trainPercentage);
    newData$train <- data[1:splitPoint, ];
    newData$test <- data[splitPoint:all, ];
    return (newData);

}

ctreeErrorCount <- function(st,ss){
    set.seed(ss);
    model <- ctree(Class ~ ., data=st$train);
    class <- st$test$Class;
    st$test$Class <- NULL;
    pre = predict(model, newdata=st$test, type="response");
    errors <- length(which(class != pre)); # counting number of miss classified items
    return(errors);
}
C50ErrorCount <- function(st,ss){
    model <- C5.0(Class ~ ., data=st$train, seed=ss);
    class <- st$test$Class;
    pre = predict(model, newdata=st$test, type="class");
    errors <- length(which(class != pre)); # counting number of miss classified items
    return(errors);
}

compare <- function(n = 30){
    data <- read.arff(file.choose());

    set.seed(100);
    errors = list(ctree = c(), c50 = c());
    seeds <- floor(abs(rnorm(n) * 10000));
    for(i in 1:n){
        splitData <- trainTestSplit(data, 0.66);
        errors$ctree[i] <- ctreeErrorCount(splitData, seeds[i]);
        errors$c50[i] <- C50ErrorCount(splitData, seeds[i]);
    }

    cat("\n\n");
    cat("============= ctree Vs C5.0 =================\n");
    cat(paste(errors$ctree, "            ", errors$c50, "\n"))
    tt <- t.test(errors$ctree, errors$c50);
    print(tt);

}

示されているプログラムはおそらく比較の仕事をしていますが、エラーの数がベクトルで変化しないため、t.test関数はエラーを生成します。R内のアイリス(ただしクラスをクラスに変更)とウィンチェスター乳がんデータを使用しました。ここからダウンロードしてテストできますが、クラス属性があればどのデータでも使用できます。

しかし、理論的には、ドキュメントに記載されているように、ランダムシードを変更している間、両方のメソッドの結果が一定のままで変更されないという問題が発生します。両方の関数はランダムシードを使用し、ctreeはset.seed(x)C5.0を使用します。シードを設定するためのシードと呼ばれる引数、残念ながら効果が見つかりません。

これらの関数のイニシャルを制御する方法を教えてください

4

1 に答える 1

3

ctreesは、入力変数のランダムな選択を使用するように構成した場合(つまり、ctree_control内でmtry> 0)の場合にのみランダムシードに依存します。http://cran.r-project.org/web/packages/party/party.pdf(p。11 )を参照してください。

C5.0ツリーに関しては、シードは次のように使用されます。

  ctrl = C5.0Control(sample=0.5, seed=ss);
  model <- C5.0(Class ~ ., data=st$train, control = ctrl);

シードは、アルゴリズム自体ではなく、データのサンプルを選択するために使用されることに注意してください。http://cran.r-project.org/web/packages/C50/C50.pdf(p。5 )を参照してください。

于 2014-03-14T10:24:49.463 に答える