[R] Ranger could not work with caret

Neha gupta neh@@bo|ogn@90 @end|ng |rom gm@||@com
Sat Jul 2 23:58:35 CEST 2022


@Rui Barradas <ruipbarradas using sapo.pt>

I tried the code according to your comments and it works. However, when I
try it for another dataset with a different number of input features, it
again shows the same error message. I tried it with different types of
datasets and the same error appeared.

Best regards

On Fri, Jul 1, 2022 at 9:18 PM Neha gupta <neha.bologna90 using gmail.com> wrote:

> @Rui Barradas <ruipbarradas using sapo.pt>
>
> Thank you again for the useful explanation.
>
> Best regards
>
> On Fri, Jul 1, 2022 at 8:26 PM Rui Barradas <ruipbarradas using sapo.pt> wrote:
>
>> Hello,
>>
>> The error doesn't arise in randomForest because rf has a function tuneRF
>> that looks for the best mtry (best relative to OOB error estimate). And
>> it's this value that it uses.
>>
>> The question's code gives Ranger errors but it also gives R warnings:
>>
>> Warning messages:
>> 1: model fit failed for Fold01: mtry=48, min.node.size=5,
>> splitrule=variance Error in ranger::ranger(dependent.variable.name =
>> ".outcome", data = x,  :
>>    User interrupt or internal error.
>>
>>
>> As you can see, mtry=48 is the double of ncol(tr) when should *never* be
>> greater than the number of variables in the data set. Why it is using
>> this value, I don't know. Function bug? Ask the package maintainer?
>>
>> And, by the way, package caret does or can do a grid search for optimal
>> parameter values. If that is giving errors and you are calling rf
>> directly why bother whith caret's error? Use the original function. Here
>> is an example with tuneRF. Setting argument doBest to TRUE you'll have
>> both the optimal value for mtry and the fitted random forest. 2 in 1.
>>
>>
>> library(randomForest)
>> #  randomForest 4.7-1.1
>> #  Type rfNews() to see new features/changes/bug fixes.
>>
>> c2 <- tuneRF(
>>    x = tr[-ncol(tr)],
>>    y = tr$act_effort,
>>    mtryStart = ncol(tr)/2,
>>    doBest = TRUE
>> )
>> #  mtry = 12  OOB error = 139920.7
>> #  Searching left ...
>> #  mtry = 6     OOB error = 170909.3
>> #  -0.2214729 0.05
>> #  Searching right ...
>> #  mtry = 23    OOB error = 128566.7
>> #  0.08114586 0.05
>>
>> c2
>> #
>> #  Call:
>> #   randomForest(x = x, y = y, mtry = res[which.min(res[, 2]), 1])
>> #                 Type of random forest: regression
>> #                       Number of trees: 500
>> #  No. of variables tried at each split: 23
>> #
>> #            Mean of squared residuals: 129734.8
>> #                      % Var explained: 39.98
>>
>>
>> Hope this helps,
>>
>> Rui Barradas
>>
>>
>>
>> Às 17:18 de 01/07/2022, Neha gupta escreveu:
>> > Thank you so much for your help. I hope it will work.
>> >
>> > However, why the same error doesn't arise when I am using rf. They both
>> > have the same parameters and it's default values.
>> >
>> > Best regards
>> >
>> > On Friday, July 1, 2022, Rui Barradas <ruipbarradas using sapo.pt
>> > <mailto:ruipbarradas using sapo.pt>> wrote:
>> >
>> >     Hello,
>> >
>> >     The error is in Ranger parameter mtry becoming greater than the
>> >     number of variables (columns).
>> >     mtry can be set manually in caret::train argument tuneGrid. But for
>> >     random forests you must also set the split rule and the minimum
>> node.
>> >
>> >
>> >     library(caret)
>> >     library(farff)
>> >
>> >     boot <- trainControl(method = "cv", number = 10)
>> >
>> >     # set the maximum mtry manually to ncol(tr)
>> >     # this creates a sequence of mtry values
>> >     mtry <- var_seq(ncol(tr), len = 3)  # 3 is the default value
>> >     mtry
>> >     #  [1]  2 13 24
>> >     #[1]  2 13 24
>> >
>> >     splitrule <- c("variance", "extratrees")
>> >     min.node.size <- 1:10
>> >     mtrygrid <- expand.grid(mtry, splitrule, min.node.size)
>> >     names(mtrygrid) <- c("mtry", "splitrule", "min.node.size")
>> >
>> >     c1 <- train(act_effort ~ ., data = tr,
>> >                 method = "ranger",
>> >                 tuneLength = 5,
>> >                 metric = "MAE",
>> >                 preProc = c("center", "scale", "nzv"),
>> >                 tuneGrid = mtrygrid,
>> >                 trControl = boot)
>> >     c1
>> >     #  Random Forest
>> >     #
>> >     #  30 samples
>> >     #  23 predictors
>> >     #
>> >     #  Pre-processing: centered (48), scaled (48), remove (58)
>> >     #  Resampling: Cross-Validated (10 fold)
>> >     #  Summary of sample sizes: 28, 27, 27, 28, 27, 27, ...
>> >     #  Resampling results across tuning parameters:
>> >     #
>> >     #    mtry  splitrule   min.node.size  RMSE      Rsquared   MAE
>> >     #     2    variance     1             256.6391  0.8103759  186.3609
>> >     #     2    variance     2             249.7120  0.8628109  183.6696
>> >     #     2    variance     3             258.8240  0.8284449  189.0712
>> >     #
>> >     # [...omit...]
>> >     #
>> >     #    13    extratrees  10             254.9569  0.8918014  191.2524
>> >     #    24    variance     1             177.7188  0.9458652  112.2800
>> >     #    24    variance     2             172.6826  0.9204287  108.5943
>> >     #    24    variance     3             172.9954  0.9271006  109.2554
>> >     #    24    variance     4             172.2467  0.9523067  110.0776
>> >     #    24    variance     5             175.2485  0.9283317  112.8798
>> >     #    24    variance     6             177.9285  0.9369881  115.8970
>> >     #    24    variance     7             180.5959  0.9485035  117.5816
>> >     #    24    variance     8             178.8037  0.9358033  117.8725
>> >     #    24    variance     9             176.5849  0.9210959  117.0055
>> >     #    24    variance    10             178.6439  0.9257969  119.8035
>> >     #    24    extratrees   1             219.1368  0.8801770  141.0720
>> >     #    24    extratrees   2             216.1900  0.8550002  140.9263
>> >     #    24    extratrees   3             212.4138  0.8979379  141.4282
>> >     #    24    extratrees   4             218.2631  0.9121471  146.2908
>> >     #    24    extratrees   5             212.5679  0.9279598  144.2715
>> >     #    24    extratrees   6             218.9856  0.9141754  152.2099
>> >     #    24    extratrees   7             222.8540  0.9412682  152.4614
>> >     #    24    extratrees   8             228.1156  0.9423414  161.8456
>> >     #    24    extratrees   9             226.6182  0.9408306  160.5264
>> >     #    24    extratrees  10             226.9280  0.9429413  165.6878
>> >     #
>> >     #  MAE was used to select the optimal model using the smallest
>> value.
>> >     #  The final values used for the model were mtry = 24, splitrule =
>> >     variance
>> >     #   and min.node.size = 2.
>> >     plot(c1)
>> >
>> >
>> >
>> >     Hope this helps,
>> >
>> >     Rui Barradas
>> >
>> >
>> >     Às 23:03 de 30/06/2022, Neha gupta escreveu:
>> >
>> >         Ok, the data is pasted below
>> >
>> >         But on the same data (everything the same) and with other models
>> >         like RF, SVM etc, it works fine.
>> >
>> >           > dput(head(tr, 30))
>> >         structure(list(recordnumber = c(0, 0.02, 0.04, 0.06, 0.07, 0.08,
>> >         0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.16, 0.17, 0.18, 0.23, 0.24,
>> >         0.25, 0.28, 0.29, 0.3, 0.31, 0.32, 0.33, 0.35, 0.36, 0.37, 0.38,
>> >         0.4, 0.41), projectname = structure(c(1L, 1L, 1L, 1L, 2L, 3L,
>> >         3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
>> >         4L, 4L, 4L, 4L, 4L, 4L, 5L, 6L), levels = c("de", "erb", "gal",
>> >         "X", "hst", "slp", "spl", "Y"), class = "factor"), cat2 =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L,
>> >         9L, 11L, 5L, 4L, 6L, 8L, 3L, 9L, 9L, 9L, 9L, 6L, 7L), levels =
>> >         c("Avionics",
>> >         "application_ground", "avionicsmonitoring",
>> "batchdataprocessing",
>> >         "communications", "datacapture", "launchprocessing",
>> >         "missionplanning",
>> >         "monitor_control", "operatingsystem", "realdataprocessing",
>> >         "science",
>> >         "simulation", "utility"), class = "factor"), forg =
>> structure(c(2L,
>> >         2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
>> >         2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), levels =
>> c("f",
>> >         "g"), class = "factor"), center = structure(c(2L, 2L, 2L, 2L,
>> >         2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
>> >         2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 6L), levels = c("1", "2",
>> >         "3", "4", "5", "6"), class = "factor"), year = c(0.5, 0.5, 0.5,
>> >         0.5, 0.6875, 0.5625, 0.5625, 0.8125, 0.5625, 0.875, 0.5625,
>> 0.75,
>> >         0.5625, 0.8125, 0.75, 0.9375, 0.9375, 0.9375, 0.6875, 0.6875,
>> >         0.6875, 0.6875, 0.875, 1, 0.9375, 0.9375, 0.9375, 0.9375,
>> 0.5625,
>> >         0.25), mode = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
>> >         3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
>> >         3L, 3L, 3L, 3L, 3L), levels = c("embedded", "organic",
>> >         "semidetached"
>> >         ), class = "factor"), rely = structure(c(4L, 4L, 4L, 4L, 4L,
>> >         4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 3L, 3L, 3L, 3L,
>> >         3L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 4L), levels = c("vl", "l", "n",
>> >         "h", "vh", "xh"), class = "factor"), data = structure(c(2L, 2L,
>> >         2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L,
>> >         5L, 5L, 5L, 5L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 2L), levels =
>> c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), cplx =
>> >         structure(c(4L,
>> >         4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L,
>> >         3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), time =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 6L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 3L,
>> >         3L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 3L, 3L, 3L, 5L, 3L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), stor =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 6L, 3L, 3L, 3L, 3L, 3L, 3L, 6L, 3L, 3L, 3L, 3L,
>> >         3L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 3L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), virt =
>> >         structure(c(2L,
>> >         2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 3L, 3L,
>> >         3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 2L, 2L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), turn =
>> >         structure(c(2L,
>> >         2L, 2L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L,
>> >         3L, 4L, 4L, 4L, 4L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 2L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), acap =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L,
>> >         3L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 3L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), aexp =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 4L, 5L, 5L, 5L, 5L, 4L, 5L, 5L, 4L, 5L, 4L, 4L,
>> >         4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), pcap =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 4L, 5L, 4L, 5L, 3L, 4L, 4L, 5L, 4L, 4L, 4L, 4L,
>> >         4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 3L, 4L, 4L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), vexp =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 3L, 3L, 3L, 3L,
>> >         3L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 3L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), lexp =
>> >         structure(c(4L,
>> >         4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 1L, 4L, 4L, 4L, 4L, 3L, 3L,
>> >         3L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 3L, 4L, 3L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), modp =
>> >         structure(c(4L,
>> >         4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
>> >         3L, 5L, 5L, 5L, 5L, 4L, 4L, 3L, 3L, 4L, 3L, 4L, 4L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), tool =
>> >         structure(c(3L,
>> >         3L, 3L, 3L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
>> >         3L, 5L, 5L, 5L, 5L, 3L, 3L, 3L, 3L, 4L, 3L, 3L, 1L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), sced =
>> >         structure(c(2L,
>> >         2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
>> >         3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 2L, 3L), levels =
>> >         c("vl",
>> >         "l", "n", "h", "vh", "xh"), class = "factor"), equivphyskloc =
>> >         c(0.025534,
>> >         0.006945, 0.008988, 0.002655, 0.067102, 0.006741, 0.019508,
>> >         0.005209,
>> >         0.101215, 0.010622, 0.101215, 0.019508, 0.152283, 0.031253,
>> >         0.014401,
>> >         0.014401, 0.037892, 0.009294, 0.015729, 0.012154, 0.032377,
>> >         0.035339,
>> >         0.004698, 0.009703, 0.00572, 0.012358, 0.091002, 0.007252,
>> 0.180778,
>> >         0.307527), act_effort = c(117.6, 31.2, 25.2, 10.8, 352.8, 72,
>> >         72, 24, 360, 36, 215, 48, 324, 60, 48, 90, 210, 48, 82, 62, 170,
>> >         192, 18, 50, 42, 60, 444, 42, 1248, 2400)), row.names = c(1L,
>> >         3L, 5L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 17L, 18L, 19L,
>> >         24L, 25L, 26L, 29L, 30L, 31L, 32L, 33L, 34L, 36L, 37L, 38L, 39L,
>> >         41L, 42L), class = "data.frame")
>> >
>> >
>> >
>> >         On Thu, Jun 30, 2022 at 11:28 PM Rui Barradas
>> >         <ruipbarradas using sapo.pt <mailto:ruipbarradas using sapo.pt>
>> >         <mailto:ruipbarradas using sapo.pt <mailto:ruipbarradas using sapo.pt>>>
>> wrote:
>> >
>> >              Hello,
>> >
>> >              Please post data in dput format, without it it's difficult
>> >         to tell.
>> >              If I substitute
>> >
>> >              mpg for act_effort
>> >              mtcars for tr
>> >
>> >              keeping everything else, I don't get any errors.
>> >              And the error message says clearly that the error is in tr
>> >         (data).
>> >
>> >              Can you post the output of dput(head(tr, 30))?
>> >
>> >              Rui Barradas
>> >
>> >
>> >              Às 19:32 de 30/06/2022, Neha gupta escreveu:
>> >               > I posted it for the second time as I didn't get any
>> >         response from
>> >              group
>> >               > members. I am not sure if some problem is with the
>> question.
>> >               >
>> >               >
>> >               >
>> >               > I cannot run the "ranger" model with caret. I am only
>> >         using the
>> >              farff and
>> >               > caret libraries and the following code:
>> >               >
>> >               > boot <- trainControl(method = "cv", number=10)
>> >               >
>> >               > c1 <-train(act_effort ~ ., data = tr,
>> >               >                method = "ranger",
>> >               >                 tuneLength = 5,
>> >               >                metric = "MAE",
>> >               >                preProc = c("center", "scale", "nzv"),
>> >               >                trControl = boot)
>> >               >
>> >               > The error I get is the repeating of the following
>> >         message until I
>> >              interrupt
>> >               > it.
>> >               >
>> >               > Error: mtry can not be larger than number of variables
>> >         in data.
>> >              Ranger will
>> >               > EXIT now.
>> >               >
>> >               >       [[alternative HTML version deleted]]
>> >               >
>> >               > ______________________________________________
>> >               > R-help using r-project.org <mailto:R-help using r-project.org>
>> >         <mailto:R-help using r-project.org <mailto:R-help using r-project.org>>
>> >         mailing list
>> >              -- To UNSUBSCRIBE and more, see
>> >               > https://stat.ethz.ch/mailman/listinfo/r-help
>> >         <https://stat.ethz.ch/mailman/listinfo/r-help>
>> >              <https://stat.ethz.ch/mailman/listinfo/r-help
>> >         <https://stat.ethz.ch/mailman/listinfo/r-help>>
>> >               > PLEASE do read the posting guide
>> >         http://www.R-project.org/posting-guide.html
>> >         <http://www.R-project.org/posting-guide.html>
>> >              <http://www.R-project.org/posting-guide.html
>> >         <http://www.R-project.org/posting-guide.html>>
>> >               > and provide commented, minimal, self-contained,
>> >         reproducible code.
>> >
>>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list