Scikit Learn - Árvores de Decisão

Neste capítulo, aprenderemos sobre o método de aprendizagem em Sklearn, que é denominado como árvores de decisão.

As árvores de decisão (DTs) são o método de aprendizagem supervisionado não paramétrico mais poderoso. Eles podem ser usados ​​para as tarefas de classificação e regressão. O principal objetivo dos DTs é criar um modelo que preveja o valor da variável alvo, aprendendo regras de decisão simples deduzidas dos recursos de dados. As árvores de decisão têm duas entidades principais; um é o nó raiz, onde os dados se dividem, e o outro são os nós de decisão ou folhas, onde obtivemos a saída final.

Algoritmos de árvore de decisão

Diferentes algoritmos de árvore de decisão são explicados abaixo -

ID3

Foi desenvolvido por Ross Quinlan em 1986. Também é chamado de Dicotomizador Iterativo 3. O objetivo principal desse algoritmo é encontrar aquelas características categóricas, para cada nó, que produzirão o maior ganho de informação para alvos categóricos.

Ele permite que a árvore cresça até seu tamanho máximo e, em seguida, para melhorar a capacidade da árvore em dados invisíveis, aplica uma etapa de poda. A saída desse algoritmo seria uma árvore de múltiplos caminhos.

C4.5

É o sucessor de ID3 e define dinamicamente um atributo discreto que particiona o valor do atributo contínuo em um conjunto discreto de intervalos. Essa é a razão pela qual removeu a restrição de recursos categóricos. Ele converte a árvore treinada ID3 em conjuntos de regras 'SE-ENTÃO'.

Para determinar a seqüência em que essas regras devem ser aplicadas, a precisão de cada regra será avaliada primeiro.

C5.0

Ele funciona de forma semelhante ao C4.5, mas usa menos memória e cria conjuntos de regras menores. É mais preciso do que C4.5.

CARRINHO

É também denominado Árvores de Classificação e Regressão. Basicamente, ele gera divisões binárias usando os recursos e o limite, gerando o maior ganho de informação em cada nó (chamado de índice de Gini).

A homogeneidade depende do índice de Gini, quanto maior o valor do índice de Gini, maior será a homogeneidade. É como o algoritmo C4.5, mas a diferença é que ele não calcula conjuntos de regras e também não oferece suporte a variáveis ​​de destino numéricas (regressão).

Classificação com árvores de decisão

Nesse caso, as variáveis ​​de decisão são categóricas.

Sklearn Module - A biblioteca Scikit-learn fornece o nome do módulo DecisionTreeClassifier para realizar a classificação multiclasse no conjunto de dados.

Parâmetros

A tabela a seguir consiste nos parâmetros usados ​​por sklearn.tree.DecisionTreeClassifier módulo -

Sr. Não Parâmetro e Descrição
1

criterion - string, padrão opcional = “gini”

Ele representa a função de medir a qualidade de uma divisão. Os critérios suportados são “gini” e “entropia”. O padrão é gini, que é para a impureza de Gini, enquanto a entropia é para o ganho de informação.

2

splitter - string, padrão opcional = “melhor”

Ele diz ao modelo qual estratégia da “melhor” ou “aleatória” escolher a divisão em cada nó.

3

max_depth - int ou nenhum, padrão opcional = nenhum

Este parâmetro decide a profundidade máxima da árvore. O valor padrão é Nenhum, o que significa que os nós se expandirão até que todas as folhas sejam puras ou até que todas as folhas contenham menos do que min_smaples_split amostras.

4

min_samples_split - int, float, padrão opcional = 2

Este parâmetro fornece o número mínimo de amostras necessárias para dividir um nó interno.

5

min_samples_leaf - int, float, padrão opcional = 1

Este parâmetro fornece o número mínimo de amostras necessárias para estar em um nó folha.

6

min_weight_fraction_leaf - float, padrão opcional = 0.

Com este parâmetro, o modelo obterá a fração mínima ponderada da soma dos pesos necessários para estar em um nó folha.

7

max_features - int, float, string ou Nenhum, padrão opcional = Nenhum

Fornece ao modelo o número de recursos a serem considerados ao procurar a melhor divisão.

8

random_state - int, instância RandomState ou Nenhum, opcional, padrão = nenhum

Este parâmetro representa a semente do número pseudoaleatório gerado que é usado ao embaralhar os dados. A seguir estão as opções -

  • int- Neste caso, random_state é a semente usada pelo gerador de números aleatórios.

  • RandomState instance - Nesse caso, random_state é o gerador de números aleatórios.

  • None - Nesse caso, o gerador de número aleatório é a instância RandonState usada por np.random.

9

max_leaf_nodes - int ou nenhum, padrão opcional = nenhum

Este parâmetro permitirá que uma árvore cresça com max_leaf_nodes da melhor maneira possível. O padrão é nenhum, o que significa que haveria um número ilimitado de nós folha.

10

min_impurity_decrease - float, padrão opcional = 0.

Este valor funciona como um critério para um nó se dividir porque o modelo irá dividir um nó se esta divisão induzir uma diminuição da impureza maior ou igual a min_impurity_decrease value.

11

min_impurity_split - flutuante, padrão = 1e-7

Ele representa o limite para a interrupção precoce do crescimento das árvores.

12

