Predecir especies de flores

Predecir especies de flor de lirio en base de a una serie de datos se puede realizar con la creación de un modelo de regresión logística. En este artículo trataremos un problema de aprendizaje supervisado en base a un dataset que veremos a continuación, ya que se trata de predecir la clase de especie en base a una serie de variables.

Librerías utilizadas

Análisis de los datos

El dataset esta formado por las siguientes columnas:

  • Id: SPL-SPW-PTL-PTW(CM)
  • SepalLengthCm: Longitud del sépalo (en cm)
  • SepalWidthCm: Anchura del sépalo (en cm)
  • PetalLengthCm: Longitud del pétalo (en cm)
  • PetalWidthCm: Anchura del pétalo (en cm)
  • Species: Nombre de la especie

La creación del dataframe con el dataset se realiza sin peculiaridades:

data = pd.read_csv('./iris.csv')

En el siguiente gráfico podemos observar la relación entre la longitud del sépalo y la anchura:

Se puede ver que la especie Setosa tiene un rango de valores característico. En la siguiente imagen veremos la relación entre la longitud y la anchura del pétalo:

En esta imagen se puede ver más claramente cómo los valores de las variables relacionados con los pétalos diferencian bastante bien según la especie. Por lo tanto, podemos suponer que estas variables van a ser usadas en el modelo.

La correlación entre las distintas variables se puede observar en la siguiente imagen:

Se observa que la anchura y la longitud del sépalo no están correlacionadas. En cambio la anchura y la longitud del pétalo si están fuertemente correlacionadas.

Creación del modelo de regresión logística

Lo primero antes de construir el modelo es dividir el dataset en posibles variables predictoras (x) y variable a predecir (y):

x = data.iloc[:,1:-1].values
y = data.iloc[:, -1].values

Ahora procedemos a dividir el conjunto de los datos en conjunto de entrenamiento y test:

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)

El 70% de los datos serán para el conjunto de entrenamiento y el 30% restante será para testear el modelo con datos ajenos a su entrenamiento. Para crear el modelo, entrenarlo y realizar las predicciones se podría hacer de la siguiente forma:

classifier = LogisticRegression(multi_class='ovr', random_state = 0)
classifier.fit(x_train, y_train)
predictions = classifier.predict(x_test)

En este caso las predicciones se han realizado solo sobre el conjunto de test, dando como resultado una precisión del 95%.

Jupyter Notebook

Fuentes

Deja un comentario