Tutorial Python

Python HOME Introdução ao Python Introdução ao Python Sintaxe do Python Comentários do Python Variáveis ​​Python Tipos de dados Python Números Python Conversão de Python Strings Python Booleanos Python Operadores Python Listas Python Tuplas Python Conjuntos Python Dicionários Python Python Se... Senão Python While Loops Python para loops Funções do Python Python Lambda Matrizes Python Classes/objetos Python Herança Python Iteradores Python Escopo do Python Módulos Python Datas em Python Matemática Python Python JSON Python RegEx Python PIP Python Tente...Exceto Entrada do usuário Python Formatação de String Python

Manipulação de arquivos

Manipulação de arquivos Python Arquivos de leitura do Python Python Gravar/Criar Arquivos Arquivos de exclusão do Python

Módulos Python

Tutorial NumPy Passo a passo do Panda Tutorial Scipy

Python Matplotlib

Introdução ao Matplotlib Introdução ao Matplotlib Matplotlib Pyplot Plotagem Matplotlib Marcadores Matplotlib Linha Matplotlib Etiquetas Matplotlib Grade Matplotlib Subtramas do Matplotlib Dispersão Matplotlib Barras Matplotlib Histogramas Matplotlib Gráficos de pizza Matplotlib

Aprendizado de máquina

Começando Modo Mediano Médio Desvio padrão Percentil Distribuição de dados Distribuição normal de dados Gráfico de dispersão Regressão linear Regressão Polinomial Regressão múltipla Régua Treinar/Teste Árvore de decisão

Python MySQL

Introdução ao MySQL MySQL Criar banco de dados MySQL Criar Tabela Inserir MySQL Seleção do MySQL MySQL Onde MySQL Ordenar por Excluir MySQL Tabela de descarte do MySQL Atualização do MySQL Limite do MySQL Associação do MySQL

Python MongoDB

Introdução ao MongoDB Banco de dados de criação do MongoDB Criar coleção do MongoDB Inserir MongoDB MongoDB Find Consulta do MongoDB Classificação do MongoDB Excluir MongoDB Coleção de Drops do MongoDB Atualização do MongoDB Limite do MongoDB

Referência Python

Visão geral do Python Funções incorporadas do Python Métodos de string do Python Métodos de lista do Python Métodos de dicionário Python Métodos de Tupla Python Métodos de conjunto do Python Métodos de arquivo Python Palavras-chave Python Exceções do Python Glossário Python

Referência do Módulo

Módulo Aleatório Módulo de solicitações Módulo de Estatísticas Módulo de matemática cMódulo de matemática

Python Como fazer

Remover duplicatas de lista Inverter uma string Adicionar dois números

Exemplos de Python

Exemplos de Python Compilador Python Exercícios de Python Teste do Python Certificado Python

Aprendizado de máquina - Árvore de decisão



Árvore de decisão

Neste capítulo, mostraremos como fazer uma "Árvore de Decisão". Uma Árvore de Decisão é um Fluxograma e pode ajudá-lo a tomar decisões com base na experiência anterior.

No exemplo, uma pessoa tentará decidir se deve ou não ir a um show de comédia.

Por sorte, nosso exemplo se cadastrou todas as vezes que havia um show de comédia na cidade, e registrou algumas informações sobre o comediante, e também registrou se ele foi ou não.

Era Experiência Classificação Nacionalidade Vai
36 10 9 Reino Unido NÃO
42 12 4 EUA NÃO
23 4 6 N NÃO
52 4 4 EUA NÃO
43 21 8 EUA SIM
44 14 5 Reino Unido NÃO
66 3 7 N SIM
35 14 9 Reino Unido SIM
52 13 7 N SIM
35 5 9 N SIM
24 3 5 EUA NÃO
18 3 7 Reino Unido SIM
45 9 9 Reino Unido SIM

Agora, com base nesse conjunto de dados, o Python pode criar uma árvore de decisão que pode ser usada para decidir se vale a pena assistir a novos shows.



Como funciona?

Primeiro, importe os módulos que você precisa e leia o conjunto de dados com pandas:

Exemplo

Leia e imprima o conjunto de dados:

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg

df = pandas.read_csv("shows.csv")

print(df)

Para fazer uma árvore de decisão, todos os dados devem ser numéricos.

Temos que converter as colunas não numéricas 'Nationality' e 'Go' em valores numéricos.

O Pandas tem um map()método que pega um dicionário com informações sobre como converter os valores.

{'UK': 0, 'USA': 1, 'N': 2}

Significa converter os valores 'UK' para 0, 'USA' para 1 e 'N' para 2.

Exemplo

Altere os valores da string para valores numéricos:

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)

print(df)

Em seguida, temos que separar as colunas de recursos da coluna de destino .

As colunas de recurso são as colunas das quais tentamos prever e a coluna de destino é a coluna com os valores que tentamos prever.

Exemplo

Xé as colunas de recurso, yé a coluna de destino:

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

Agora podemos criar a árvore de decisão real, ajustá-la com nossos detalhes e salvar um arquivo .png no computador:

Exemplo

Crie uma Árvore de Decisão, salve-a como uma imagem e mostre a imagem:

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')

img=pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()


Resultado explicado

A árvore de decisão usa suas decisões anteriores para calcular as chances de você querer ir ver um comediante ou não.

Vamos ler os diferentes aspectos da árvore de decisão:

