gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:05:06 26 4
gpt4 key购买 nike

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

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(但将类更改为类)和 Winchester breast cancer可以下载的数据 here测试它,但任何数据都可以使用,只要它具有 Class 属性

但是我遇到了一个问题,即当我更改随机种子时,两种方法的结果保持不变而不发生变化,理论上,如他们的文档中所述,两个函数都使用随机种子,ctree 使用 set.seed(x)而C5.0使用了一个叫做seed的参数来设置seed,可惜我找不到效果。

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

最佳答案

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

对于 C5.0-trees,种子是这样使用的:

  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 页)

关于r - 设置随机种子不影响分类方法 C5.0 和 ctree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com