Как получить особенность важности лучшей модели от перекрестного валидатора в sparklyr?

Я могу тренировать случайный лесной крест валидатор в sparklyr но не могу найти способ получить значение функции для лучшей модели.

Если я обучаю простую модель случайного леса, я могу использовать:

fit <- ml_random_forest(...)
feature_imp <- ml_tree_feature_importance(fit)

Однако, если я сделаю то же самое с лучшей моделью из перекрестного валидатора, я получу ошибку:

> cv_model <- ml_fit(cv, df_training)
> feature_imp <- ml_tree_feature_importance(cv_model$best_model)
Error in UseMethod("ml_feature_importances") : 
no applicable method for 'ml_feature_importances' applied to an object of class "c('ml_pipeline_model', 'ml_transformer', 'ml_pipeline_stage')"

Есть ли способ получить важность функции для лучшей модели от перекрестного валидатора?

Ключ к этому вопросу,

  1. какая разница между выходом model_fit и выход ml_random_forest?
  2. Какие функции можно применить к одному, а какие - к другому?
  3. Могут ли они быть обращены друг к другу?

1 ответ

Решение

Я внимательно изучил структуру лучшей модели в перекрестном валидаторе.

Для модели на основе дерева (я проверил GBT и RF), на этапе алгоритма есть компонент под названием feature_importances который содержит значения для всех реальных переменных (отличается от имен переменных, заданных на этапе ассемблера объектов, где одна горячая переменная не раскрывается).

Печально что это feature_importances вектор не назван, и я должен определить соответствующее имя переменной для каждого значения.

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

Чтобы получить уровни одной горячей переменной, мы можем вернуться к этапам с UID, содержащим one_hot_encoder_ сначала получить одну горячую закодированную переменную, а затем вернуться к этапам с UID, содержащим string_indexer_ чтобы получить уровни (хранятся в подсписке с именем labels) для каждой горячей закодированной переменной. Следует отметить, что, так как это, в сущности фиктивной кодирования, один из уровня используется в качестве опорного уровня, который не будет отображаться в виде отдельной переменной, и я полагаю, первый уровень встречается и записывается в labels является опорным уровнем, и порядок действительных переменных для конкретной переменной с горячим кодированием такой же, как в labels,

В соответствии с этими 3 предположениями я могу восстановить вектор имен столбцов и присоединить его к вектору важности объектов, чтобы сформировать таблицу важности объектов, например, полученную при применении. ml_feature_importances() на модели GBT или RF, обученной без перекрестного валидатора.

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