preloader

Reducción de dimensionalidad

Índice de contenido

La reducción de la dimensionalidad es una de las técnicas básicas de preprocesado de datos, que consiste en la reducción del número de variables.

Ventajas de la reducción de dimensiones

A priori, puede parecer que cuanta más información, mejor. Sin embargo, en la mayoría de los casos no es así. De hecho, hay varias razones por las que puede ser interesante tratar de reducir el número de dimensiones del conjunto de datos:

  • Se reduce la complejidad, con lo que el modelo y sus resultados se hacen más fácilmente interpretables.
  • Por razones de ahorro, tanto en coste como en tiempo. Reduciendo las dimensiones, se mejora el rendimiento computacional.
  • Se identifican y eliminan las variables irrelevantes, reduciendo el ruido del dataset original. Es importante tener en cuenta que, en ocasiones, el mejor modelo posible no es el que tiene en cuenta más variables, sino aquel que incluye únicamente la información “de calidad”. Aquí entra en juego la Maldición de la dimensionalidad.

¿Qué es la maldición de la dimensionalidad?

Normalmente, un modelo de Machine Learning requiere una información abundante al principio, con el fin de realizar predicciones más precisas. Sin embargo, llegado a cierto punto, el rendimiento del modelo disminuirá conforme aumente el número de variables. Este fenómeno es lo que se conoce como “maldición de la dimensionalidad”.

La maldición de la dimensionalidad tiene lugar porque, al aumentar el número de variables y mantenerse el mismo número de muestras, la densidad de la muestra disminuye exponencialmente, volviéndose cada vez más dispersa. A partir de una muestra dispersa, el modelo de Machine Learning posiblemente obtendrá una solución que, aparentemente, sea muy buena. Sin embargo, lo que estará sucediendo en realidad es que se habrá producido un sobreajuste.

Técnicas de reducción del número de variables

En líneas generales, se puede establecer la siguiente clasificación de técnicas de reducción del número de variables:

  • Selección de variables: filtro de baja varianza, pruebas estadísticas univariadas, eliminación de características de forma recursiva, bosques aleatorios, ratio de valores faltantes, filtro de alta correlación, etc.
  • Reducción de dimensionalidad:
    • Lineal: análisis factorial, análisis de componentes principales (PCA), análisis de discriminante lineal.
    • No lineal: escala multidimensional, mapeo de características isométricas, etc.

Técnicas de selección de variables

Filtro de baja varianza

Elimina las variables cuya varianza no alcanza un cierto umbral. De forma predeterminada, descarta todas las características de varianza cero, es decir, las características que tienen el mismo valor en todas las muestras.

python
from sklearn.feature_selection import VarianceThreshold
python
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
python
np.array(X)
array([[0, 0, 1],
       [0, 1, 0],
       [1, 0, 0],
       [0, 1, 1],
       [0, 1, 0],
       [0, 1, 1]])
python
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
python
sel_fit = sel.fit(X)
results = sel_fit.transform(X)
results
array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])
python
results = sel.fit(X).transform(X)
results
array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])
python
results = sel.fit_transform(X)
results
array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])

Selección de variables univariadas

Estas técnicas seleccionan las mejores variables basándose en pruebas estadísticas univariadas. Toman como entrada una función de puntuación que, en general, puede ser:

  • Para tareas de regresión: f_regression, mutual_info_regression
  • Para tareas de clasificación: chi2, f_classif, mutual_info_classif

SelectKBest

Elimina todo menos las k características con puntuaciones más altas.

