代码之家  ›  专栏  ›  技术社区  ›  Jane Sully

R Caret包中的逻辑回归调整参数网格?

  •  6
  • Jane Sully  · 技术社区  · 7 年前

    我试图使用 caret package . 我已经做了以下工作:

    model <- train(dec_var ~., data=vars, method="glm", family="binomial",
                     trControl = ctrl, tuneGrid=expand.grid(C=c(0.001, 0.01, 0.1, 1,10,100, 1000)))
    

    然而,我不确定该模型的调整参数应该是什么,我很难找到它。我假设它是C,因为C是中使用的参数 sklearn . 目前,我收到以下错误-

    错误:优化参数网格应具有columns参数

    你对如何解决这个问题有什么建议吗?

    1 回复  |  直到 7 年前
        1
  •  11
  •   jmuhlenkamp    7 年前

    根据Max Kuhn的网络手册- search for method = 'glm' here ,没有调整参数 glm 在内部 caret .

    enter image description here

    我们可以通过测试一些基本的 train 电话。首先,让我们从一个方法开始( rpart )有一个调整参数( cp )根据网络手册。

    library(caret)
    data(GermanCredit)
    
    # Check tuning parameter via `modelLookup` (matches up with the web book)
    modelLookup('rpart')
    #  model parameter                label forReg forClass probModel
    #1 rpart        cp Complexity Parameter   TRUE     TRUE      TRUE
    
    # Observe that the `cp` parameter is tuned
    set.seed(1)
    model_rpart <- train(Class ~., data=GermanCredit, method='rpart')
    model_rpart
    #CART 
    
    #1000 samples
    #  61 predictor
    #   2 classes: 'Bad', 'Good' 
    
    #No pre-processing
    #Resampling: Bootstrapped (25 reps) 
    #Summary of sample sizes: 1000, 1000, 1000, 1000, 1000, 1000, ... 
    #Resampling results across tuning parameters:
    
    #  cp          Accuracy   Kappa    
    #  0.01555556  0.7091276  0.2398993
    #  0.03000000  0.7025574  0.1950021
    #  0.04444444  0.6991700  0.1316720
    
    #Accuracy was used to select the optimal model using  the largest value.
    #The final value used for the model was cp = 0.01555556.
    

    我们看到 内容提供商 参数已调整。现在让我们试试 glm公司 .

    # Check tuning parameter via `modelLookup` (shows a parameter called 'parameter')
    modelLookup('glm')
    #  model parameter     label forReg forClass probModel
    #1   glm parameter parameter   TRUE     TRUE      TRUE
    
    # Try out the train function to see if 'parameter' gets tuned
    set.seed(1)
    model_glm <- train(Class ~., data=GermanCredit, method='glm')
    model_glm
    #Generalized Linear Model 
    
    #1000 samples
    #  61 predictor
    #   2 classes: 'Bad', 'Good' 
    
    #No pre-processing
    #Resampling: Bootstrapped (25 reps) 
    #Summary of sample sizes: 1000, 1000, 1000, 1000, 1000, 1000, ... 
    #Resampling results:
    
    #  Accuracy   Kappa    
    #  0.7386384  0.3478527
    

    在这种情况下 glm公司 上面没有执行参数调整。根据我的经验,似乎 parameter 已命名 参数 只是一个占位符,而不是真正的调整参数。正如下面的代码所示,即使我们试图强制它进行调优 参数 它基本上只做一个值。

    set.seed(1)
    model_glm2 <- train(Class ~., data=GermanCredit, method='glm',
                        tuneGrid=expand.grid(parameter=c(0.001, 0.01, 0.1, 1,10,100, 1000)))
    model_glm2
    #Generalized Linear Model 
    
    #1000 samples
    #  61 predictor
    #   2 classes: 'Bad', 'Good' 
    
    #No pre-processing
    #Resampling: Bootstrapped (25 reps) 
    #Summary of sample sizes: 1000, 1000, 1000, 1000, 1000, 1000, ... 
    #Resampling results across tuning parameters:
    
    #  Accuracy   Kappa      parameter
    #  0.7386384  0.3478527  0.001    
    #  0.7386384  0.3478527  0.001    
    #  0.7386384  0.3478527  0.001    
    #  0.7386384  0.3478527  0.001    
    #  0.7386384  0.3478527  0.001    
    #  0.7386384  0.3478527  0.001    
    #  0.7386384  0.3478527  0.001    
    
    #Accuracy was used to select the optimal model using  the largest value.
    #The final value used for the model was parameter = 0.001.