VarianceThreshold y wine

Apliquemos este enfoque al dataset wine:

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
data = data[data.label.isin([0, 1])]
X = data.drop("label", axis = 1)
y = data.label

Visualicemos, en primer lugar, las varianzas de sus características predictivas:

X.var(ddof = 0).sort_values(ascending = False)
proline              123309.545325
magnesium               234.766923
alcalinity_of_ash        11.474171
color_intensity           2.622836
alcohol                   0.783835
malic_acid                0.768388
flavanoids                0.540111
total_phenols             0.295166
proanthocyanins           0.288898
od280/od315               0.224046
ash                       0.087626
hue                       0.028237
nonflavanoid              0.011808
dtype: float64

Instanciamos ahora el selector, volviendo a especificar una varianza mínima de, por ejemplo, 0.2:

selector = VarianceThreshold(threshold = 0.2)

y lo aplicamos a la estructura X conteniendo las características predictivas:

X_ = selector.fit_transform(X)
X_
VarianceThreshold y wine

Podemos ver las características seleccionadas son el siguiente código:

X.columns[selector.get_support()]
Index(['alcohol', 'malic_acid', 'alcalinity_of_ash', 'magnesium',
       'total_phenols', 'flavanoids', 'proanthocyanins', 'color_intensity',
       'od280/od315', 'proline'],
      dtype='object')

y los nombres de las características no seleccionadas con el siguiente código:

X.columns[~selector.get_support()]
Index(['ash', 'nonflavanoid', 'hue'], dtype='object')