Сравнение регрессионных моделей по важности переменных

Я хотел бы сравнить модели (множественная регрессия, LASSO, Ridge, GBM) по важности переменных. Но я не уверен, верна ли процедура, потому что полученные значения не в одном масштабе.

При множественной регрессии и GBM значения варьируются от 0 до 100 с использованием varImp из пакета каретки. Расчет этой статистики отличается в каждом из методов.

Линейные модели: используется абсолютное значение t-статистики для каждого параметра модели.

Усиленные деревья: этот метод использует тот же подход, что и одиночное дерево, но суммирует важность каждой итерации повышения.

В то время как для LASSO и Ridge значения составляют от 0,00 до 0,99, рассчитанные с помощью функции:

varImp <- function (object, lambda = NULL, ...) {
  beta <- predict (object, s = lambda, type = "coef")
  if (is.list (beta)) {
    out <- do.call ("cbind", lapply (beta, function (x)
      x [, 1])))
    out <- as.data.frame (out)
  } else
    out <- data.frame (Overall = beta [, 1])
  out <- abs (out [rownames (out)! = "(Intercept)",, drop = FALSE])
  out
}

Что получилось здесь: Пакет Caret - важность переменной glmnet

Руководствовался другими вопросами на форуме, но так и не смог понять, почему есть разница шкал. Как я могу сопоставить эти измерения?


person Joyce M.    schedule 07.01.2020    source источник
comment
Вероятно, это более общий вопрос о сравнении статистических моделей, который лучше задать на перекрестной проверке. В противном случае включите хотя бы минимальный воспроизводимый пример с образцом входных данных и ваших конкретных функций моделирования, чтобы можно было проверить и проверить возможные решения. Но в целом обычно не рекомендуется напрямую сравнивать подобные результаты для совершенно разных типов моделей.   -  person MrFlick    schedule 08.01.2020
comment
Спасибо MrFlick, изменю вопрос!   -  person Joyce M.    schedule 08.01.2020


Ответы (1)


Если цель состоит в том, чтобы просто сравнить их бок о бок, то важно создать шкалу, в которой они все могут жить вместе, и отсортировать их.

Вы можете добиться этого, создав стандартизированную шкалу и приведя все ваши VarImps к новой согласованной шкале, в данном случае от 0 до 100.


importance_data <- c(-23,12, 32, 18, 45, 1, 77, 18, 22)

new_scale <- function(x){
    y =((100-0)/(max(x) -min(x))*(x-max(x))+100)
    sort(y)
    }

new_scale(importance_data)


#results
[1]   0  24  35  41  41  45  55  68 100

Это даст вам однородный масштаб. И это не значит, что 22 в одной шкале точно такое же, как 22 в другой шкале. Но для относительного сравнения подойдет любой масштаб.

Это даст вам стандартизированное ощущение разделения важности каждой переменной в ее собственной модели, и вы сможете легче оценивать их бок о бок на основе относительности масштабированных значений.

person sconfluentus    schedule 08.01.2020
comment
Понятно, спасибо за ответ. Думаю, это единственное средство для возможного сравнения. Спасибо - person Joyce M.; 11.01.2020
comment
Типы моделей у них достаточно разные, и я думаю, что вы правы. Просто будьте осторожны с их оценкой, используя абсолютные числа. - person sconfluentus; 11.01.2020