python
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
python
X, y = load_iris(return_X_y=True)
X
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2],
       [5.4, 3.9, 1.7, 0.4],
       [4.6, 3.4, 1.4, 0.3],
       [5. , 3.4, 1.5, 0.2],
       [4.4, 2.9, 1.4, 0.2],
       [4.9, 3.1, 1.5, 0.1],
       [5.4, 3.7, 1.5, 0.2],
       [4.8, 3.4, 1.6, 0.2],
       [4.8, 3. , 1.4, 0.1],
       [4.3, 3. , 1.1, 0.1],
       [5.8, 4. , 1.2, 0.2],
       [5.7, 4.4, 1.5, 0.4],
       [5.4, 3.9, 1.3, 0.4],
       [5.1, 3.5, 1.4, 0.3],
       [5.7, 3.8, 1.7, 0.3],
       [5.1, 3.8, 1.5, 0.3],
       [5.4, 3.4, 1.7, 0.2],
       [5.1, 3.7, 1.5, 0.4],
       [4.6, 3.6, 1. , 0.2],
       [5.1, 3.3, 1.7, 0.5],
       [4.8, 3.4, 1.9, 0.2],
       [5. , 3. , 1.6, 0.2],
       [5. , 3.4, 1.6, 0.4],
       [5.2, 3.5, 1.5, 0.2],
       [5.2, 3.4, 1.4, 0.2],
       [4.7, 3.2, 1.6, 0.2],
       [4.8, 3.1, 1.6, 0.2],
       [5.4, 3.4, 1.5, 0.4],
       [5.2, 4.1, 1.5, 0.1],
       [5.5, 4.2, 1.4, 0.2],
       [4.9, 3.1, 1.5, 0.2],
       [5. , 3.2, 1.2, 0.2],
       [5.5, 3.5, 1.3, 0.2],
       [4.9, 3.6, 1.4, 0.1],
       [4.4, 3. , 1.3, 0.2],
       [5.1, 3.4, 1.5, 0.2],
       [5. , 3.5, 1.3, 0.3],
       [4.5, 2.3, 1.3, 0.3],
       [4.4, 3.2, 1.3, 0.2],
       [5. , 3.5, 1.6, 0.6],
       [5.1, 3.8, 1.9, 0.4],
       [4.8, 3. , 1.4, 0.3],
       [5.1, 3.8, 1.6, 0.2],
       [4.6, 3.2, 1.4, 0.2],
       [5.3, 3.7, 1.5, 0.2],
       [5. , 3.3, 1.4, 0.2],
       [7. , 3.2, 4.7, 1.4],
       [6.4, 3.2, 4.5, 1.5],
       [6.9, 3.1, 4.9, 1.5],
       [5.5, 2.3, 4. , 1.3],
       [6.5, 2.8, 4.6, 1.5],
       [5.7, 2.8, 4.5, 1.3],
       [6.3, 3.3, 4.7, 1.6],
       [4.9, 2.4, 3.3, 1. ],
       [6.6, 2.9, 4.6, 1.3],
       [5.2, 2.7, 3.9, 1.4],
       [5. , 2. , 3.5, 1. ],
       [5.9, 3. , 4.2, 1.5],
       [6. , 2.2, 4. , 1. ],
       [6.1, 2.9, 4.7, 1.4],
       [5.6, 2.9, 3.6, 1.3],
       [6.7, 3.1, 4.4, 1.4],
       [5.6, 3. , 4.5, 1.5],
       [5.8, 2.7, 4.1, 1. ],
       [6.2, 2.2, 4.5, 1.5],
       [5.6, 2.5, 3.9, 1.1],
       [5.9, 3.2, 4.8, 1.8],
       [6.1, 2.8, 4. , 1.3],
       [6.3, 2.5, 4.9, 1.5],
       [6.1, 2.8, 4.7, 1.2],
       [6.4, 2.9, 4.3, 1.3],
       [6.6, 3. , 4.4, 1.4],
       [6.8, 2.8, 4.8, 1.4],
       [6.7, 3. , 5. , 1.7],
       [6. , 2.9, 4.5, 1.5],
       [5.7, 2.6, 3.5, 1. ],
       [5.5, 2.4, 3.8, 1.1],
       [5.5, 2.4, 3.7, 1. ],
       [5.8, 2.7, 3.9, 1.2],
       [6. , 2.7, 5.1, 1.6],
       [5.4, 3. , 4.5, 1.5],
       [6. , 3.4, 4.5, 1.6],
       [6.7, 3.1, 4.7, 1.5],
       [6.3, 2.3, 4.4, 1.3],
       [5.6, 3. , 4.1, 1.3],
       [5.5, 2.5, 4. , 1.3],
       [5.5, 2.6, 4.4, 1.2],
       [6.1, 3. , 4.6, 1.4],
       [5.8, 2.6, 4. , 1.2],
       [5. , 2.3, 3.3, 1. ],
       [5.6, 2.7, 4.2, 1.3],
       [5.7, 3. , 4.2, 1.2],
       [5.7, 2.9, 4.2, 1.3],
       [6.2, 2.9, 4.3, 1.3],
       [5.1, 2.5, 3. , 1.1],
       [5.7, 2.8, 4.1, 1.3],
       [6.3, 3.3, 6. , 2.5],
       [5.8, 2.7, 5.1, 1.9],
       [7.1, 3. , 5.9, 2.1],
       [6.3, 2.9, 5.6, 1.8],
       [6.5, 3. , 5.8, 2.2],
       [7.6, 3. , 6.6, 2.1],
       [4.9, 2.5, 4.5, 1.7],
       [7.3, 2.9, 6.3, 1.8],
       [6.7, 2.5, 5.8, 1.8],
       [7.2, 3.6, 6.1, 2.5],
       [6.5, 3.2, 5.1, 2. ],
       [6.4, 2.7, 5.3, 1.9],
       [6.8, 3. , 5.5, 2.1],
       [5.7, 2.5, 5. , 2. ],
       [5.8, 2.8, 5.1, 2.4],
       [6.4, 3.2, 5.3, 2.3],
       [6.5, 3. , 5.5, 1.8],
       [7.7, 3.8, 6.7, 2.2],
       [7.7, 2.6, 6.9, 2.3],
       [6. , 2.2, 5. , 1.5],
       [6.9, 3.2, 5.7, 2.3],
       [5.6, 2.8, 4.9, 2. ],
       [7.7, 2.8, 6.7, 2. ],
       [6.3, 2.7, 4.9, 1.8],
       [6.7, 3.3, 5.7, 2.1],
       [7.2, 3.2, 6. , 1.8],
       [6.2, 2.8, 4.8, 1.8],
       [6.1, 3. , 4.9, 1.8],
       [6.4, 2.8, 5.6, 2.1],
       [7.2, 3. , 5.8, 1.6],
       [7.4, 2.8, 6.1, 1.9],
       [7.9, 3.8, 6.4, 2. ],
       [6.4, 2.8, 5.6, 2.2],
       [6.3, 2.8, 5.1, 1.5],
       [6.1, 2.6, 5.6, 1.4],
       [7.7, 3. , 6.1, 2.3],
       [6.3, 3.4, 5.6, 2.4],
       [6.4, 3.1, 5.5, 1.8],
       [6. , 3. , 4.8, 1.8],
       [6.9, 3.1, 5.4, 2.1],
       [6.7, 3.1, 5.6, 2.4],
       [6.9, 3.1, 5.1, 2.3],
       [5.8, 2.7, 5.1, 1.9],
       [6.8, 3.2, 5.9, 2.3],
       [6.7, 3.3, 5.7, 2.5],
       [6.7, 3. , 5.2, 2.3],
       [6.3, 2.5, 5. , 1.9],
       [6.5, 3. , 5.2, 2. ],
       [6.2, 3.4, 5.4, 2.3],
       [5.9, 3. , 5.1, 1.8]])
