Tu primer clustering con scikit-learn

2/27
Recursos

Aportes 12

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Hola
Les comparto una manera de graficar los clusters un poco mas sencilla.

Hola, no me queria funcionar el codigo en la linea

fig, ax = plt.subplots(1,1, figsize=(15,10))

Si alguien tiene ese mismo error, mi solucion fue importar subplots

from matplotlib.pyplot import subplots

Y luego eliminar 鈥減lt鈥 de la linea de codigo.

fig, ax = subplots(1,1, figsize=(15,10))

Espero le sirva a alguien

Machine Learning: all谩 voy 馃殌馃敟

Template para plotly que colocaremos en un notebook en el mismo directorio

import plotly.graph_objects as go
import plotly.io as pio

pio.templates['new_template'] = go.layout.Template()
pio.templates['new_template']['layout']['font'] = {'family': 'verdana', 'size': 16, 'color': 'white'}
pio.templates['new_template']['layout']['paper_bgcolor'] = 'black'
pio.templates['new_template']['layout']['plot_bgcolor'] = 'black'
pio.templates['new_template']['layout']['xaxis'] = {'title_standoff': 10, 'linecolor': 'black', 'mirror': True, 'gridcolor': '#EEEEEE'}
pio.templates['new_template']['layout']['yaxis'] = {'title_standoff': 10, 'linecolor': 'black', 'mirror': True, 'gridcolor': '#EEEEEE'}
pio.templates['new_template']['layout']['legend_bgcolor'] = 'rgb(117, 112, 179)'
pio.templates['new_template']['layout']['height'] = 700
pio.templates['new_template']['layout']['width'] = 1000
pio.templates['new_template']['layout']['autosize'] = False

pio.templates.default = 'new_template'

Ejecutamos con funciones magicas el notebook del template

%run "template_visualitation.ipynb"

Funcion para visualizar los scatter plot con plotlly

import plotly.graph_objects as go
import plotly.express as px


def graficar_clusters_plotly(x,y, color, show=True):
    global fig1
    fig1 = go.Figure()
    y_uniques = pd.Series(y).unique()

    for _ in y_uniques:
        fig1.add_traces(data=px.scatter(x=x[y==_][:,0], y=x[y==_][:,1],opacity=0.8, color_discrete_sequence=[color[_]]).data)

    fig1.update_layout(showlegend=True)
    fig1.show()

Ejecutamos nuestra funcion

graficar_clusters_plotly(x,y, ['red', 'blue', 'green', 'white'])

Eliminar o comentar la linea del notebook que contiene el siguiente codigo, no afecta la clusterizacion con KMeans:

x, y = df_blobls[['x1','x2']], df_blobls['y']

Agregamos un color ya que ahora tenemos 5 centroides

graficar_clusters_plotly(x,y_pred, ['red', 'blue', 'green', 'white', 'yellow'])

Otra forma de graficar los clusters:

plt.figure(figsize=(6,6))
def plot_blobs(x, y, ax, cmap='viridis'):
    labels = np.unique(y)
    cmap_ = plt.get_cmap(cmap, lut=len(labels))
    for label in labels:
        sub_idx = np.argwhere(y == label).ravel()
        sub_x = x[sub_idx]
        sub_y = y[sub_idx]
        ax.scatter(sub_x[:,0], sub_x[:,1], color=cmap_(label), label=label)

