La clase PCA de Scikit-Learn

La librería Scikit-Learn implementa este algoritmo en la clase PCA. Apliquémosla al dataset Wine. Comencemos cargando los datos:

from sklearn.datasets import load_wine
wine = load_wine()
data = pd.DataFrame(data = wine.data, columns = wine.feature_names)
data.rename({
    "nonflavanoid_phenols": "nonflavanoid",
    "od280/od315_of_diluted_wines": "od280/od315"
}, axis = 1, inplace = True)
data["label"] = wine.target
X = data.drop("label", axis = 1)
y = data.label

Obsérvese que estamos incluyendo las tres clases del dataset original.

Y escalémoslos para evitar que el algoritmo PCA dé una importancia excesiva a aquellas características con una escala mayor:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

Ahora podemos importar la clase PCA:

from sklearn.decomposition import PCA

Al instanciar la clase podemos especificar el número de componentes principales a extraer asignándolo al parámetro n_components. Si este valor, en lugar de ser un número entero, es un valor decimal entre 0 y 1, estaríamos indicando el porcentaje mínimo de la varianza en las características principales a ser explicado por los componentes principales a extraer.

Por ejemplo, si quisiéramos extraer los componentes principales necesarios para explicar el 90% de la varianza en las características originales, tendríamos que instanciar la clase así:

pca = PCA(n_components = 0.9)

A continuación, ya podemos transformar los datos originales:

X_pca = pca.fit_transform(X_scaled)

Veamos el tamaño del array:

X_pca.shape
(130, 8)

Con 8 componentes principales (8 características) explicamos, al menos, el 90% de la varianza.