python
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
X_new
array([[1.4, 0.2],
       [1.4, 0.2],
       [1.3, 0.2],
       [1.5, 0.2],
       [1.4, 0.2],
       [1.7, 0.4],
       [1.4, 0.3],
       [1.5, 0.2],
       [1.4, 0.2],
       [1.5, 0.1],
       [1.5, 0.2],
       [1.6, 0.2],
       [1.4, 0.1],
       [1.1, 0.1],
       [1.2, 0.2],
       [1.5, 0.4],
       [1.3, 0.4],
       [1.4, 0.3],
       [1.7, 0.3],
       [1.5, 0.3],
       [1.7, 0.2],
       [1.5, 0.4],
       [1. , 0.2],
       [1.7, 0.5],
       [1.9, 0.2],
       [1.6, 0.2],
       [1.6, 0.4],
       [1.5, 0.2],
       [1.4, 0.2],
       [1.6, 0.2],
       [1.6, 0.2],
       [1.5, 0.4],
       [1.5, 0.1],
       [1.4, 0.2],
       [1.5, 0.2],
       [1.2, 0.2],
       [1.3, 0.2],
       [1.4, 0.1],
       [1.3, 0.2],
       [1.5, 0.2],
       [1.3, 0.3],
       [1.3, 0.3],
       [1.3, 0.2],
       [1.6, 0.6],
       [1.9, 0.4],
       [1.4, 0.3],
       [1.6, 0.2],
       [1.4, 0.2],
       [1.5, 0.2],
       [1.4, 0.2],
       [4.7, 1.4],
       [4.5, 1.5],
       [4.9, 1.5],
       [4. , 1.3],
       [4.6, 1.5],
       [4.5, 1.3],
       [4.7, 1.6],
       [3.3, 1. ],
       [4.6, 1.3],
       [3.9, 1.4],
       [3.5, 1. ],
       [4.2, 1.5],
       [4. , 1. ],
       [4.7, 1.4],
       [3.6, 1.3],
       [4.4, 1.4],
       [4.5, 1.5],
       [4.1, 1. ],
       [4.5, 1.5],
       [3.9, 1.1],
       [4.8, 1.8],
       [4. , 1.3],
       [4.9, 1.5],
       [4.7, 1.2],
       [4.3, 1.3],
       [4.4, 1.4],
       [4.8, 1.4],
       [5. , 1.7],
       [4.5, 1.5],
       [3.5, 1. ],
       [3.8, 1.1],
       [3.7, 1. ],
       [3.9, 1.2],
       [5.1, 1.6],
       [4.5, 1.5],
       [4.5, 1.6],
       [4.7, 1.5],
       [4.4, 1.3],
       [4.1, 1.3],
       [4. , 1.3],
       [4.4, 1.2],
       [4.6, 1.4],
       [4. , 1.2],
       [3.3, 1. ],
       [4.2, 1.3],
       [4.2, 1.2],
       [4.2, 1.3],
       [4.3, 1.3],
       [3. , 1.1],
       [4.1, 1.3],
       [6. , 2.5],
       [5.1, 1.9],
       [5.9, 2.1],
       [5.6, 1.8],
       [5.8, 2.2],
       [6.6, 2.1],
       [4.5, 1.7],
       [6.3, 1.8],
       [5.8, 1.8],
       [6.1, 2.5],
       [5.1, 2. ],
       [5.3, 1.9],
       [5.5, 2.1],
       [5. , 2. ],
       [5.1, 2.4],
       [5.3, 2.3],
       [5.5, 1.8],
       [6.7, 2.2],
       [6.9, 2.3],
       [5. , 1.5],
       [5.7, 2.3],
       [4.9, 2. ],
       [6.7, 2. ],
       [4.9, 1.8],
       [5.7, 2.1],
       [6. , 1.8],
       [4.8, 1.8],
       [4.9, 1.8],
       [5.6, 2.1],
       [5.8, 1.6],
       [6.1, 1.9],
       [6.4, 2. ],
       [5.6, 2.2],
       [5.1, 1.5],
       [5.6, 1.4],
       [6.1, 2.3],
       [5.6, 2.4],
       [5.5, 1.8],
       [4.8, 1.8],
       [5.4, 2.1],
       [5.6, 2.4],
       [5.1, 2.3],
       [5.1, 1.9],
       [5.9, 2.3],
       [5.7, 2.5],
       [5.2, 2.3],
       [5. , 1.9],
       [5.2, 2. ],
       [5.4, 2.3],
       [5.1, 1.8]])

