FeatureElimination.extract_features

FeatureElimination.extract_features(selection_rule='decrease_perf', number_feat_rep=None, gap=0.1, alpha=0.5)

Estrae la lista finale delle feature selezionate in base a una regola specificata.

Analizza il report generato dal metodo make_report() e seleziona un sottoinsieme di feature secondo il parametro selection_rule. Le regole disponibili sono:

  • decrease_perf: Seleziona il set di feature più piccolo prima che la performance di validazione scenda significativamente (più del gap %) rispetto al massimo raggiunto.

  • best_valid: Seleziona il set di feature corrispondente al miglior punteggio di validazione (scegliendo il set più piccolo in caso di parità).

  • num_feat: Seleziona il set di feature corrispondente esattamente a number_feat_rep feature.

  • robust_tradeoff: Seleziona il set di feature che massimizza un compromesso tra performance media (train+valid) e robustezza (gap tra performance di train e valid), pesato dal parametro alpha. Viene calcolato come lo score medio (tra train e valid) moltiplicato per alpha meno la differenza di score in valore assoluto (tra train e valid) moltiplicato per 1 - alpha.

La lista delle feature selezionate viene memorizzata nell’attributo final_feat e restituita dal metodo. Le feature scartate, invece, vengono memorizzate nell’attributo _filtered_out_features.

Parameters:
  • selection_rule (str, optional) – La regola da utilizzare per la selezione. Valori possibili: “decrease_perf”, “best_valid”, “num_feat”, “robust_tradeoff”. Default: ‘decrease_perf’.

  • number_feat_rep (int, optional) – Numero di feature desiderato. Utilizzato solo se selection_rule è “num_feat”. Default: None.

  • gap (float, optional) – Soglia di calo percentuale della performance accettabile. Utilizzato solo se selection_rule è “decrease_perf”. Default: 0.1 (10%).

  • alpha (float, optional) – Peso per il termine di performance medio nella regola “robust_tradeoff”. Il peso per il gap di robustezza sarà (1-alpha). Deve essere tra 0 e 1. Default: 0.5.

Returns:

La lista dei nomi delle feature selezionate.

Return type:

list

Esempio:

>>> import pandas as pd
>>> from sklearn.linear_model import LogisticRegression
>>> from cefeste.elimination import FeatureElimination
>>> # Dati di esempio
>>> data = pd.DataFrame({
... 'feature1': [1,2,3,4,5,6,7,8,9,2,3,1,3,6,43,2,4,6,3,2,6,3,2,6,3,2,5],
... 'feature2': [5,4,3,2,1,6,3,7,3,5,8,4,2,9,75,4,5,7,5,2,5,8,6,3,5,7,8],
... 'feature3': [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
... 'feature4': [8,8,8,9,5,3,4,5,6,2,6,8,4,4,4,6,5,7,8,5,9,3,4,7,5,78,8],
... 'feature5': [2,12,4,14,2,3,1,2,3,14,1,1,14,12,15,16,2,12,13,12,1,15,17,2,1,15,1],
... 'target':   [0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1]
... })
>>> # Parametri
>>> target_col = 'target'
>>> model = LogisticRegression()
>>> grid = {'C': [0.1, 1, 10]}
>>> # Inizializzazione
>>> fe = FeatureElimination(
...    db=data,
...    target_col=target_col,
...    model=model,
...    grid=grid,
...    min_n_feat_step=1
... )
>>> # Generazione del report
>>> fe.make_report()
n_feat train_score valid_score n_feat_to_remove feat_used feat_to_remove feat_select best_estimator
0 5 0.964706 0.891667 1 [feature3, feature5, feature1, feature2, feature4] [feature3] [feature5, feature1, feature2, feature4] LogisticRegression(C=0.1)
1 4 0.964706 0.891667 1 [feature4, feature5, feature2, feature1] [feature4] [feature5, feature2, feature1] LogisticRegression(C=0.1)
2 3 0.982353 0.925000 1 [feature2, feature5, feature1] [feature2] [feature5, feature1] LogisticRegression(C=1)
3 2 0.817647 0.750000 1 [feature1, feature5] [feature1] [feature5] LogisticRegression(C=0.1)
4 1 0.788235 0.791667 0 [feature5] [] [feature5] LogisticRegression(C=0.1)
>>> fe.extract_features()
['feature2', 'feature5', 'feature1']