Classificação

Rank <= 6.5significa que todo comediante com uma classificação de 6,5 ou inferior seguirá a Trueseta (para a esquerda) e o restante seguirá a Falseseta (para a direita).

gini = 0.497refere-se à qualidade da divisão e é sempre um número entre 0,0 e 0,5, onde 0,0 significa que todas as amostras obtiveram o mesmo resultado e 0,5 significa que a divisão é feita exatamente no meio.

samples = 13significa que restam 13 comediantes neste momento da decisão, que é todos eles, já que este é o primeiro passo.

value = [6, 7]significa que desses 13 comediantes, 6 receberão um "NÃO" e 7 receberão um "GO".

Gini

Existem muitas maneiras de dividir as amostras, usamos o método GINI neste tutorial.

O método Gini usa esta fórmula:

Gini = 1 - (x/n)2 - (y/n)2

Onde xé o número de respostas positivas ("GO"), né o número de amostras, e yé o número de respostas negativas ("NÃO"), o que nos dá este cálculo:

1 - (7 / 13)2 - (6 / 13)2 = 0.497

O próximo passo contém duas caixas, uma caixa para os comediantes com um 'Rank' de 6,5 ou inferior, e uma caixa com o resto.

Verdadeiro - 5 comediantes terminam aqui:

gini = 0.0significa que todas as amostras obtiveram o mesmo resultado.

samples = 5significa que há 5 comediantes restantes neste ramo (5 comediantes com um Rank de 6,5 ou inferior).

value = [5, 0]significa que 5 receberá um "NO" e 0 receberá um "GO".

Falso - 8 Comediantes Continuam:

Nacionalidade

Nationality <= 0.5significa que os comediantes com um valor de nacionalidade inferior a 0,5 seguirão a seta para a esquerda (o que significa todos do Reino Unido, ), e o resto seguirá a seta para a direita.

gini = 0.219significa que cerca de 22% das amostras iriam em uma direção.

samples = 8significa que restam 8 comediantes neste ramo (8 comediantes com Rank superior a 6,5).

value = [1, 7]significa que desses 8 comediantes, 1 receberá um "NÃO" e 7 receberão um "GO".




Verdadeiro - 4 Comediantes Continuam:

Era

Age <= 35.5significa que os comediantes com 35,5 anos ou menos seguirão a seta para a esquerda e o resto seguirá a seta para a direita.

gini = 0.375significa que cerca de 37,5% das amostras iriam em uma direção.

samples = 4significa que restam 4 comediantes neste ramo (4 comediantes do Reino Unido).

value = [1, 3]significa que desses 4 comediantes, 1 receberá um "NÃO" e 3 receberão um "GO".

Falso - 4 Comediantes Terminam Aqui:

gini = 0.0significa que todas as amostras obtiveram o mesmo resultado.

samples = 4significa que restam 4 comediantes neste ramo (4 comediantes que não são do Reino Unido).

value = [0, 4]significa que desses 4 comediantes, 0 receberá um "NÃO" e 4 receberão um "GO".




Verdadeiro - 2 Comediantes Terminam Aqui:

gini = 0.0significa que todas as amostras obtiveram o mesmo resultado.

samples = 2significa que restam 2 comediantes neste ramo (2 comediantes com 35,5 anos ou menos).

value = [0, 2]significa que desses 2 comediantes, 0 receberá um "NÃO" e 2 receberá um "GO".

Falso - 2 Comediantes Continuam:

Experiência

Experience <= 9.5significa que comediantes com 9,5 anos de experiência, ou menos, seguirão a seta para a esquerda e os demais seguirão a seta para a direita.

gini = 0.5significa que 50% das amostras iriam em uma direção.

samples = 2significa que restam 2 comediantes neste ramo (2 comediantes com mais de 35,5 anos).

value = [1, 1]significa que desses 2 comediantes, 1 receberá um "NÃO" e 1 receberá um "GO".




Verdadeiro - 1 Comediante Termina Aqui:

gini = 0.0significa que todas as amostras obtiveram o mesmo resultado.

samples = 1significa que resta 1 comediante neste ramo (1 comediante com 9,5 anos de experiência ou menos).

value = [0, 1]significa que 0 receberá um "NO" e 1 receberá um "GO".

Falso - 1 Comediante termina aqui:

gini = 0.0significa que todas as amostras obtiveram o mesmo resultado.

samples = 1 significa que resta 1 comediante neste ramo (1 comediante com mais de 9,5 anos de experiência).

value = [1, 0] significa que 1 receberá um "NO" e 0 receberá um "GO".


Prever valores

Podemos usar a Árvore de Decisão para prever novos valores.

Exemplo: Devo ir ver um show estrelado por um comediante americano de 40 anos, com 10 anos de experiência e um ranking de comédia de 7?

Exemplo

Use o método predict() para prever novos valores:

print(dtree.predict([[40, 10, 7, 1]]))

Exemplo

Qual seria a resposta se a classificação de comédia fosse 6?

print(dtree.predict([[40, 10, 6, 1]]))


Resultados Diferentes

Você verá que a Árvore de Decisão fornece resultados diferentes se você a executar várias vezes, mesmo que a alimente com os mesmos dados.

Isso porque a Árvore de Decisão não nos dá uma resposta 100% certa. É baseado na probabilidade de um resultado, e a resposta irá variar.