Artículo práctico uso de scikit-learn y aplicacion de k-means

Clustering

El clustering agrupa los datos que presentan ciertas semejanzas entre sus miembros es decir que esto se parezcan. También se busca que los datos que pertenecen a grupos diferentes tengan rasgos lo suficientemente diferentes entre sí.

El siguiente ejemplo plantea una gráfica que relaciona los gastos con las ganancias de ciertas personas, en el gráfico se puede observar diferentes rasgos que se plantean a continuación.

  1. Ganan mucho y gastan poco.
  2. Ingresos medios pero gastan poco.
  3. Ingresos medios y gastos mayores.
  4. Ganan y gastan mucho.

Condiciones:

● Los clusters deben ser identificados y de tamaño considerable.

● Los puntos de un mismo cluster deben ser compactos y tener interacción mínima con cualquier otro cluster.

● Los clusters pueden tener sentido desde el contexto de análisis. los puntos de un mismo cluster deben tener propiedades comunes en el contexto estudiado.

Las aplicaciones de este método son infinitas sin embargo a continuación se detallan algunas:

● Marketing digital.

● Taxonomía de los seres vivos.

● Detección del epicentro de terremotos.

● Imputar los valores desconocidos de un data set.

● Planificación urbana.

Código la lectura de la base de datos:

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv(“winequality-red.csv”, sep = “;”)

df.head()

Resultado:

Código para determinar LA CANTIDAD DE VINO:

#calidad del vino, nota asignada del somelier

plt.hist(df[“quality”])

Resultado:

Código para determinar el promedio en función de la calidad y normalización :

#promedio de las caracteristicas por calidad

#la volatilidad del acido, + volatil es el acido pero nota

#chlorides a maas pues peor

#+acido citrico+mejor la calidad

#densidad del vino pues parace que no hay tendencia

df.groupby(“quality”).mean()

Resultado:

Código de clustering jerárquico con scikit-learn:

from sklearn.cluster import AgglomerativeClustering

#metodo de enlace linkage

clus= AgglomerativeClustering(n_clusters=6, linkage=”ward”).fit(df_norm)

#para poner las etiquetas

md_h = pd.Series(clus.labels_)

md_h

#hay un cluster que les está dominando al resto

plt.hist(md_h)

plt.title(“Histograma de los clusters”)

plt.xlabel(“Cluster”)

plt.ylabel(“Número de vinos del cluster”)

from scipy.cluster.hierarchy import dendrogram, linkage

#usar el dataset normalizada y el metodo de ward para ahcer el enlace

Z = linkage(df_norm, “ward”)

plt.figure(figsize=(25,10))

plt.title(“Dendrograma de los vinos”)

plt.xlabel(“ID del vino”)

plt.ylabel(“Distancia”)

dendrogram(Z, leaf_rotation=90., leaf_font_size=4.)

plt.show()

#si cortamos al 4 podemos tener los 6 grupos

Resultados:

Código de clustering jerárquico con K-means:

#ahora con k-means

from sklearn.cluster import KMeans

from sklearn import datasets

#para graficarlas se necesitaria un grafico de 1000 dimensiones

#etiqueta a qué cluster pertenece

model.labels_

md_k = pd.Series(model.labels_)

#cluster jerarquico

#cluster k-means

df_norm[“clust_h”] = md_h

df_norm[“clust_k”] = md_k

#histograma con kmeans

#hay un elemento dominande, hay uno de poca importancia

plt.hist(md_k)

model.cluster_centers_

Resultados:

Código para interpolación final:

#caracteristicas del cluster

df_norm.groupby(“clust_k”).mean()

#los que se fian de la opinion del somelier entonces cluster 4

Resultado:

Autores:

  • Jean Pierre Von Lippke
  • Juan Valdez
  • Stefano Hurtado
  • Bryan Loarte

Código — Andrea Escobar

Conoce más:

Registrate en el programa de Python for Data Science.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store