Я делаю классификацию двух классов, используя Random Forest in Spark 1.5.0 MLlib. Я хочу получить количество записей для каждого класса в каждом узле дерева. Есть ли способ сделать это? Большое спасибо за Вашу помощь!Как получить распределение записей/класс для каждого узла дерева в Spark MLlib Random Forest?
ответ
Нет, или, по крайней мере, не через открытые API. Вы можете получить все деревья в произвольной древовидной модели, используя trees(). В каждом дереве вы можете получить все узлы, начиная с topNode(), и в каждом узле вы можете получить InformationGainStats, который расскажет вам о ваших information gain и примесях, но количество элементов после разрыва не сохраняется. Не уверен, что это будет необходимо в общем случае, ведь обычно вам все равно, насколько велика новая подмножество, но насколько хаотична она с точки зрения ваших классов.
Если вам нужны вероятности, вам может быть достаточно класса Predict?
Сначала экспортируйте модель Random Forest в формат данных PMML. Затем снова заберите свой набор данных, используя JPMML-Evaluator library, и запишите счет и идентификатор узла каждого прогноза. Наконец, сгруппируйте результаты.
Этот подход работает для любой комбинации типов программного обеспечения ML/дерева. Например, вы можете точно анализировать модели R и Scikit-Learn RF, GBM, XGBoost и т. Д.
Спасибо Mateusz за быстрый ответ и очень полезную информацию! Мне нужно создавать правила из узлов дерева на основе ложной положительной скорости (FPR) узла. Если узел имеет FPR <10, то я хочу создать правило для этого узла. Будет ли и как упомянутый вами класс «Predict» поможет сделать это? –