mlr-org / mlr3misc

Miscellaneous helper functions for mlr3
https://mlr3misc.mlr-org.com
GNU Lesser General Public License v3.0
11 stars 2 forks source link

insert_named doesn't work as expected for regr.glmnet #55

Closed salauer closed 3 years ago

salauer commented 3 years ago

According to book chapter 2.3, we can use mlr3::insert_named() to set specific arguments without resetting existing arguments. However, when I tried to use it for a learner of class "regr.glmnet" the function didn't appear to work at all:

library(mlr3)
library(mlr3learners)
library(mlr3misc)

learner <- mlr_learners$get("regr.glmnet")
learner$param_set

<ParamSet>
                  id    class lower upper                     levels        default parents    value
 1:        alignment ParamFct    NA    NA            lambda,fraction         lambda                 
 2:            alpha ParamDbl     0     1                                         1                 
 3:              big ParamDbl  -Inf   Inf                                   9.9e+35                 
 4:           devmax ParamDbl     0     1                                     0.999                 
 5:            dfmax ParamInt     0   Inf                            <NoDefault[3]>                 
 6:              eps ParamDbl     0     1                                     1e-06                 
 7:            epsnr ParamDbl     0     1                                     1e-08                 
 8:            exact ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
 9:          exclude ParamInt     1   Inf                            <NoDefault[3]>                 
10:             exmx ParamDbl  -Inf   Inf                                       250                 
11:           family ParamFct    NA    NA           gaussian,poisson       gaussian         gaussian
12:             fdev ParamDbl     0     1                                     1e-05                 
13:            gamma ParamDbl  -Inf   Inf                                         1   relax         
14:          grouped ParamLgl    NA    NA                 TRUE,FALSE           TRUE                 
15:        intercept ParamLgl    NA    NA                 TRUE,FALSE           TRUE                 
16:             keep ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
17:           lambda ParamUty    NA    NA                            <NoDefault[3]>                 
18: lambda.min.ratio ParamDbl     0     1                            <NoDefault[3]>                 
19:     lower.limits ParamUty    NA    NA                            <NoDefault[3]>                 
20:            maxit ParamInt     1   Inf                                    100000                 
21:            mnlam ParamInt     1   Inf                                         5                 
22:             mxit ParamInt     1   Inf                                       100                 
23:           mxitnr ParamInt     1   Inf                                        25                 
24:        newoffset ParamUty    NA    NA                            <NoDefault[3]>                 
25:          nlambda ParamInt     1   Inf                                       100                 
26:           offset ParamUty    NA    NA                                                           
27:         parallel ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
28:   penalty.factor ParamUty    NA    NA                            <NoDefault[3]>                 
29:             pmax ParamInt     0   Inf                            <NoDefault[3]>                 
30:             pmin ParamDbl     0     1                                     1e-09                 
31:             prec ParamDbl  -Inf   Inf                                     1e-10                 
32:    predict.gamma ParamDbl  -Inf   Inf                                         1                 
33:            relax ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
34:                s ParamDbl     0   Inf                                      0.01                 
35:      standardize ParamLgl    NA    NA                 TRUE,FALSE           TRUE                 
36:           thresh ParamDbl     0   Inf                                     1e-07                 
37:         trace.it ParamInt     0     1                                         0                 
38:    type.gaussian ParamFct    NA    NA           covariance,naive <NoDefault[3]>  family         
39:    type.logistic ParamFct    NA    NA     Newton,modified.Newton <NoDefault[3]>                 
40:     type.measure ParamFct    NA    NA deviance,class,auc,mse,mae       deviance                 
41: type.multinomial ParamFct    NA    NA          ungrouped,grouped <NoDefault[3]>                 
42:     upper.limits ParamUty    NA    NA                            <NoDefault[3]>                 
                  id    class lower upper                     levels        default parents    value

## insert new params
insert_named(learner$param_set$values,
             list(family="poisson",
                  lambda=0))
learner$param_set

<ParamSet>
                  id    class lower upper                     levels        default parents    value
 1:        alignment ParamFct    NA    NA            lambda,fraction         lambda                 
 2:            alpha ParamDbl     0     1                                         1                 
 3:              big ParamDbl  -Inf   Inf                                   9.9e+35                 
 4:           devmax ParamDbl     0     1                                     0.999                 
 5:            dfmax ParamInt     0   Inf                            <NoDefault[3]>                 
 6:              eps ParamDbl     0     1                                     1e-06                 
 7:            epsnr ParamDbl     0     1                                     1e-08                 
 8:            exact ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
 9:          exclude ParamInt     1   Inf                            <NoDefault[3]>                 
