Как получить особенность важности лучшей модели от перекрестного валидатора в 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')"
Есть ли способ получить важность функции для лучшей модели от перекрестного валидатора?
Ключ к этому вопросу,
- какая разница между выходом
model_fit
и выходml_random_forest
? - Какие функции можно применить к одному, а какие - к другому?
- Могут ли они быть обращены друг к другу?
1 ответ
Я внимательно изучил структуру лучшей модели в перекрестном валидаторе.
Для модели на основе дерева (я проверил GBT и RF), на этапе алгоритма есть компонент под названием feature_importances
который содержит значения для всех реальных переменных (отличается от имен переменных, заданных на этапе ассемблера объектов, где одна горячая переменная не раскрывается).
Печально что это feature_importances
вектор не назван, и я должен определить соответствующее имя переменной для каждого значения.
Я думаю, что из ассемблера функций мы можем получить упрощенный вектор имен столбцов, где одна переменная с горячим кодированием не раскрывается, и для каждой переменной с горячим кодированием нам просто нужно заменить ее набором имен переменных с уровнями, которые в конечном итоге появятся с полным вектором имени столбца - я предполагаю, что порядок переменных такой же, как у ассемблера объектов.
Чтобы получить уровни одной горячей переменной, мы можем вернуться к этапам с UID, содержащим one_hot_encoder_
сначала получить одну горячую закодированную переменную, а затем вернуться к этапам с UID, содержащим string_indexer_
чтобы получить уровни (хранятся в подсписке с именем labels
) для каждой горячей закодированной переменной. Следует отметить, что, так как это, в сущности фиктивной кодирования, один из уровня используется в качестве опорного уровня, который не будет отображаться в виде отдельной переменной, и я полагаю, первый уровень встречается и записывается в labels
является опорным уровнем, и порядок действительных переменных для конкретной переменной с горячим кодированием такой же, как в labels
,
В соответствии с этими 3 предположениями я могу восстановить вектор имен столбцов и присоединить его к вектору важности объектов, чтобы сформировать таблицу важности объектов, например, полученную при применении. ml_feature_importances()
на модели GBT или RF, обученной без перекрестного валидатора.