SelectPercentile

Elimina todas las características excepto el porcentaje de variables (especificado por el usuario) que tengan puntuación más alta.

python
from sklearn.datasets import load_digits
python
from sklearn.feature_selection import SelectPercentile, chi2
python
X, y = load_digits(return_X_y=True)
python
X.shape
(1797, 64)
python
X_new = SelectPercentile(chi2, percentile=10).fit_transform(X, y)
X_new
array([[ 8.,  5.,  8., ...,  0.,  0.,  0.],
       [ 0.,  0.,  1., ..., 16.,  0.,  0.],
       [ 0.,  1.,  8., ..., 16.,  5.,  9.],
       ...,
       [ 0.,  0.,  9., ..., 14.,  0.,  0.],
       [ 4.,  0.,  5., ...,  0.,  2.,  0.],
       [ 0.,  0., 12., ...,  6.,  8.,  1.]])
python
X_new.shape
(1797, 7)

SelectFpr

Tasa de falsos positivos.

SelectFdr

Tasa de descubrimiento falso.

SelectFwe

Error familiar.

GenericUnivariateSelect

Realiza una selección de características univariadas con una estrategia configurable.

python
from sklearn.datasets import load_breast_cancer
python
from sklearn.feature_selection import GenericUnivariateSelect, chi2
python
X, y = load_breast_cancer(return_X_y=True)
python
X.shape
(569, 30)
python
transformer = GenericUnivariateSelect(chi2, mode='k_best', param=20)
python
X_new = transformer.fit_transform(X, y)
X_new.shape
(569, 20)

Nota Si los datos son dispersos (sparse), las funciones chi2, mutual_info_regression y mutual_info_classif responderán bien.

Eliminación de características de forma recursiva

Esta técnica consiste en seleccionar grupos de características cada vez más pequeños. Primero, se entrena un estimador con todas las variables y se obtiene la importancia de cada una de ellas. Después, las menos importantes se eliminan y se vuelve a repetir el procedimiento hasta que se alcanza el número deseado de variables finales.

Selección de características basadas en árboles

