Remoción de características de baja varianza#

  • Ultima modificación: 2023-03-11 | YouTube

  • Remueve las características que:

    • Tienen varianza cero (la columna es una constante).

    • La varianza no cumple con un límite pre-establecido.

Considere la siguiente matriz de características binarias:

[1]:
X = [
    [0, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
    [0, 1, 1],
    [0, 1, 0],
    [0, 1, 1],
]

Para la cual, la 1ra columna es practicamente constante.

En este caso se desea remover las columnas que tengan más del 80% de sus valores iguales.

Nota: una distribución de Bernoulli es una distribución discreta de probabilidades en que el valor de éxito (1) ocurre con una probabilidad p, y el de fracaso (0) con una probabilidad de 1-p. Si X es una variable aleatoria que sigue una distribución de Bernoulli, su varianza será p(1-p).

Teniendo en cuenta lo anterior, se desea remover las caracterísiticas con una variranza inferior a:

0.80 \; ( 1 - 0.80) = 0.16

[2]:
from sklearn.feature_selection import VarianceThreshold

varianceThreshold = VarianceThreshold(
    # -------------------------------------------------------------------------
    # Features with a training-set variance lower than this threshold will be
    # removed.
    threshold=(0.8 * (1 - 0.8)),
)

varianceThreshold.fit_transform(X)
[2]:
array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])
[3]:
varianceThreshold.variances_
[3]:
array([0.13888889, 0.22222222, 0.25      ])

Valores de varianza para otras distribuciones#

  • Uniforme entre a y b:

\frac{1}{12}(b-a)^2

  • Normal N(\mu, \sigma):

\sigma^2 = \frac{1}{n-1}\sum_i (x_i - \bar{x})^2