10:             exmx ParamDbl  -Inf   Inf                                       250                 
11:           family ParamFct    NA    NA           gaussian,poisson       gaussian         gaussian
12:             fdev ParamDbl     0     1                                     1e-05                 
13:            gamma ParamDbl  -Inf   Inf                                         1   relax         
14:          grouped ParamLgl    NA    NA                 TRUE,FALSE           TRUE                 
15:        intercept ParamLgl    NA    NA                 TRUE,FALSE           TRUE                 
16:             keep ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
17:           lambda ParamUty    NA    NA                            <NoDefault[3]>                 
18: lambda.min.ratio ParamDbl     0     1                            <NoDefault[3]>                 
19:     lower.limits ParamUty    NA    NA                            <NoDefault[3]>                 
20:            maxit ParamInt     1   Inf                                    100000                 
21:            mnlam ParamInt     1   Inf                                         5                 
22:             mxit ParamInt     1   Inf                                       100                 
23:           mxitnr ParamInt     1   Inf                                        25                 
24:        newoffset ParamUty    NA    NA                            <NoDefault[3]>                 
25:          nlambda ParamInt     1   Inf                                       100                 
26:           offset ParamUty    NA    NA                                                           
27:         parallel ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
28:   penalty.factor ParamUty    NA    NA                            <NoDefault[3]>                 
29:             pmax ParamInt     0   Inf                            <NoDefault[3]>                 
30:             pmin ParamDbl     0     1                                     1e-09                 
31:             prec ParamDbl  -Inf   Inf                                     1e-10                 
32:    predict.gamma ParamDbl  -Inf   Inf                                         1                 
33:            relax ParamLgl    NA    NA                 TRUE,FALSE          FALSE                 
34:                s ParamDbl     0   Inf                                      0.01                 
35:      standardize ParamLgl    NA    NA                 TRUE,FALSE           TRUE                 
36:           thresh ParamDbl     0   Inf                                     1e-07                 
37:         trace.it ParamInt     0     1                                         0                 
38:    type.gaussian ParamFct    NA    NA           covariance,naive <NoDefault[3]>  family         
39:    type.logistic ParamFct    NA    NA     Newton,modified.Newton <NoDefault[3]>                 
40:     type.measure ParamFct    NA    NA deviance,class,auc,mse,mae       deviance                 
41: type.multinomial ParamFct    NA    NA          ungrouped,grouped <NoDefault[3]>                 
42:     upper.limits ParamUty    NA    NA                            <NoDefault[3]>                 
                  id    class lower upper                     levels        default parents    value

However it does appear to work when I overwrite it directly:

learner$param_set$values <- list(family="poisson",
                                 lambda=0)
learner$param_set

<ParamSet>
                  id    class lower upper                     levels        default parents   value
 1:        alignment ParamFct    NA    NA            lambda,fraction         lambda                
 2:            alpha ParamDbl     0     1                                         1                
 3:              big ParamDbl  -Inf   Inf                                   9.9e+35                
 4:           devmax ParamDbl     0     1                                     0.999                
 5:            dfmax ParamInt     0   Inf                            <NoDefault[3]>                
 6:              eps ParamDbl     0     1                                     1e-06                
 7:            epsnr ParamDbl     0     1                                     1e-08                
 8:            exact ParamLgl    NA    NA                 TRUE,FALSE          FALSE                
 9:          exclude ParamInt     1   Inf                            <NoDefault[3]>                
10:             exmx ParamDbl  -Inf   Inf                                       250                
11:           family ParamFct    NA    NA           gaussian,poisson       gaussian         poisson
12:             fdev ParamDbl     0     1                                     1e-05                
13:            gamma ParamDbl  -Inf   Inf                                         1   relax        
14:          grouped ParamLgl    NA    NA                 TRUE,FALSE           TRUE                
15:        intercept ParamLgl    NA    NA                 TRUE,FALSE           TRUE                
16:             keep ParamLgl    NA    NA                 TRUE,FALSE          FALSE                
17:           lambda ParamUty    NA    NA                            <NoDefault[3]>               0
18: lambda.min.ratio ParamDbl     0     1                            <NoDefault[3]>                
19:     lower.limits ParamUty    NA    NA                            <NoDefault[3]>                
20:            maxit ParamInt     1   Inf                                    100000                
21:            mnlam ParamInt     1   Inf                                         5                
22:             mxit ParamInt     1   Inf                                       100                
23:           mxitnr ParamInt     1   Inf                                        25                
24:        newoffset ParamUty    NA    NA                            <NoDefault[3]>                
25:          nlambda ParamInt     1   Inf                                       100                
26:           offset ParamUty    NA    NA                                                          
27:         parallel ParamLgl    NA    NA                 TRUE,FALSE          FALSE                
28:   penalty.factor ParamUty    NA    NA                            <NoDefault[3]>                
29:             pmax ParamInt     0   Inf                            <NoDefault[3]>                
30:             pmin ParamDbl     0     1                                     1e-09                
31:             prec ParamDbl  -Inf   Inf                                     1e-10                
32:    predict.gamma ParamDbl  -Inf   Inf                                         1                
33:            relax ParamLgl    NA    NA                 TRUE,FALSE          FALSE                
34:                s ParamDbl     0   Inf                                      0.01                
35:      standardize ParamLgl    NA    NA                 TRUE,FALSE           TRUE                
36:           thresh ParamDbl     0   Inf                                     1e-07                
37:         trace.it ParamInt     0     1                                         0                
38:    type.gaussian ParamFct    NA    NA           covariance,naive <NoDefault[3]>  family        
39:    type.logistic ParamFct    NA    NA     Newton,modified.Newton <NoDefault[3]>                
40:     type.measure ParamFct    NA    NA deviance,class,auc,mse,mae       deviance                
41: type.multinomial ParamFct    NA    NA          ungrouped,grouped <NoDefault[3]>                
42:     upper.limits ParamUty    NA    NA                            <NoDefault[3]>                
                  id    class lower upper                     levels        default parents   value

I'm running R 4.0.2, mlr3 0.9.0, mlr3learners 0.4.3, mlr3misc 0.6.0.

salauer commented 3 years ago

I figured it out. I just had to do:

learner$param_set$values = insert_named(learner$param_set$values, list(family="poisson", lambda=0))

I hope this is the standard operating procedure!