Los árboles de decisión se pueden utilizar para calcular la importancia de las variables, por lo que se pueden usar para descartar variables irrelevantes (combinando el estimador basado en árboles de decisión con el método SelectFromModel de Scikit Learn, por ejemplo.

Técnicas de reducción de dimensionalidad

Análisis de componentes principales (PCA)

python
from sklearn import datasets
from sklearn.decomposition import PCA
python
X, y = datasets.load_iris(return_X_y=True)
python
X
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2],
       [5.4, 3.9, 1.7, 0.4],
       [4.6, 3.4, 1.4, 0.3],
       [5. , 3.4, 1.5, 0.2],
       [4.4, 2.9, 1.4, 0.2],
       [4.9, 3.1, 1.5, 0.1],
       [5.4, 3.7, 1.5, 0.2],
       [4.8, 3.4, 1.6, 0.2],
       [4.8, 3. , 1.4, 0.1],
       [4.3, 3. , 1.1, 0.1],
       [5.8, 4. , 1.2, 0.2],
       [5.7, 4.4, 1.5, 0.4],
       [5.4, 3.9, 1.3, 0.4],
       [5.1, 3.5, 1.4, 0.3],
       [5.7, 3.8, 1.7, 0.3],
       [5.1, 3.8, 1.5, 0.3],
       [5.4, 3.4, 1.7, 0.2],
       [5.1, 3.7, 1.5, 0.4],
       [4.6, 3.6, 1. , 0.2],
       [5.1, 3.3, 1.7, 0.5],
       [4.8, 3.4, 1.9, 0.2],
       [5. , 3. , 1.6, 0.2],
       [5. , 3.4, 1.6, 0.4],
       [5.2, 3.5, 1.5, 0.2],
       [5.2, 3.4, 1.4, 0.2],
       [4.7, 3.2, 1.6, 0.2],
       [4.8, 3.1, 1.6, 0.2],
       [5.4, 3.4, 1.5, 0.4],
       [5.2, 4.1, 1.5, 0.1],
       [5.5, 4.2, 1.4, 0.2],
       [4.9, 3.1, 1.5, 0.2],
       [5. , 3.2, 1.2, 0.2],
       [5.5, 3.5, 1.3, 0.2],
       [4.9, 3.6, 1.4, 0.1],
       [4.4, 3. , 1.3, 0.2],
       [5.1, 3.4, 1.5, 0.2],
       [5. , 3.5, 1.3, 0.3],
       [4.5, 2.3, 1.3, 0.3],
       [4.4, 3.2, 1.3, 0.2],
       [5. , 3.5, 1.6, 0.6],
       [5.1, 3.8, 1.9, 0.4],
       [4.8, 3. , 1.4, 0.3],
       [5.1, 3.8, 1.6, 0.2],
       [4.6, 3.2, 1.4, 0.2],
       [5.3, 3.7, 1.5, 0.2],
       [5. , 3.3, 1.4, 0.2],
       [7. , 3.2, 4.7, 1.4],
       [6.4, 3.2, 4.5, 1.5],
       [6.9, 3.1, 4.9, 1.5],
       [5.5, 2.3, 4. , 1.3],
       [6.5, 2.8, 4.6, 1.5],
       [5.7, 2.8, 4.5, 1.3],
       [6.3, 3.3, 4.7, 1.6],
       [4.9, 2.4, 3.3, 1. ],
       [6.6, 2.9, 4.6, 1.3],
       [5.2, 2.7, 3.9, 1.4],
       [5. , 2. , 3.5, 1. ],
       [5.9, 3. , 4.2, 1.5],
       [6. , 2.2, 4. , 1. ],
       [6.1, 2.9, 4.7, 1.4],
       [5.6, 2.9, 3.6, 1.3],
       [6.7, 3.1, 4.4, 1.4],
       [5.6, 3. , 4.5, 1.5],
       [5.8, 2.7, 4.1, 1. ],
       [6.2, 2.2, 4.5, 1.5],
       [5.6, 2.5, 3.9, 1.1],
       [5.9, 3.2, 4.8, 1.8],
       [6.1, 2.8, 4. , 1.3],
       [6.3, 2.5, 4.9, 1.5],
       [6.1, 2.8, 4.7, 1.2],
       [6.4, 2.9, 4.3, 1.3],
       [6.6, 3. , 4.4, 1.4],
       [6.8, 2.8, 4.8, 1.4],
       [6.7, 3. , 5. , 1.7],
       [6. , 2.9, 4.5, 1.5],
       [5.7, 2.6, 3.5, 1. ],
       [5.5, 2.4, 3.8, 1.1],
       [5.5, 2.4, 3.7, 1. ],
       [5.8, 2.7, 3.9, 1.2],
       [6. , 2.7, 5.1, 1.6],
       [5.4, 3. , 4.5, 1.5],
       [6. , 3.4, 4.5, 1.6],
       [6.7, 3.1, 4.7, 1.5],
       [6.3, 2.3, 4.4, 1.3],
       [5.6, 3. , 4.1, 1.3],
       [5.5, 2.5, 4. , 1.3],
       [5.5, 2.6, 4.4, 1.2],
       [6.1, 3. , 4.6, 1.4],
       [5.8, 2.6, 4. , 1.2],
       [5. , 2.3, 3.3, 1. ],
       [5.6, 2.7, 4.2, 1.3],
       [5.7, 3. , 4.2, 1.2],
       [5.7, 2.9, 4.2, 1.3],
       [6.2, 2.9, 4.3, 1.3],
       [5.1, 2.5, 3. , 1.1],
       [5.7, 2.8, 4.1, 1.3],
       [6.3, 3.3, 6. , 2.5],
       [5.8, 2.7, 5.1, 1.9],
       [7.1, 3. , 5.9, 2.1],
       [6.3, 2.9, 5.6, 1.8],
       [6.5, 3. , 5.8, 2.2],
       [7.6, 3. , 6.6, 2.1],
       [4.9, 2.5, 4.5, 1.7],
       [7.3, 2.9, 6.3, 1.8],
       [6.7, 2.5, 5.8, 1.8],
       [7.2, 3.6, 6.1, 2.5],
       [6.5, 3.2, 5.1, 2. ],
       [6.4, 2.7, 5.3, 1.9],
       [6.8, 3. , 5.5, 2.1],
       [5.7, 2.5, 5. , 2. ],
       [5.8, 2.8, 5.1, 2.4],
       [6.4, 3.2, 5.3, 2.3],
       [6.5, 3. , 5.5, 1.8],
       [7.7, 3.8, 6.7, 2.2],
       [7.7, 2.6, 6.9, 2.3],
       [6. , 2.2, 5. , 1.5],
       [6.9, 3.2, 5.7, 2.3],
       [5.6, 2.8, 4.9, 2. ],
       [7.7, 2.8, 6.7, 2. ],
       [6.3, 2.7, 4.9, 1.8],
       [6.7, 3.3, 5.7, 2.1],
       [7.2, 3.2, 6. , 1.8],
       [6.2, 2.8, 4.8, 1.8],
       [6.1, 3. , 4.9, 1.8],
       [6.4, 2.8, 5.6, 2.1],
       [7.2, 3. , 5.8, 1.6],
       [7.4, 2.8, 6.1, 1.9],
       [7.9, 3.8, 6.4, 2. ],
       [6.4, 2.8, 5.6, 2.2],
       [6.3, 2.8, 5.1, 1.5],
       [6.1, 2.6, 5.6, 1.4],
       [7.7, 3. , 6.1, 2.3],
       [6.3, 3.4, 5.6, 2.4],
       [6.4, 3.1, 5.5, 1.8],
       [6. , 3. , 4.8, 1.8],
       [6.9, 3.1, 5.4, 2.1],
       [6.7, 3.1, 5.6, 2.4],
       [6.9, 3.1, 5.1, 2.3],
       [5.8, 2.7, 5.1, 1.9],
       [6.8, 3.2, 5.9, 2.3],
       [6.7, 3.3, 5.7, 2.5],
       [6.7, 3. , 5.2, 2.3],
       [6.3, 2.5, 5. , 1.9],
       [6.5, 3. , 5.2, 2. ],
       [6.2, 3.4, 5.4, 2.3],
       [5.9, 3. , 5.1, 1.8]])
