Extraction de caractéristiques et surapprentissage

Concevoir des flux de travail Machine Learning en Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Extraction de caractéristiques à partir de données non tabulaires

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

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 flux de travail Machine Learning en Python

Encodage d'étiquettes pour 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 flux de travail Machine Learning en Python

Encodage d'étiquettes pour variables catégorielles

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

Concevoir des flux de travail Machine Learning en Python

Encodage one-hot pour 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 flux de travail Machine Learning en Python

Encodage par mots-clés pour 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 flux de travail Machine Learning en Python

Dimensionnalité et ingénierie des caractéristiques

Variables catégorielles dans credit :

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

Caractéristiques ECG dans arrhythmias :

  • Plus de 250 caractéristiques
Concevoir des flux de travail Machine Learning en Python

La précision en apprentissage atteint 0,8 avec 0 colonne ajoutée et grimpe presque à 1,0 quand on ajoute des colonnes factices. La précision hors échantillon chute immédiatement dès l'ajout de colonnes factices.

Concevoir des flux de travail Machine Learning en Python

Sélection de caractéristiques

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 flux de travail Machine Learning en Python

Sélection de caractéristiques

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 flux de travail Machine Learning en Python

Des compromis partout !

Concevoir des flux de travail Machine Learning en Python

Preparing Video For Download...