Tutorial de Python

Pitón INICIO Introducción a Python Python Empezar Sintaxis de Python Comentarios de Python Variables de Python Tipos de datos de Python Números de Python Fundición de Python Cadenas de pitón Booleanos de Python Operadores de Python Listas de Python Tuplas de Python Conjuntos de Python Diccionarios de Python Python si... si no Ciclos while de Python Python para bucles Funciones de Python pitón lambda Matrices de Python Clases/Objetos de Python Herencia de Python Iteradores de Python Alcance de Python Módulos de Python Fechas de Python Python Matemáticas PythonJSON Python expresión regular PIP de Python Prueba Python... Excepto Entrada de usuario de Python Formato de cadenas de Python

Manejo de archivos

Manejo de archivos de Python Python Leer archivos Python escribir/crear archivos Python Eliminar archivos

Módulos de Python

Tutorial NumPy Pandas Tutorial SciPy Tutorial

Matplotlib de Python

Introducción a Matplotlib Matplotlib Comenzar Pyplot de Matplotlib Trazado de Matplotlib Marcadores Matplotlib Línea Matplotlib Etiquetas Matplotlib Cuadrícula Matplotlib Subparcelas de Matplotlib Dispersión de Matplotlib Barras Matplotlib Histogramas de Matplotlib Gráficos circulares de Matplotlib

Aprendizaje automático

Empezando Media Mediana Moda Desviación Estándar percentil Distribución de datos Distribución normal de datos Gráfico de dispersión Regresión lineal Regresión polinomial Regresión múltiple Escala Entrenar/Prueba Árbol de decisión

pitón mysql

MySQL Empezar Crear base de datos MySQL Crear tabla MySQL Insertar MySQL Seleccionar MySQL mysql donde MySQL Ordenar por MySQL Eliminar Tabla desplegable de MySQL Actualización de MySQL Límite MySQL unirse a mysql

Python MongoDB

MongoDB Empezar MongoDB Crear base de datos MongoDB Crear colección Insertar MongoDB MongoDB Buscar Consulta MongoDB MongoDB Ordenar Eliminar MongoDB Colección de eliminación de MongoDB Actualización de MongoDB Límite de MongoDB

Referencia de Python

Descripción general de Python Funciones integradas de Python Métodos de cadenas de Python Métodos de lista de Python Métodos de diccionario de Python Métodos de tupla de Python Métodos de conjuntos de Python Métodos de archivos de Python Palabras clave de Python Excepciones de Python Glosario de Python

Referencia del módulo

Módulo aleatorio Módulo de Solicitudes Módulo de estadísticas Módulo Matemático cMódulo Matemático

Python Cómo

Eliminar duplicados de lista Invertir una cadena Añadir dos números

Ejemplos de Python

Ejemplos de Python Compilador de Python Ejercicios de pitón Cuestionario de Python Certificado de Python

Aprendizaje automático: árbol de decisiones



Árbol de decisión

En este capítulo le mostraremos cómo hacer un "árbol de decisiones". Un árbol de decisiones es un diagrama de flujo y puede ayudarlo a tomar decisiones basadas en la experiencia previa.

En el ejemplo, una persona intentará decidir si debe ir a un programa de comedia o no.

Afortunadamente, nuestra persona de ejemplo se ha registrado cada vez que hubo un espectáculo de comedia en la ciudad, y registró cierta información sobre el comediante, y también registró si asistió o no.

Envejecer Experiencia Rango Nacionalidad Vamos
36 10 9 Reino Unido NO
42 12 4 EE.UU NO
23 4 6 norte NO
52 4 4 EE.UU NO
43 21 8 EE.UU
44 14 5 Reino Unido NO
66 3 7 norte
35 14 9 Reino Unido
52 13 7 norte
35 5 9 norte
24 3 5 EE.UU NO
18 3 7 Reino Unido
45 9 9 Reino Unido

Ahora, en función de este conjunto de datos, Python puede crear un árbol de decisiones que se puede usar para decidir si vale la pena asistir a algún programa nuevo.



¿Como funciona?

Primero, importe los módulos que necesita y lea el conjunto de datos con pandas:

Ejemplo

Lea e imprima el conjunto de datos:

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 hacer un árbol de decisión, todos los datos deben ser numéricos.

Tenemos que convertir las columnas no numéricas 'Nacionalidad' y 'Ir' en valores numéricos.

Pandas tiene un map()método que toma un diccionario con información sobre cómo convertir los valores.

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

Significa convertir los valores 'UK' a 0, 'USA' a 1 y 'N' a 2.

Ejemplo

Cambie los valores de cadena a 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)

Luego tenemos que separar las columnas de características de la columna de destino .

Las columnas de características son las columnas a partir de las cuales tratamos de predecir , y la columna de destino es la columna con los valores que intentamos predecir.

Ejemplo

Xson las columnas de características, yes la columna de destino:

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

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

print(X)
print(y)

Ahora podemos crear el árbol de decisión real, ajustarlo con nuestros detalles y guardar un archivo .png en la computadora:

Ejemplo

Cree un árbol de decisiones, guárdelo como una imagen y muestre la imagen:

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

El árbol de decisiones utiliza sus decisiones anteriores para calcular las probabilidades de que quiera ir a ver a un comediante o no.

