Важность локальных характеристик можно оценить с помощью пакета lime.
library(solitude)
library(lime)
Сначала приведем некоторые данные об игрушках:
set.seed(1234)
data<-data.frame(rnorm(20,0,1),rnorm(20,0,0.5))
colnames(data)<-c("x","y")
row.names(data)<-seq(1,nrow(data),1)
Посмотрите на данные об игрушках:
plot(data)
text(data-0.05,row.names(data))
Эти случаи выглядят как выбросы:
outliers<-c(4,20)
Расширение леса изоляции:
model<-isolation_forest(data, importance="impurity")
Поскольку одиночество не поддерживается в извести, нам нужно построить две функции, чтобыЛайм может обращаться с объектами одиночества.Функция model_type сообщает lime, какая у нас модель.Функция Предсказание_модели позволяет извести прогнозировать с объектами уединения.
model_type.solitude <- function(x, ...) {
return("regression")
}
predict_model.solitude <- function(x, newdata, ...) {
pred <- predict(x, newdata)
return(as.data.frame(pred))
}
Затем мы можем сгенерировать объект извести и оценить важность функции уровня наблюдения (и число перестановок может быть установлено выше для более надежных результатов):
lime1 <- lime(data, model)
importance <- data.frame(explain(data, lime1,
n_features = 2,n_permutations = 500 ))
Важность функции важна $ feature_weight.Случайная проверка результатов:
importance[importance$case %in% outliers,c("case","feature","feature_weight")]
Сюжет:
plot_features(importance[importance$case %in% outliers,] , ncol = 2)
Надеюсь, что это полезно!
Конечно, прочитайте lime как этоосновывается на определенных предположениях.