Estou tentando entender como entender completamente o processo de decisão de um modelo de classificação de árvore de decisão criado com o sklearn. O principal aspecto que estou vendo é uma representação gráfica da árvore e a lista de importâncias de recursos. O que não entendo é como a importância do recurso é determinada no contexto da árvore. Por exemplo, aqui está minha lista de importâncias de recursos:
Classificação de recursos: 1. FeatureA (0,300237)
RecursoB (0,166800)
RecursoC (0,092472)
RecursoD (0,075009)
RecursoE (0,068310)
RecursoF (0,067118)
RecursoG (0,066510)
RecursoH (0,043502)
RecursoI (0,040281)
RecursoJ (0,039006)
RecursoK (0,032618)
RecursoL (0,008136)
RecursoM (0,000000)
No entanto, quando olho para o topo da árvore, fica assim:
De fato, alguns dos recursos classificados como "mais importantes" não aparecem até muito mais abaixo na árvore, e o topo da árvore é o FeatureJ, que é um dos recursos de classificação mais baixa. Minha suposição ingênua seria que as características mais importantes seriam classificadas perto do topo da árvore para ter o maior impacto. Se isso estiver incorreto, o que torna um recurso "importante"?
fonte
Respostas:
Não é necessário que, quanto mais importante for um recurso, mais alto será o nó na árvore de decisão.
Isso ocorre simplesmente porque critérios diferentes (por exemplo, Impureza de Gini, Ganho de Informações de Entropia, MSE etc.) podem ser usados em cada um desses dois casos (divisão versus importância).
Por exemplo,
SkLearn
você pode optar por dividir os nós na árvore de decisão, de acordo com o critério Entropy-Information Gain (consultecriterion
&'entropy'
atSkLearn
), enquanto a importância dos recursos é dada por Gini Importance, que é a diminuição média do Gini impureza para uma determinada variável em todas as árvores da floresta aleatório (vejafeature_importances_
noSkLearn
e aqui ).Se eu estiver certo,
SkLearn
o mesmo se aplica, mesmo que você decida fazer a divisão dos nós na árvore de decisão de acordo com o critério Gini Impurity, enquanto a importância dos recursos é dada pelo Gini Importance porque Gini Impurity e Gini Importance não são idênticos (veja também isso e isso no Stackoverflow sobre Gini Importance).fonte
No scikit-learn, a importância do recurso é a diminuição da impureza do nó. A chave é que ele mede a importância apenas no nível do nó. Em seguida, todos os nós são ponderados pelo número de amostras que atingem esse nó.
Portanto, se apenas algumas amostras terminarem no nó esquerdo após a primeira divisão, isso pode não significar que J é o recurso mais importante porque o ganho no nó esquerdo pode afetar apenas muito poucas amostras. Se você imprimir adicionalmente o número de amostras em cada nó, poderá obter uma imagem melhor do que está acontecendo.
fonte
Só porque um nó está mais baixo na árvore não significa necessariamente que é menos importante. A importância do recurso no sci-kitlearn é calculada pela pureza de um nó que separa as classes (índice de Gini). Você notará, mesmo na sua árvore cortada, que A é dividido três vezes em comparação com a única vez de J e as pontuações de entropia (uma medida de pureza semelhante a Gini) são um pouco mais altas nos nós A do que J.
No entanto, se você pudesse escolher apenas um nó, escolheria J porque isso resultaria nas melhores previsões. Mas se você tivesse a opção de ter muitos nós tomando várias decisões diferentes, A seria a melhor escolha.
fonte
A importância da variável é medida pela diminuição da precisão do modelo quando a variável é removida. A nova árvore de decisão criada com o novo modelo sem a variável pode parecer muito diferente da árvore original. A decisão de divisão no seu diagrama é tomada considerando todas as variáveis no modelo.
Qual variável dividir na raiz (e outros nós) é medida pela impureza. A boa pureza (por exemplo: tudo no ramo esquerdo tem o mesmo valor-alvo) não é garantia de boa precisão. Seus dados podem estar distorcidos; seu ramo direito tem mais respostas que o ramo esquerdo. Portanto, não é bom apenas classificar corretamente o ramo esquerdo, também precisamos considerar o ramo direito. Portanto, a variável de divisão pode ou não ser uma variável importante para a precisão geral do modelo.
Importância variável é uma medida melhor para a seleção de variáveis.
fonte