首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置随机种子不会影响分类方法C5.0和ctree

设置随机种子不会影响分类方法C5.0和ctree
EN

Stack Overflow用户
提问于 2013-03-25 21:54:29
回答 1查看 936关注 0票数 2

我想在两种不同的分类方法之间进行比较,即分别在库start和c50中的ctree和C5.0,比较是为了测试它们对初始起点的敏感性。测试应该进行30次,每次计算错误分类项目的数量并将其存储在一个向量中,然后使用t-test来查看它们是否真的不同。

代码语言:javascript
复制
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中使用了虹膜(但将类改为类)和可以从here下载的Winchester breast cancer数据来测试它,但是任何数据都可以使用,只要它有类属性

但我遇到的问题是,当我改变随机种子时,两种方法的结果都保持不变,并且没有变化,理论上,正如他们的文档中所描述的,这两个函数都使用随机种子,ctree使用set.seed(x),而C5.0使用一个称为种子的参数来设置种子,不幸的是我找不到效果。

你能告诉我如何控制这些函数的首字母吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-14 18:24:49

在您将其配置为使用随机选择的输入变量(即ctree_control中的mtry >0)的情况下,ctree确实只依赖于随机种子。参见http://cran.r-project.org/web/packages/party/party.pdf (第11页)

对于c5.0树,种子是这样使用的:

代码语言:javascript
复制
  ctrl = C5.0Control(sample=0.5, seed=ss);
  model <- C5.0(Class ~ ., data=st$train, control = ctrl);

请注意,种子用于选择数据样本,而不是在algoritm本身内。参见http://cran.r-project.org/web/packages/C50/C50.pdf (第5页)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15616718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档