Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入符号-使用train()、predict()和resamples()的不同结果_R_Machine Learning_R Caret_Predict - Fatal编程技术网

插入符号-使用train()、predict()和resamples()的不同结果

插入符号-使用train()、predict()和resamples()的不同结果,r,machine-learning,r-caret,predict,R,Machine Learning,R Caret,Predict,我使用插入符号包分析各种模型,并使用以下方法评估结果: print()[打印训练结果()] predict(),以及 重采样() 为什么以下示例中的这些结果不同 我对敏感性(真正的积极因素)感兴趣。 为什么J48_-fit的敏感度又是0.71、0.81、0.71 当我运行其他模型时也会发生同样的情况-灵敏度会根据评估而变化 注意:为了说明resamples()函数,我在这里包括了两个模型,它必须以两个模型作为输入,但我的主要问题是,根据使用的方法,结果之间的差异 换句话说,train()(C

我使用插入符号包分析各种模型,并使用以下方法评估结果:

  • print()[打印训练结果()]
  • predict(),以及
  • 重采样()
为什么以下示例中的这些结果不同

我对敏感性(真正的积极因素)感兴趣。 为什么J48_-fit的敏感度又是0.71、0.81、0.71

当我运行其他模型时也会发生同样的情况-灵敏度会根据评估而变化

注意:为了说明resamples()函数,我在这里包括了两个模型,它必须以两个模型作为输入,但我的主要问题是,根据使用的方法,结果之间的差异

换句话说,train()(C5.0_fit/J48_fit)、predict()和resamples()的结果有什么区别? “幕后”发生了什么?我应该相信哪个结果

例如:

library(C50)
data(churn)

Seed <- 10

# Set train options
set.seed(Seed)
Train_options <- trainControl(method = "cv", number = 10,
                              classProbs = TRUE,
                              summaryFunction = twoClassSummary)

# C5.0 model:
set.seed(Seed)
C5.0_fit <- train(churn~., data=churnTrain, method="C5.0", metric="ROC",
                 trControl=Train_options)

# J48 model:
set.seed(Seed)
J48_fit <- train(churn~., data=churnTrain, method="J48", metric="ROC",
                 trControl=Train_options)
# Get results by printing the outcome
print(J48_fit)

#                      ROC Sens Spec
# Best (sensitivity): 0.87 0.71 0.98  

# Get results using predict()
set.seed(Seed)
J48_fit_predict <- predict(J48_fit, churnTrain)
confusionMatrix(J48_fit_predict, churnTrain$churn)
#             Reference
# Prediction  yes   no
#       yes  389    14
#       no    94  2836
# Sens : 0.81          
# Spec : 0.99

# Get results by comparing algorithms with resamples()
set.seed(Seed)
results <- resamples(list(C5.0_fit=C5.0_fit, J48_fit=J48_fit))
summary(results)
# ROC         mean
# C5.0_fit    0.92  
# J48_fit     0.87
# Sens        mean
# C5.0_fit    0.76  
# J48_fit     0.71
# Spec        mean
# C5.0_fit    0.99  
# J48_fit     0.98
库(C50)
数据(客户流失)

种子您打印的最佳灵敏度是10倍(来自您的简历)中每一倍的模型性能平均值。您可以使用
J48\u fit$resample
查看每个折叠的性能。然后,为了确认,您可以使用
平均值(J48_fit$resample[,1])
取第一列的平均值ROC,得到0.865799

当您在完整数据集上使用
predict()
时,您将得到不同的结果,因为数据与重采样中使用的数据不同-您将获得整个数据的模型性能,而不是每次10%的性能

Get_results <- function(...){

  Args <- list(...)
  Model_names <- as.list(sapply(substitute({...})[-1], deparse))

  message("Model names:")
  print(Model_names)

  # Function for getting max sensitivity
  Max_sens <- function(df, colname = "results"){
    df <- df[[colname]]
    new_df <- df[which.max(df$Sens), ]
    x <- sapply(new_df, is.numeric)
    new_df[, x] <- round(new_df[, x], 2)
    new_df
  }

  # Find max Sens for each model
  message("Max sensitivity from model printout:")
  Max_sens_out <- lapply(Args, Max_sens)
  names(Max_sens_out) <- Model_names
  print(Max_sens_out)

  # Find predict() result for each model
  message("Results using predict():")
  set.seed(Seed)
  Predict_out <- lapply(Args, function(x) predict(x, churnTrain))
  Predict_results <- lapply(Predict_out, function(x) confusionMatrix(x, churnTrain$churn))
  names(Predict_results) <- Model_names
  print(Predict_results)

  # Find resamples() results for each model

  message("Results using resamples():")
  set.seed(Seed)
  results <- resamples(list(...),modelNames = Model_names)
  # names(results) <- Model_names
  summary(results)

}

# Test
Get_results(C5.0_fit, J48_fit)