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 -
|
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])