La librería Scikit-Learn implementa este algoritmo en la clase PCA. Apliquémosla al dataset Wine. Comencemos cargando los datos:
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:
X_scaled = scaler.fit_transform(X)
Ahora podemos importar la clase 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í:
A continuación, ya podemos transformar los datos originales:
Veamos el tamaño del array:
Con 8 componentes principales (8 características) explicamos, al menos, el 90% de la varianza.