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