plot_blobs(x,y, plt.gca(), cmap='Dark2')
plt.legend()
plt.show()
Hola a todos. les comparto mi aporte.![](https://github.com/philip040404/Aprendizaje_platzi/blob/fed0b56374bf16242502ee35420db7407246ba42/Machine%20learning/Material/Datasets/Captura%20de%20pantalla%202024-01-04%20162956.png) ![](https://github.com/philip040404/Aprendizaje_platzi/blob/fed0b56374bf16242502ee35420db7407246ba42/Machine%20learning/Material/Datasets/Captura%20de%20pantalla%202024-01-04%20162956.png)![](https://static.platzi.com/media/user_upload/image-ce2aa30b-0fc7-4a1c-a7cc-a5de237521cb.jpg)

A modo de aporte para ir m谩s all谩 de estos modelos b谩sicos que se ven. Les recomiendo revisar

  1. HDBSCAN: como saben DBSCAN es parametrico y requiere por ejemplo el valor de un valor epsilon. Este modelo trata de refinar y ayudarnos para evitar tratar de tunear dicho parametro
  2. Gaussian mixtures: Estos modelos b谩sicos tienen problemas para detectar datos anomalos. Este algoritmo permite deterctar datos anomalos, asignando una probabilidad a que cada dato pertenezca a una distribucion gaussina

This is a function definition for a function called plot_2d_clusters that takes in three arguments: x, y, and ax.

The function does the following:

It first creates a Pandas Series object from the y argument, and then uses the unique method of the Series to find the unique values in y. It stores the resulting array of unique values in the variable y_uniques.

It then enters a loop, in which it iterates over the unique values in y_uniques. On each iteration of the loop, the function plots the data points in x where the corresponding value in y is equal to the current unique value being iterated over.

The plot is created using the plot method of the DataFrame object x, which is passed the following arguments:

title: a string that is the title of the plot, which is constructed using string interpolation to insert the number of unique values in y into the string.
kind: the type of plot to create, which is set to 鈥榮catter鈥.
x: the name of the column in x to use as the x-axis data.
y: the name of the column in x to use as the y-axis data.
marker: a string that specifies the marker to use for the data points in the plot, which is constructed using string interpolation to insert the current unique value being iterated over into the string.
ax: the Matplotlib Axes object to use for the plot.
It鈥檚 worth noting that this function does not return anything, but instead creates a plot using the ax argument.

Para agilizar

import numpy as np
import pandas as pd
from sklearn.datasets import make_blobs
import seaborn as sns
import matplotlib.pyplot as plt

x, y = make_blobs(n_samples=100, centers=4, n_features=2, cluster_std=[1,1.5,2,2], random_state=7)

df_blobls = pd.DataFrame({
    'x1': x[:,0],
    'x2':x[:,1],
    'y':y

})

def plot_2d_clusters(x,y,ax):
    y_uniques = pd.Series(y).unique()

    for _ in y_uniques:
        x[y==_].plot(
            title=f'{len(y_uniques)} Clusters',
            kind='scatter',
            x='x1',
            y='x2',
            marker = f'${_}$',
            ax = ax
        )

fig, ax = plt.subplots(1,1, figsize=(15,10))
x, y = df_blobls[['x1','x2']], df_blobls['y']
plot_2d_clusters(x,y,ax)
plt.show()```
***<u>CLUSTERING </u>*** El clustering es una t茅cnica de aprendizaje no supervisado en el campo de la inteligencia artificial y el an谩lisis de datos. El objetivo principal del clustering es agrupar un conjunto de datos en subconjuntos o "clusters", donde los elementos dentro de cada grupo son m谩s similares entre s铆 que con aquellos en otros grupos. Los algoritmos de clustering buscan encontrar patrones intr铆nsecos en los datos sin necesidad de etiquetas previas. Algunos algoritmos de clustering comunes incluyen: 1. **K-Means:** * Divide el conjunto de datos en k grupos (clusters) bas谩ndose en la distancia entre los puntos y los centroides de los clusters. 2. **Hierarchical Clustering:** * Agrupa los datos en una jerarqu铆a de clusters, ya sea de manera aglomerativa (fusionando clusters en cada paso) o divisiva (dividiendo clusters en cada paso). 3. **DBSCAN (Density-Based Spatial Clustering of Applications with Noise):** * Identifica clusters bas谩ndose en la densidad de los puntos. Es especialmente 煤til para detectar clusters de formas irregulares y manejar ruido en los datos. 4. **Mean Shift:** * Busca los modos de densidad m谩xima en el espacio de caracter铆sticas para identificar los clusters. 5. **Gaussian Mixture Model (GMM):** * Modela el conjunto de datos como una mezcla de distribuciones gaussianas y asigna puntos a los clusters bas谩ndose en la probabilidad. 6. **Agglomerative Clustering:** * Un algoritmo jer谩rquico que comienza considerando cada punto como un cluster individual y fusiona clusters en cada paso hasta que todos los puntos pertenecen a un 煤nico cluster. La elecci贸n del algoritmo de clustering depende de la naturaleza de los datos y de los objetivos espec铆ficos del an谩lisis. El n煤mero de clusters (k) tambi茅n es un par谩metro importante y puede ser fijo o determinado autom谩ticamente por el algoritmo. El clustering se utiliza en una variedad de campos, incluyendo la segmentaci贸n de clientes, an谩lisis de documentos, gen贸mica, reconocimiento de patrones, entre otros.
Hola. Les comparto mi aporte, ```js g = sns.jointplot(data=df_blobls, x="x1", y="x2", hue='y') g.plot_joint(sns.kdeplot, color="r", zorder=0, levels=6) g.plot_marginals(sns.rugplot, color="r", height=-.15, clip_on=False) ```g = sns.jointplot(data=df\_blobls, x="x1", y="x2", hue='y')g.plot\_joint(sns.kdeplot, color="r", zorder=0, levels=6)g.plot\_marginals(sns.rugplot, color="r", height=-.15, clip\_on=False) ![]()

Comparto el codigo para mostarlo m谩s estetico!!

def plot_2d_clusters(x, y ,axe, title):
    y_uniques = pd.Series(y).unique()
    for y_unique in y_uniques:
        axe.scatter(x[y == y_unique, 0], x[y == y_unique, 1], label=y_unique)
        axe.set_title(title)
        axe.markers = [f"${y_unique}$"]
        axe.legend()