与手动参数设置相比,R插入符号序列()在J48上表现不佳

与手动参数设置相比,R插入符号序列()在J48上表现不佳,r,decision-tree,r-caret,rweka,c4.5,R,Decision Tree,R Caret,Rweka,C4.5,我需要使用RWeka的实现(J48())在我的客户数据集上优化C4.5算法的准确性。因此,我使用插入符号包的train()功能来帮助我确定最佳参数设置(对于M和C)。 我试图用train()确定的参数手动运行J48()来验证结果。结果令人惊讶,因为手动运行的结果要好得多 这就提出了以下问题: 手动执行J48()时,哪些参数可能不同 如何使train()功能提供与手动参数设置类似或更好的结果 还是我完全错过了什么 我正在运行以下代码: 使用包装插入符号中的train()确定J48的最佳C4.

我需要使用RWeka的实现(
J48()
)在我的客户数据集上优化C4.5算法的准确性。因此,我使用插入符号包的
train()
功能来帮助我确定最佳参数设置(对于M和C)。 我试图用
train()
确定的参数手动运行
J48()
来验证结果。结果令人惊讶,因为手动运行的结果要好得多

这就提出了以下问题:
  • 手动执行
    J48()
    时,哪些参数可能不同
  • 如何使
    train()
    功能提供与手动参数设置类似或更好的结果
  • 还是我完全错过了什么

我正在运行以下代码: 使用包装插入符号中的train()确定J48的最佳C4.5型号:

ctrl <- trainControl(method="LGOCV", p=0.8, seeds=NA)
grid <- expand.grid(.M=25*(1:15), .C=c(0.1,0.05,0.025,0.01,0.0075,0.005))
大约有50个组合,精确到0.6055,范围从最终模型的给定值到(M=325,C=0.1)(中间有一个例外)

使用J48手动尝试参数值:

# splitting into training and test datasets, deriving from full dataset "response_nochar"
# similar/equal to the above splitting with LGOCV and p=0.8?
response_sample <- sample(10000, 8000)
response_train <- response_nochar[response_sample,]
response_test <- response_nochar[-response_sample,]
# setting parameters
jctrl <- Weka_control(M=25,C=0.005)


PS:我使用的数据集包含10000条记录,目标变量的分布为50:50。

听起来这应该是在数据科学论坛上发布的。我会在交叉验证上发布,谢谢提示。听起来这应该是在数据科学论坛上发布的。我会在交叉验证上发布,谢谢提示。
rtrain <- train(churn~.,data=response_nochar,method="J48",na.action=na.pass,trControl=ctrl,tuneGrid=grid)
# Accuracy was used to select the optimal model using  the largest value.
# The final values used for the model were C = 0.005 and M = 25.
# splitting into training and test datasets, deriving from full dataset "response_nochar"
# similar/equal to the above splitting with LGOCV and p=0.8?
response_sample <- sample(10000, 8000)
response_train <- response_nochar[response_sample,]
response_test <- response_nochar[-response_sample,]
# setting parameters
jctrl <- Weka_control(M=25,C=0.005)
c45 <- J48(churn~.,data=response_train,na.action=na.pass,control=jctrl)
pred_c45 <- predict(c45, newdata=response_test, na.action=na.pass)
CrossTable(response_test$churn, pred_c45, prop.chisq= FALSE, prop.c= FALSE, prop.r= FALSE, dnn= c('actual churn','predicted churn'))