Clustering (Práctica)
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.
- Ganan mucho y gastan poco.
- Ingresos medios pero gastan poco.
- Ingresos medios y gastos mayores.
- 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