No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Encontrando K

8/27
Recursos

Aportes 7

Preguntas 2

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

Aquí comparto un ejercicio con fines prácticos que hice para ver como se forma el codo y su respectiva silueta para cada 2 columnas de un total de 9 que tengo en mi dataset.

n = 2
total_columns = x.columns
combinations_n = list(combinations(total_columns,n))
i = 0
for combination in combinations_n:
    i +=1
    print('# iter: ',i)
    print(list(combination))
    x_n = x[list(combination)]
    sum_of_squared_distances = []
    silhouette_scores = []
    K = range(2,15)
    for k in K:
        km = KMeans(n_clusters=k)
        km = km.fit(x_n)
        sum_of_squared_distances.append(km.inertia_)

        km = KMeans(n_clusters=k)
        km = km.fit(x_n)
        y = km.predict(x_n)
        silhouette_scores.append(silhouette_score(x_n,y))


    plt.figure(figsize=(10,4))
    plt.subplot(121)
    plt.plot(K, sum_of_squared_distances, 'bx-')
    plt.xlabel('k')
    plt.ylabel('Inertia')
    plt.subplot(122)
    plt.plot(K, silhouette_scores, 'rx-')
    plt.xlabel('k')
    plt.ylabel('Silhouette')
    plt.show() 

Una forma de calcular la inercia:

from scipy.spatial import distance
np.sum(np.min(distance.cdist(X, model.cluster_centers_), axis=1) ** 2)
[out]: 1389.028049083292
model.inertia_
[out]: 1389.028049083292

Conoc√≠a la t√©cnica del codo, m√°s no la de silueta. Es bueno poder comparar ambos resultados ūüĎŹūüėé

INERCIA = Suma de errores cuadraticos o distancias cuadraticas Excelente clase :)
Comparto código más simple para el coeficiente de silueta: ```python silhouette_scores = [silhouette_score(X, KMeans(n_clusters=k).fit(X).labels_) for k in range(2,15)] plt.figure(figsize=(8,8)) plt.plot(K, silhouette_scores, 'bx-') plt.xlabel('k') plt.ylabel('silhouette_score') plt.show() ```
Compartir código más simple para el método del codo: ```python sum_of_squared_distances = [KMeans(n_clusters=k).fit(X).inertia_ for k in range(2, 15)] plt.figure(figsize=(8, 8)) plt.plot(range(2, 15), sum_of_squared_distances, 'bx-') plt.xlabel('k') plt.ylabel('Inertia') plt.show() ```