我想比较两种不同的分类方法,即ctree和C5.0分别在库方和c50中,比较是测试它们对初始起点的敏感性。每次计算错误的分类项目的数量并将其存储在一个向量中然后使用t检验我应该进行30次测试我希望看看它们是否真的不同。
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中使用了iris(但是将类更改为Class)和Winchester breast cancer数据,可以下载here来测试它,但只要它具有Class属性就可以使用任何数据
但是我遇到的问题是,当我改变随机种子时,两种方法的结果保持不变并且没有变化,理论上,如他们的文档中所述,两个函数都使用随机种子,ctree使用{{1虽然C5.0使用一个名为seed的参数来设置种子,但不幸的是我无法找到效果。
请告诉我如何控制这些功能的首字母
答案 0 :(得分:2)
ctrees仅依赖于随机种子,在这种情况下,您将其配置为使用随机选择的输入变量(即ctree_control中的mtry&gt; 0)。见http://cran.r-project.org/web/packages/party/party.pdf(第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(第5页)