Как определить диапазон значений признаков, используемых для прогнозирования класса, с помощью классификатора случайного леса - PullRequest
4 голосов
/ 08 апреля 2019

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

Например, у нас есть набор данных IRIS;

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

Я могу выяснить важность функции и могу визуализировать шаги, которые выполняет классификатор, используя Graphviz.Теперь я хотел бы выяснить, к какому диапазону относится, например, длина чашелистика, в результате чего прогноз будет представлять собой сетозу, то есть длина лепестка в диапазоне от 0,2 до 0,4 является показателем того, что этот вид является сетозой.Я могу просматривать эти данные визуально, используя Graphviz, но я бы хотел сохранить их и проанализировать для всего моего набора данных, используя 200 оценщиков.Есть ли способ сбора и хранения данных в текстовом виде, на изображении ниже дерева решений;если длина лепестка <= 2,6, то класс Setosa. </p>

https://images.app.goo.gl/pPK1KsXAMY3z27JW8

Я хотел бы иметь кадр данных, подобный этому:

        node |   feature     | Samples | Value     | Class 
   --------------------------------------------------------------
   1.    1   |  sepal-length |    23   |  <= 0.2   | Setosa
   2.    3   |  petal-width  |    45   |  <= 0.3   | Versicolor
   3.   ...          ...         ...        ...        ...
   n.    178 |  sepal-width  |    3    |  <= 0.4   | Setosa

Один разУ меня есть фрейм данных, который я мог бы проанализировать и увидеть, например;Цветок лепестка сетозы будет иметь длину лепестка от 0,1 до 0,3, длину чашелистика от 0,4 до 0,7 и т. Д.

Возможно ли это вообще?Если это так, любые идеи будут высоко оценены.

РЕДАКТИРОВАТЬ: Я посмотрел на пути принятия решений для каждого дерева, и хотя они полезны, они не содержат предсказанный класс, поэтому не помогает мне с тем, что япытаясь сделать.

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

1 Ответ

1 голос
/ 08 апреля 2019

У RandomForestClassifier scikit-learn есть атрибут с именем estimators_, который после обучения представляет собой список DecisionTreeClassifier экземпляров, которые вместе составляют лес.

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

Замечательные люди из scikit-learn даже написали документацию о том, как получить доступ к дереву.свойства .

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

Как вы можете видеть в этой строке в функции node_to_str , они принимают argmax над переменной-значением, которая определена здесь .Я думаю, что если вы объедините это с документацией, связанной выше, вы сможете получить класс для узла!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...