No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aplicando PCA para clustering

20/27
Recursos

Aportes 5

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Dándole un poco mas de contexto a la imagen:

cum_var = np.cumsum(np.round(var, decimals=4)*100)
components = list(range(0,9))
plt.figure(figsize=(5,5))
for s,d in zip(components,cum_var):
    plt.annotate(np.round(d,decimals=2), xy=(s,d-2.5))

plt.plot(components,cum_var, 'r-x')
plt.title("PCA Decomposition")
plt.xlabel('PCA components')
plt.ylabel('% Variance')

Si desea obtener la cantidad de componentes necesarias para una determinada varianza usé el siguiente código:

  • Quiero obtener la cantidad de componentes que expliquen una varianza del 85%.
pcs_needed = np.where(np.cumsum(pca.explained_variance_ratio_) >=.85)[0][0]
print("PC's are needed to explain 85% of the variance for data: ", pcs_needed)
[Output]
"PC's are needed to explain 85% of the variance for data:  3"

Yo termine mirando un poco mas claro el PCA gracias a la diferenciación con el SVD, mientras que en el SVD se busca descomponer en valores singulares, y su nombre lo dice singular que es lo contrario a plural donde gracias a las cualidades singulares de los valores buscamos los menos posibles que nos reflejen la mayor información posible, mientras en el PCA se busca encontrar esas pocas o única dimensione(s) que gracias a sus valores pluralmente nos den la mayor información posible sin perder variabilidad!

from sklearn.decomposition import PCA
from sklearn.decomposition import IncrementalPCA
import plotly.graph_objects as go
import plotly.express as px

n = 6

principal_components = {
    'PCA': PCA(n_components=n),
    'IncrementalPCA': IncrementalPCA(n_components=n, batch_size=10)
}

fig = go.Figure()

for name, principal_component in principal_components.items():
    principal_component.fit(df_country_scaled)

    cum_var = np.cumsum(np.round(pca.explained_variance_ratio_, decimals=4)*100) 

    # Aqui anexamos a la misma figura cada trazo
    fig.add_trace(go.Scatter(
        x=list(range(1, len(principal_component.explained_variance_) + 1)),
        y=cum_var,
        name=name,
        mode='lines+markers',
    ))

    # Aqui verificamos que varianza de datos esta agrupando el metodo usado para nuestros features
    components = principal_component.fit_transform(df_country_scaled)

    total_var = principal_component.explained_variance_ratio_.sum() * 100
    print(f"Total Explained Variance: {total_var:.2f}%, para {n} componentes con {name}")

# Aqui ejecutamos el plot de nuestra grafica
fig.update_layout(showlegend=True)

fig.show()