Случайная лесная регрессия: важность отбрасываемого столбца

Я выполняю задачу регрессии случайного леса (RFR) и хочу применить стратегию удаления важности столбца. Основная идея этой стратегии заключается в следующем:

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

Эту стратегию я нашла здесь и здесь.

Как я могу реализовать описанную выше стратегию, используя пакет ranger, чтобы в итоге получить окончательную модель с наиболее важными предикторами (на основе описанной выше стратегии) ​​и, возможно, распечатать переменные?

library(ranger)

train.idx <- sample(nrow(iris), 2/3 * nrow(iris))
iris.train <- iris[train.idx, ]
iris.test <- iris[-train.idx, ]

rg.iris <- ranger(Species ~ ., 
              data = iris.train, 
              num.trees = 101, 
              importance = "permutation")

Windows 11, R 4.3.3, RStudio 2023.12.1, сборка 402.

Не уверен, что вы сможете сделать это только с помощью ranger. Мне кажется, что пакет randomForest также понадобится для оценки важности независимых переменных и последующей соответствующей настройки модели.

GRowInG 09.04.2024 16:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

library(ranger)
library(data.table)

data(iris)
setDT(iris)
set.seed(1234)

# Function to assess performance, here based on Accuracy
performance <- function(model, data) {
  predictions <- predict(model, data.frame(data))
  return(mean(data$Species == predictions$predictions))
}

# Assess performance of baseline model
baseline_model <- ranger(Species ~ ., data = iris)
baseline_performance <- performance(baseline_model, iris)

# Loop to drop columns and assess performance
importance <- c()
for (feature in names(iris)[names(iris) != "Species"]) {
  model <- ranger(Species ~ ., data = iris[,!(names(iris) %in% feature), with = FALSE])
  performance_without_feature <- performance(model, iris[,!(names(iris) %in% feature), with = FALSE])
  importance[feature] <- baseline_performance - performance_without_feature
}

importance

Итак, результаты кода: > importance Sepal.Length Sepal.Width Petal.Length Petal.Width 0.000000000 0.006666667 0.013333333 0.006666667 Я могу сделать вывод, что Sepal.Length неважен. На самом деле меня интересует точность модели на данном этапе.

Nikos 09.04.2024 17:44

Итак, создайте свою модель заново, используя только те функции, которые вам нужны, и рассчитайте точность?

RYann 09.04.2024 17:56

Да, как говорит @RYann, вы можете повторно запустить модель с любыми функциями, которые захотите, а затем оценить производительность. Какой порог важности вы решите использовать, является субъективным, поэтому я оставил это на ваше усмотрение. Вы также можете легко изменить цикл, чтобы он сохранял значения performance_without_feature, если хотите.

rw2 09.04.2024 19:11

Другие вопросы по теме