Для объектов «gl mnet» правильный аргумент должен быть s
, а не lambda
, для согласованности с coef.glmnet
(однако вызов этого с vi()
в настоящее время вызывает ошибку из-за частичного сопоставления с аргументом scale
--- я сделаю sh исправление в эти выходные; https://github.com/koalaverse/vip/issues/103). Также, начиная с версии 0.2.2, vi_model должен работать напрямую с объектами model_fit. Итак, правильный вызов здесь должен быть:
> vi_model(iris_fit, s = iris_fit$fit$lambda[10]). #
# A tibble: 4 x 3
Variable Importance Sign
<chr> <dbl> <chr>
1 Sepal.Length 0 NEG
2 Sepal.Width 0 NEG
3 Petal.Length -0.721 NEG
4 Petal.Width 0 NEG
Что касается vi_firm()
и pdp::partial()
, проще всего создать свою собственную оболочку предсказания. В документации по каждой функции должно быть много деталей, и это больше примеров в нашей предстоящей статье (https://github.com/koalaverse/vip/blob/master/rjournal/RJwrapper.pdf), но вот базовый пример c:
> # Data matrix (features only)
> X <- data.matrix(subset(iris1, select = -class))
>
> # Prediction wrapper for partial dependence
> pfun <- function(object, newdata) {
+ # Return averaged prediciton for class of interest
+ mean(predict(object, newx = newdata, s = iris_fit$fit$lambda[10],
+ type = "link")[, 1L])
+ }
>
> # PDP-based VI
> features <- setdiff(names(iris1), "class")
> vip::vi_firm(
+ object = iris_fit$fit,
+ feature_names = features,
+ train = X,
+ pred.fun = pfun
+ )
# A tibble: 4 x 2
Variable Importance
<chr> <dbl>
1 Sepal.Length 0
2 Sepal.Width 0
3 Petal.Length 1.27
4 Petal.Width 0
>
> # PDP
> pd <- pdp::partial(iris_fit$fit, "Petal.Length", pred.fun = pfun,
+ train = X)
> head(pd)
Petal.Length yhat
1 1.000000 1.0644756
2 1.140476 0.9632228
3 1.280952 0.8619700
4 1.421429 0.7607172
5 1.561905 0.6594644
6 1.702381 0.5582116