Leamos los diferentes aspectos del árbol de decisión:

Rango

Rank <= 6.5significa que cada comediante con un rango de 6.5 o menos seguirá la Trueflecha (hacia la izquierda), y el resto seguirá la Falseflecha (hacia la derecha).

gini = 0.497 se refiere a la calidad de la división y siempre es un número entre 0,0 y 0,5, donde 0,0 significaría que todas las muestras obtuvieron el mismo resultado y 0,5 significaría que la división se realizó exactamente en el medio.

samples = 13 significa que quedan 13 comediantes en este punto de la decisión, que son todos ya que este es el primer paso.

value = [6, 7] significa que de estos 13 comediantes, 6 obtendrán un "NO" y 7 obtendrán un "SI".

gini

Hay muchas formas de dividir las muestras, usamos el método GINI en este tutorial.

El método Gini utiliza esta fórmula:

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

Donde xestá el número de respuestas positivas ("GO"), nes el número de muestras y yes el número de respuestas negativas ("NO"), lo que nos da este cálculo:

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

El siguiente paso contiene dos casillas, una casilla para los comediantes con un 'Rango' de 6.5 o menos, y una casilla con el resto.

Cierto: 5 comediantes terminan aquí:

gini = 0.0significa que todas las muestras obtuvieron el mismo resultado.

samples = 5significa que quedan 5 comediantes en esta rama (5 comediantes con un Rango de 6.5 o menos).

value = [5, 0]significa que 5 obtendrá un "NO" y 0 obtendrá un "SI".

Falso - 8 comediantes continúan:

Nacionalidad

Nationality <= 0.5significa que los comediantes con un valor de nacionalidad inferior a 0,5 seguirán la flecha hacia la izquierda (lo que significa que todos los del Reino Unido), y el resto seguirá la flecha hacia la derecha.

gini = 0.219significa que alrededor del 22% de las muestras irían en una dirección.

samples = 8significa que quedan 8 comediantes en esta rama (8 comediantes con un Rango superior a 6.5).

value = [1, 7]significa que de estos 8 comediantes, 1 obtendrá un "NO" y 7 obtendrán un "SI".




Cierto - 4 comediantes continúan:

Envejecer

Age <= 35.5significa que los comediantes de 35,5 años o menos seguirán la flecha hacia la izquierda y el resto seguirá la flecha hacia la derecha.

gini = 0.375significa que alrededor del 37,5% de las muestras irían en una dirección.

samples = 4significa que quedan 4 comediantes en esta rama (4 comediantes del Reino Unido).

value = [1, 3]significa que de estos 4 comediantes, 1 obtendrá un "NO" y 3 obtendrán un "SI".

Falso: 4 comediantes terminan aquí:

gini = 0.0significa que todas las muestras obtuvieron el mismo resultado.

samples = 4significa que quedan 4 comediantes en esta rama (4 comediantes que no son del Reino Unido).

value = [0, 4]significa que de estos 4 comediantes, 0 obtendrá un "NO" y 4 obtendrá un "GO".




Cierto: 2 comediantes terminan aquí:

gini = 0.0significa que todas las muestras obtuvieron el mismo resultado.

samples = 2significa que quedan 2 comediantes en esta rama (2 comediantes de 35,5 años o menos).

value = [0, 2]significa que de estos 2 comediantes, 0 obtendrá un "NO" y 2 obtendrá un "GO".

Falso - 2 comediantes continúan:

Experiencia

Experience <= 9.5significa que los comediantes con 9.5 años de experiencia, o menos, seguirán la flecha hacia la izquierda y el resto seguirá la flecha hacia la derecha.

gini = 0.5significa que el 50% de las muestras irían en una dirección.

samples = 2significa que quedan 2 comediantes en esta sucursal (2 comediantes mayores de 35.5).

value = [1, 1]significa que de estos 2 comediantes, 1 obtendrá un "NO" y 1 obtendrá un "SI".




Cierto: 1 comediante termina aquí:

gini = 0.0significa que todas las muestras obtuvieron el mismo resultado.

samples = 1significa que queda 1 comediante en esta rama (1 comediante con 9.5 años de experiencia o menos).

value = [0, 1]significa que 0 obtendrá un "NO" y 1 obtendrá un "SI".

Falso - 1 comediante termina aquí:

gini = 0.0significa que todas las muestras obtuvieron el mismo resultado.

samples = 1significa que queda 1 comediante en esta rama (1 comediante con más de 9.5 años de experiencia).

value = [1, 0]significa que 1 obtendrá un "NO" y 0 obtendrá un "SI".


Predecir valores

Podemos usar el árbol de decisiones para predecir nuevos valores.

Ejemplo: ¿Debería ir a ver un programa protagonizado por un comediante estadounidense de 40 años, con 10 años de experiencia y un ranking de comedia de 7?

Ejemplo

Utilice el método predict() para predecir nuevos valores:

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

Ejemplo

¿Cuál sería la respuesta si el rango de comedia fuera 6?

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


Resultados diferentes

Verá que el árbol de decisión le da resultados diferentes si lo ejecuta suficientes veces, incluso si lo alimenta con los mismos datos.

Esto se debe a que el árbol de decisiones no nos da una respuesta 100 % segura. Se basa en la probabilidad de un resultado, y la respuesta variará.