Ingénierie des variables et surapprentissage

Concevoir des workflows de Machine Learning en Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Extraction de variables à partir de données non tabulaires

L'ECG d'un seul patient est généralement enregistré sur papier sous forme de série temporelle.

arrhythmias.head()
   age  sex  height  weight  ...    chV6_TwaveAmp  chV6_QRSA  chV6_QRSTA  class
0   75    0     190      80  ...              2.9       23.3        49.4      0
1   56    1     165      64  ...              2.1       20.4        38.8      0
2   54    0     172      95  ...              3.4       12.3        49.0      0
3   55    0     175      94  ...              2.6       34.6        61.6      1
4   75    0     190      80  ...              3.9       25.4        62.8      0
Concevoir des workflows de Machine Learning en Python

Encodage d'étiquettes pour les variables catégorielles

numpy.unique(credit_scoring['purpose'])
array(['business', 'buy_domestic_appliance', 'buy_furniture_equipment',
       'buy_new_car', 'buy_radio_tv', 'buy_used_car', 'education',
       'other', 'repairs', 'retraining'], dtype=object)
numpy.unique(LabelEncoder().fit_transform(credit_scoring['purpose']))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Concevoir des workflows de Machine Learning en Python

Encodage d'étiquettes pour les variables catégorielles

Un arbre de décision qui scinde la variable « credit purpose » en intervalles continus arbitraires de nombres, où les nombres codent la catégorie sous-jacente.

Concevoir des workflows de Machine Learning en Python

Encodage one-hot pour les variables catégorielles

pd.get_dummies(credit_scoring['purpose']).iloc[1]
purpose_business                   0
purpose_buy_domestic_appliance     0
purpose_buy_furniture_equipment    0
purpose_buy_new_car                0
purpose_buy_radio_tv               1
purpose_buy_used_car               0
purpose_education                  0
purpose_other                      0
purpose_repairs                    0
purpose_retraining                 0
Concevoir des workflows de Machine Learning en Python

Encodage par mots-clés pour les variables catégorielles

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()

credit_scoring['purpose'] = credit_scoring['purpose'].apply( lambda s: ' '.join(s.split('_')), 0)
dummy_matrix = vec.fit_transform(credit_scoring['purpose']).toarray()
pd.DataFrame(dummy_matrix, columns=vec.get_feature_names()).head()
      appliance  business  buy  car  ...   repairs  retraining  tv  used
0          0         0    1    0  ...         0           0   1     0
1          0         0    1    0  ...         0           0   1     0
2          0         0    0    0  ...         0           0   0     0
3          0         0    1    0  ...         0           0   0     0
Concevoir des workflows de Machine Learning en Python

Dimensionnalité et ingénierie des variables

Variables catégorielles dans credit :

  • Encodage d'étiquettes : 1 colonne.
  • Encodage one-hot : 10 colonnes.
  • Encodage par mots-clés : 15 colonnes.

Variables ECG dans arrhythmias :

  • Plus de 250 variables
Concevoir des workflows de Machine Learning en Python

Précision sur l'échantillon à 0,8 pour 0 colonnes ajoutées, qui monte presque à 1,0 quand on ajoute des colonnes factices. La précision hors échantillon chute aussitôt que des colonnes factices sont ajoutées.

Concevoir des workflows de Machine Learning en Python

Sélection de variables

from np.random import uniform
fakes = pd.DataFrame(
    uniform(low=0.0, high=1.0, size=n * 100).reshape(X.shape[0], 100),
    columns=['fake_' + str(j) for j in range(100)]
)
X_with_fakes = pd.concat([X, fakes], 1)
Concevoir des workflows de Machine Learning en Python

Sélection de variables

from sklearn.feature_selection import chi2, SelectKBest
sk = SelectKBest(chi2, k=20)
which_selected = sk.fit(X_with_fakes, y).get_support()
X_with_fakes.columns[which_selected]
['checking_status', 'duration', 'credit_history', 'purpose',
    'credit_amount', 'savings_status', 'installment_commitment',
    'personal_status', 'property_magnitude', 'age', 'other_payment_plans',
    'job', 'own_telephone', 'fake_28', 'fake_46', 'fake_51', 'fake_60',
    'fake_83', 'fake_95', 'fake_99']
Concevoir des workflows de Machine Learning en Python

Des compromis partout !

Concevoir des workflows de Machine Learning en Python

Preparing Video For Download...