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
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
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_
X_
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')
'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')