python
pca = PCA(n_components=3, random_state=10)
python
pca.fit(X)
PCA(n_components=3, random_state=10)
python
pca.components_
array([[ 0.36138659, -0.08452251,  0.85667061,  0.3582892 ],
       [ 0.65658877,  0.73016143, -0.17337266, -0.07548102],
       [-0.58202985,  0.59791083,  0.07623608,  0.54583143]])
python
pca.explained_variance_
array([4.22824171, 0.24267075, 0.0782095 ])
python
pca.explained_variance_ratio_
array([0.92461872, 0.05306648, 0.01710261])
python
pca.singular_values_
array([25.09996044,  6.01314738,  3.41368064])
python
pca.n_features_
4
python
pca.n_components_
3
python
X = pca.transform(X)
python
X
array([[-2.68412563,  0.31939725, -0.02791483],
       [-2.71414169, -0.17700123, -0.21046427],
       [-2.88899057, -0.14494943,  0.01790026],
       [-2.74534286, -0.31829898,  0.03155937],
       [-2.72871654,  0.32675451,  0.09007924],
       [-2.28085963,  0.74133045,  0.16867766],
       [-2.82053775, -0.08946138,  0.25789216],
       [-2.62614497,  0.16338496, -0.02187932],
       [-2.88638273, -0.57831175,  0.02075957],
       [-2.6727558 , -0.11377425, -0.19763272],
       [-2.50694709,  0.6450689 , -0.07531801],
       [-2.61275523,  0.01472994,  0.10215026],
       [-2.78610927, -0.235112  , -0.20684443],
       [-3.22380374, -0.51139459,  0.06129967],
       [-2.64475039,  1.17876464, -0.15162752],
       [-2.38603903,  1.33806233,  0.2777769 ],
       [-2.62352788,  0.81067951,  0.13818323],
       [-2.64829671,  0.31184914,  0.02666832],
       [-2.19982032,  0.87283904, -0.12030552],
       [-2.5879864 ,  0.51356031,  0.21366517],
       [-2.31025622,  0.39134594, -0.23944404],
       [-2.54370523,  0.43299606,  0.20845723],
       [-3.21593942,  0.13346807,  0.29239675],
       [-2.30273318,  0.09870885,  0.03912326],
       [-2.35575405, -0.03728186,  0.12502108],
       [-2.50666891, -0.14601688, -0.25342004],
       [-2.46882007,  0.13095149,  0.09491058],
       [-2.56231991,  0.36771886, -0.07849421],
       [-2.63953472,  0.31203998, -0.1459089 ],
       [-2.63198939, -0.19696122,  0.04077108],
       [-2.58739848, -0.20431849, -0.07722299],
       [-2.4099325 ,  0.41092426, -0.14552497],
       [-2.64886233,  0.81336382,  0.22566915],
       [-2.59873675,  1.09314576,  0.15781081],
       [-2.63692688, -0.12132235, -0.14304958],
       [-2.86624165,  0.06936447, -0.16433231],
       [-2.62523805,  0.59937002, -0.26835038],
       [-2.80068412,  0.26864374,  0.09369908],
       [-2.98050204, -0.48795834,  0.07292705],
       [-2.59000631,  0.22904384, -0.0800823 ],
       [-2.77010243,  0.26352753,  0.07724769],
       [-2.84936871, -0.94096057, -0.34923038],
       [-2.99740655, -0.34192606,  0.19250921],
       [-2.40561449,  0.18887143,  0.26386795],
       [-2.20948924,  0.43666314,  0.29874275],
       [-2.71445143, -0.2502082 , -0.09767814],
       [-2.53814826,  0.50377114,  0.16670564],
       [-2.83946217, -0.22794557,  0.08372685],
       [-2.54308575,  0.57941002, -0.01711502],
       [-2.70335978,  0.10770608, -0.08929401],
       [ 1.28482569,  0.68516047, -0.40656803],
       [ 0.93248853,  0.31833364, -0.01801419],
       [ 1.46430232,  0.50426282, -0.33832576],
       [ 0.18331772, -0.82795901, -0.17959139],
       [ 1.08810326,  0.07459068, -0.3077579 ],
       [ 0.64166908, -0.41824687,  0.04107609],
       [ 1.09506066,  0.28346827,  0.16981024],
       [-0.74912267, -1.00489096,  0.01230292],
       [ 1.04413183,  0.2283619 , -0.41533608],
       [-0.0087454 , -0.72308191,  0.28114143],
       [-0.50784088, -1.26597119, -0.26981718],
       [ 0.51169856, -0.10398124,  0.13054775],
       [ 0.26497651, -0.55003646, -0.69414683],
       [ 0.98493451, -0.12481785, -0.06211441],
       [-0.17392537, -0.25485421,  0.09045769],
       [ 0.92786078,  0.46717949, -0.31462098],
       [ 0.66028376, -0.35296967,  0.32802753],
       [ 0.23610499, -0.33361077, -0.27116184],
       [ 0.94473373, -0.54314555, -0.49951905],
       [ 0.04522698, -0.58383438, -0.2350021 ],
       [ 1.11628318, -0.08461685,  0.45962099],
       [ 0.35788842, -0.06892503, -0.22985389],
       [ 1.29818388, -0.32778731, -0.34785435],
       [ 0.92172892, -0.18273779, -0.23107178],
       [ 0.71485333,  0.14905594, -0.32180094],
       [ 0.90017437,  0.32850447, -0.31620907],
       [ 1.33202444,  0.24444088, -0.52170278],
       [ 1.55780216,  0.26749545, -0.16492098],
       [ 0.81329065, -0.1633503 ,  0.0354245 ],
       [-0.30558378, -0.36826219, -0.31849158],
       [-0.06812649, -0.70517213, -0.24421381],
       [-0.18962247, -0.68028676, -0.30642056],
       [ 0.13642871, -0.31403244, -0.17724277],
       [ 1.38002644, -0.42095429,  0.01616713],
       [ 0.58800644, -0.48428742,  0.4444335 ],
       [ 0.80685831,  0.19418231,  0.38896306],
       [ 1.22069088,  0.40761959, -0.23716701],
       [ 0.81509524, -0.37203706, -0.61472084],
       [ 0.24595768, -0.2685244 ,  0.18836681],
       [ 0.16641322, -0.68192672, -0.06000923],
       [ 0.46480029, -0.67071154, -0.02430686],
       [ 0.8908152 , -0.03446444, -0.00994693],
       [ 0.23054802, -0.40438585, -0.22941024],
       [-0.70453176, -1.01224823, -0.10569115],
       [ 0.35698149, -0.50491009,  0.01661717],
       [ 0.33193448, -0.21265468,  0.08320429],
       [ 0.37621565, -0.29321893,  0.07799635],
       [ 0.64257601,  0.01773819, -0.20539497],
       [-0.90646986, -0.75609337, -0.01259965],
       [ 0.29900084, -0.34889781,  0.01058166],
       [ 2.53119273, -0.00984911,  0.76016543],
       [ 1.41523588, -0.57491635,  0.29632253],
       [ 2.61667602,  0.34390315, -0.11078788],
       [ 1.97153105, -0.1797279 ,  0.10842466],
       [ 2.35000592, -0.04026095,  0.28538956],
       [ 3.39703874,  0.55083667, -0.34843756],
       [ 0.52123224, -1.19275873,  0.5456593 ],
       [ 2.93258707,  0.3555    , -0.42023994],
       [ 2.32122882, -0.2438315 , -0.34830439],
       [ 2.91675097,  0.78279195,  0.42333542],
       [ 1.66177415,  0.24222841,  0.24244019],
       [ 1.80340195, -0.21563762, -0.03764817],
       [ 2.1655918 ,  0.21627559,  0.03332664],
       [ 1.34616358, -0.77681835,  0.28190288],
       [ 1.58592822, -0.53964071,  0.62902933],
       [ 1.90445637,  0.11925069,  0.47963982],
       [ 1.94968906,  0.04194326,  0.04418617],
       [ 3.48705536,  1.17573933,  0.13389487],
       [ 3.79564542,  0.25732297, -0.51376776],
       [ 1.30079171, -0.76114964, -0.34499504],
       [ 2.42781791,  0.37819601,  0.21911932],
       [ 1.19900111, -0.60609153,  0.51185551],
       [ 3.49992004,  0.4606741 , -0.57318224],
       [ 1.38876613, -0.20439933, -0.06452276],
       [ 2.2754305 ,  0.33499061,  0.28615009],
       [ 2.61409047,  0.56090136, -0.20553452],
       [ 1.25850816, -0.17970479,  0.0458477 ],
       [ 1.29113206, -0.11666865,  0.23125646],
       [ 2.12360872, -0.20972948,  0.15418002],
       [ 2.38800302,  0.4646398 , -0.44953019],
       [ 2.84167278,  0.37526917, -0.49889808],
       [ 3.23067366,  1.37416509, -0.11454821],
       [ 2.15943764, -0.21727758,  0.20876317],
       [ 1.44416124, -0.14341341, -0.15323389],
       [ 1.78129481, -0.49990168, -0.17287519],
       [ 3.07649993,  0.68808568, -0.33559229],
       [ 2.14424331,  0.1400642 ,  0.73487894],
       [ 1.90509815,  0.04930053,  0.16218024],
       [ 1.16932634, -0.16499026,  0.28183584],
       [ 2.10761114,  0.37228787,  0.02729113],
       [ 2.31415471,  0.18365128,  0.32269375],
       [ 1.9222678 ,  0.40920347,  0.1135866 ],
       [ 1.41523588, -0.57491635,  0.29632253],
       [ 2.56301338,  0.2778626 ,  0.29256952],
       [ 2.41874618,  0.3047982 ,  0.50448266],
       [ 1.94410979,  0.1875323 ,  0.17782509],
       [ 1.52716661, -0.37531698, -0.12189817],
       [ 1.76434572,  0.07885885,  0.13048163],
       [ 1.90094161,  0.11662796,  0.72325156],
       [ 1.39018886, -0.28266094,  0.36290965]])

Análisis de discriminante lineal (LDA)

https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html

https://scikit-learn.org/stable/modules/lda_qda.html#lda-qda

comments powered by Disqus