class_weight - dict, lista de dicts, “balance” ou None, default = None

Ele representa os pesos associados às classes. O formulário é {class_label: weight}. Se usarmos a opção padrão, significa que todas as classes devem ter peso um. Por outro lado, se você escolherclass_weight: balanced, ele usará os valores de y para ajustar automaticamente os pesos.

13

presort - bool, padrão opcional = False

Diz ao modelo se deve pré-classificar os dados para acelerar a descoberta das melhores divisões no ajuste. O padrão é falso, mas definido como verdadeiro, pode retardar o processo de treinamento.

Atributos

A tabela a seguir consiste nos atributos usados ​​por sklearn.tree.DecisionTreeClassifier módulo -

Sr. Não Parâmetro e Descrição
1

feature_importances_ - matriz de forma = [n_features]

Este atributo retornará a importância do recurso.

2

classes_: - array of shape = [n_classes] ou uma lista de tais arrays

Ele representa os rótulos das classes, ou seja, o problema de saída única, ou uma lista de matrizes de rótulos de classes, ou seja, o problema de múltiplas saídas.

3

max_features_ - int

Ele representa o valor deduzido do parâmetro max_features.

4

n_classes_ - int ou lista

Ele representa o número de classes, ou seja, o problema de saída única, ou uma lista de número de classes para cada saída, ou seja, problema de múltiplas saídas.

5

n_features_ - int

Dá o número de features quando o método fit () é executado.

6

n_outputs_ - int

Dá o número de outputs quando o método fit () é executado.

Métodos

A tabela a seguir consiste nos métodos usados ​​por sklearn.tree.DecisionTreeClassifier módulo -

Sr. Não Parâmetro e Descrição
1

apply(self, X [, check_input])

Este método retornará o índice da folha.

2

decision_path(self, X [, check_input])

Como o nome sugere, este método retornará o caminho de decisão na árvore

3

fit(self, X, y [, sample_weight, ...])

O método fit () construirá um classificador de árvore de decisão a partir de um determinado conjunto de treinamento (X, y).

4

get_depth(auto)

Como o nome sugere, este método retornará a profundidade da árvore de decisão

5

get_n_leaves(auto)

Como o nome sugere, este método retornará o número de folhas da árvore de decisão.

6

get_params(auto [, profundo])

Podemos usar este método para obter os parâmetros do estimador.

7

predict(self, X [, check_input])

Ele irá prever o valor da classe para X.

8

predict_log_proba(próprio, X)

Ele irá prever as probabilidades de log da classe das amostras de entrada fornecidas por nós, X.

9

predict_proba(self, X [, check_input])

Ele irá prever as probabilidades de classe das amostras de entrada fornecidas por nós, X.

10

score(self, X, y [, sample_weight])

Como o nome indica, o método score () retornará a precisão média nos dados e rótulos de teste fornecidos.

11

set_params(self, \ * \ * params)

Podemos definir os parâmetros do estimador com este método.

Exemplo de Implementação

O script Python abaixo usará sklearn.tree.DecisionTreeClassifier módulo para construir um classificador para predizer homem ou mulher a partir de nosso conjunto de dados com 25 amostras e duas características, a saber 'altura' e 'comprimento do cabelo' -

from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)

Resultado

['Woman']

Também podemos prever a probabilidade de cada classe usando o seguinte método python predict_proba () da seguinte maneira -

Exemplo

prediction = DTclf.predict_proba([[135,29]])
print(prediction)

Resultado

[[0. 1.]]

Regressão com árvores de decisão

Nesse caso, as variáveis ​​de decisão são contínuas.

Sklearn Module - A biblioteca Scikit-learn fornece o nome do módulo DecisionTreeRegressor para aplicar árvores de decisão em problemas de regressão.

Parâmetros

Parâmetros usados ​​por DecisionTreeRegressor são quase iguais aos usados ​​em DecisionTreeClassifiermódulo. A diferença está no parâmetro 'critério'. ParaDecisionTreeRegressor módulos ‘criterion: string, opcional default = “mse” 'parâmetro tem os seguintes valores -

  • mse- Representa o erro quadrático médio. É igual à redução da variância como critério de seleção de recurso. Ele minimiza a perda L2 usando a média de cada nó terminal.

  • freidman_mse - Também usa o erro quadrático médio, mas com a pontuação de melhoria de Friedman.

  • mae- Significa o erro médio absoluto. Ele minimiza a perda de L1 usando a mediana de cada nó terminal.

Outra diferença é que não tem ‘class_weight’ parâmetro.

Atributos

Atributos de DecisionTreeRegressor também são iguais aos de DecisionTreeClassifiermódulo. A diferença é que não tem‘classes_’ e ‘n_classes_' atributos.

Métodos

Métodos de DecisionTreeRegressor também são iguais aos de DecisionTreeClassifiermódulo. A diferença é que não tem‘predict_log_proba()’ e ‘predict_proba()’' atributos.

Exemplo de Implementação

O método fit () no modelo de regressão da árvore de decisão assumirá os valores de ponto flutuante de y. vamos ver um exemplo de implementação simples usandoSklearn.tree.DecisionTreeRegressor -

from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)

Uma vez ajustado, podemos usar este modelo de regressão para fazer previsões da seguinte forma -

DTreg.predict([[4, 5]])

Resultado

array([1.5])