Menu
CoddyTech

PCA

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 26 de 51.

PCA encuentra la dirección de mayor dispersión, después la mejor dirección en ángulo recto con ella, y así sucesivamente: los componentes. En los gemelos de vino:

Los gemelos de vino escalados como una nube que se eleva hacia la derecha, con dos flechas rojas desde el centro: una larga, componente 1, a lo largo de la nube, y una corta, componente 2, a través de ella

Las proyecciones de cada fila sobre los primeros componentes se convierten en sus nuevas características:

from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)

Para las 13 mediciones de vino, esto imprime (178, 13) (178, 2).

Estandariza primero. El PCA busca la dispersión, así que una característica con unidades grandes, como la prolina en cientos, gana solo por su tamaño:

Dos mapas de PCA de los 178 vinos. Izquierda, sin escalar: los tres cultivares se superponen en una sola mancha. Derecha, tras escalar primero: tres grupos claros

challenge icon

Desafío

Intermedio

Un laboratorio de agua analiza botellas de tres manantiales, con 8 mediciones cada una. ¿Puede un mapa 2D distinguir los manantiales? draw_springs(ax, points) colorea los puntos 2D según el manantial.

  1. Escala X y después redúcela a 2 componentes con PCA, en points.
  2. Imprime el número de características antes y después.
  3. Dibuja los puntos con draw_springs y muestra el resultado.

Para otro laboratorio, con 6 mediciones:

From 6 features to 2

Un gráfico titulado Aguas de manantial en 2D, con el primer componente en el eje horizontal y el segundo en el vertical: las botellas alpinas abajo a la izquierda, las volcánicas abajo a la derecha y las costeras arriba, con una leyenda

Coddy describe tu mapa.

Pruébalo tú mismo

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Un laboratorio de análisis de agua: 8 mediciones de cada una de las 120 botellas procedentes de tres manantiales
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# Dibuja puntos 2D, agrupados por manantial, con una leyenda
def draw_springs(ax, points):
    for spring in ["alpine", "volcanic", "coastal"]:
        rows = (waters["spring"] == spring).to_numpy()
        ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online