ML avec Python - Sélection des fonctionnalités de données

Dans le chapitre précédent, nous avons vu en détail comment prétraiter et préparer les données pour l'apprentissage automatique. Dans ce chapitre, laissez-nous comprendre en détail la sélection des caractéristiques des données et les divers aspects qui y sont impliqués.

Importance de la sélection des fonctionnalités de données

Les performances du modèle d'apprentissage automatique sont directement proportionnelles aux fonctionnalités de données utilisées pour l'entraîner. Les performances du modèle ML seront affectées négativement si les fonctionnalités de données qui lui sont fournies ne sont pas pertinentes. D'autre part, l'utilisation de fonctionnalités de données pertinentes peut augmenter la précision de votre modèle ML, en particulier la régression linéaire et logistique.

Maintenant, la question se pose: qu'est-ce que la sélection automatique des fonctionnalités? Il peut être défini comme le processus à l'aide duquel nous sélectionnons les caractéristiques de nos données qui sont les plus pertinentes pour la variable de sortie ou de prédiction qui nous intéresse. Elle est également appelée sélection d'attributs.

Voici quelques-uns des avantages de la sélection automatique des fonctionnalités avant de modéliser les données:

  • La sélection de caractéristiques avant la modélisation des données réduira le surajustement.

  • La sélection de fonctionnalités avant la modélisation des données augmentera la précision du modèle ML.

  • La sélection des fonctionnalités avant la modélisation des données réduira le temps de formation

Techniques de sélection des fonctionnalités

Les techniques suivantes sont des techniques de sélection automatique de fonctionnalités que nous pouvons utiliser pour modéliser des données ML en Python -

Sélection univariée

Cette technique de sélection de caractéristiques est très utile pour sélectionner ces caractéristiques, à l'aide de tests statistiques, ayant la relation la plus forte avec les variables de prédiction. Nous pouvons implémenter une technique de sélection de fonctionnalités univariée à l'aide de SelectKBest0class de la bibliothèque Python scikit-learn.

Example

Dans cet exemple, nous utiliserons l'ensemble de données Pima Indians Diabetes pour sélectionner 4 des attributs ayant les meilleures caractéristiques à l'aide du test statistique du chi carré.

from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Ensuite, nous séparerons le tableau en composants d'entrée et de sortie -

X = array[:,0:8]
Y = array[:,8]

Les lignes de code suivantes sélectionneront les meilleures fonctionnalités de l'ensemble de données -

test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)

Nous pouvons également résumer les données pour la sortie selon notre choix. Ici, nous définissons la précision sur 2 et montrons les 4 attributs de données avec les meilleures caractéristiques ainsi que le meilleur score de chaque attribut -

set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])

Output

[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
   [148. 0.  33.6 50. ]
   [ 85. 0.  26.6 31. ]
   [183. 0.  23.3 32. ]
   [ 89. 94. 28.1 21. ]
]

Élimination des caractéristiques récursives

Comme son nom l'indique, la technique de sélection des caractéristiques RFE (élimination des caractéristiques récursives) supprime les attributs de manière récursive et construit le modèle avec les attributs restants. Nous pouvons implémenter la technique de sélection des fonctionnalités RFE à l'aide de la classe RFE de la bibliothèque Python scikit-learn.

Exemple

Dans cet exemple, nous utiliserons RFE avec un algorithme de régression logistique pour sélectionner les 3 meilleurs attributs ayant les meilleures caractéristiques de l'ensemble de données Pima Indians Diabetes à.

from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Ensuite, nous allons séparer le tableau en ses composants d'entrée et de sortie -

X = array[:,0:8]
Y = array[:,8]

Les lignes de code suivantes sélectionneront les meilleures fonctionnalités d'un ensemble de données -

model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")

Production

Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]

Nous pouvons voir dans la sortie ci-dessus, RFE choisit preg, mass et pedi comme les 3 premières meilleures caractéristiques. Ils sont marqués par 1 dans la sortie.

Analyse en composantes principales (ACP)

L'ACP, généralement appelée technique de réduction des données, est une technique de sélection de caractéristiques très utile car elle utilise l'algèbre linéaire pour transformer l'ensemble de données en une forme compressée. Nous pouvons implémenter la technique de sélection des fonctionnalités PCA à l'aide de la classe PCA de la bibliothèque Python scikit-learn. Nous pouvons sélectionner le nombre de composants principaux dans la sortie.

Exemple

Dans cet exemple, nous utiliserons PCA pour sélectionner les 3 meilleurs composants principaux de l'ensemble de données Pima Indians Diabetes.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values

Ensuite, nous séparerons le tableau en composants d'entrée et de sortie -

X = array[:,0:8]
Y = array[:,8]

Les lignes de code suivantes extrairont les fonctionnalités de l'ensemble de données -

pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)

Production

Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
   [ 
      -2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02 
      9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
   ]
   [ 
      2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02 
      -9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
   ]
   [ 
      -2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01 
      2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
   ]
]

Nous pouvons observer à partir de la sortie ci-dessus que 3 composants principaux ont peu de ressemblance avec les données source.

Importance des fonctionnalités

Comme son nom l'indique, la technique de l'importance des caractéristiques est utilisée pour choisir les caractéristiques d'importance. Il utilise essentiellement un classificateur supervisé formé pour sélectionner les fonctionnalités. Nous pouvons implémenter cette technique de sélection de fonctionnalités à l'aide de la classe ExtraTreeClassifier de la bibliothèque Python scikit-learn.

Exemple

Dans cet exemple, nous utiliserons ExtraTreeClassifier pour sélectionner des caractéristiques de l'ensemble de données Pima Indians Diabetes.

from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values

Ensuite, nous séparerons le tableau en composants d'entrée et de sortie -

X = array[:,0:8]
Y = array[:,8]

Les lignes de code suivantes extrairont les fonctionnalités de l'ensemble de données -

model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)

Production

[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]

À partir de la sortie, nous pouvons observer qu'il existe des scores pour chaque attribut. Plus le score est élevé, plus l'importance de cet attribut est élevée.