Intelligence artificielle

Chasse exoplanète à l'aide du Machine Learning

Chasse exoplanète à l'aide du Machine Learning


Commençons donc par diviser notre ensemble de données et normalisons-le.

x_train = train_data.drop (["LABEL"], axe = 1)
y_train = train_data["LABEL"]
x_test = test_data.drop (["LABEL"], axe = 1)
y_test = test_data["LABEL"]

Normalisation des données est une technique souvent appliquée dans le cadre de Les données la préparation pour apprentissage automatique. L'objectif de normalisation consiste à modifier les valeurs des colonnes numériques du jeu de données en une échelle commune, sans distorsion des différences dans les plages de valeurs.

x_train = normalisé = normalisé (x_train)
x_test = normaliser (x_test)

L'étape suivante consiste à appliquer des filtres gaussiens aux tests et à la formation.

En théorie des probabilités, le Ordinaire (ou Gaussien ou Gauss ou Laplace – Gauss) Distribution est une distribution de probabilité continue très courante. Les distributions normales sont importantes dans les statistiques et sont souvent utilisées dans les sciences naturelles et sociales pour représenter des variables aléatoires à valeurs réelles dont les distributions ne sont pas connues.

La distribution normale est utile en raison du théorème de la limite centrale. Dans sa forme la plus générale, sous certaines conditions (qui incluent la variance finie), il est indiqué que les moyennes des échantillons d’observations de variables aléatoires tirées indépendamment de la même distribution convergent dans la distribution vers la normale, c’est-à-dire qu’elles deviennent normales lorsque le nombre des observations est suffisamment grande. Les quantités physiques censées être la somme de nombreux processus indépendants ont souvent des distributions presque normales.

x_train = filtré = ndimage.filters.gaussian_filter (x_train, sigma = 10)
x_test = ndimage.filters.gaussian_filter (x_test, sigma = 10)

nous utilisons la mise à l'échelle des fonctionnalités afin que toutes les valeurs restent dans la plage comparable.

#Échelle de fonctionnalité
std_scaler = StandardScaler ()
x_train = scaled = std_scaler.fit_transform (x_train)
x_test = std_scaler.fit_transform (x_test)

Le nombre de colonnes / fonctionnalités avec lesquelles nous travaillons est énorme. Nous avons 5087 lignes et 3198 colonnes dans notre jeu de données de formation. Fondamentalement, nous devons réduire le nombre de fonctions (réduction de la dimentioanlité) pour éliminer la possibilité de Malédiction de dimensionnalité.

Pour réduire le nombre de dimensions / caractéristiques, nous utiliserons l’algorithme de réduction de dimensionnalité le plus répandu, à savoir: PCA (Analyse en Composante Principale).

Pour effectuer la PCA, nous devons choisir le nombre de caractéristiques / dimensions que nous voulons dans nos données.

# Réduction de la densité
depuis sklearn.decomposition import PCA
pca = PCA ()
X_train = pca.fit_transform (X_train)
X_test = pca.transform (X_test)
total = sum (pca.explained_variance_)
k = 0
variable_variance = 0
tandis que variable_variance / total <0,90:
variable_variance + = pca.explained_variance_[k]
k = k + 1

Le code ci-dessus donne k = 37.

Prenons maintenant k = 37 et appliquons PCA à nos variables indépendantes.

#Apply PCA avec n_componenets
pca = PCA (n_components = 37)
x_train = pca.fit_transform (x_train)
x_test = pca.transform (x_test)
plt.figure ()
plt.plot (np.cumsum (pca.explained_variance_ratio_))
plt.xlabel ('Nombre de composants')
plt.ylabel ('Variance (%)') #pour chaque composant
plt.title ('Variance expliquée du jeu de données exoplanètes')
plt.show ()

Le graphique ci-dessus nous indique qu'en sélectionnant 37 composants, nous pouvons conserver environ 98,8% ou 99% de la variance totale des données. Il est logique de ne pas utiliser 100% de notre variance, car elle désigne tous les composants et nous ne voulons que les principaux.

Le nombre de colonnes a été réduit à 37 dans les ensembles de données de test et de train.

Passons maintenant à l'étape suivante, car nous savons que la classe cible n'est pas distribuée de manière égale et qu'une classe domine l'autre. Nous devons donc rééchantillonner nos données afin que la classe cible soit également distribuée.

Il existe 4 façons de résoudre les problèmes de déséquilibre des classes:

  • Synthèse de nouvelles instances de classe minoritaire
  • Suréchantillonnage de la classe minoritaire
  • Sous-échantillonnage de la classe majoritaire
  • modifiez la fonction de coût pour faire de la classification erronée des instances minoritaires plus importante que de la classification erronée des instances majoritaires.
# Ré-échantillonnage car les données sont très déséquilibrées.
print ("Avant le suréchantillonnage, nombre d'étiquettes '1': {}". format (sum (y_train == 1)))
print ("Avant le suréchantillonnage, nombre d'étiquettes '0': {} n" .format (sum (y_train == 0)))
sm = SMOTE (random_state = 27, ratio = 1.0)
x_train_res, y_train_res = sm.fit_sample (x_train, y_train.ravel ())
print ("Après le suréchantillonnage, nombre d'étiquettes '1': {}". format (sum (y_train_res == 1)))
print ("Après le suréchantillonnage, nombre d'étiquettes '0': {}". format (sum (y_train_res == 0)))

Nous avons utilisé le SMOTE (TEchnique de suréchantillonnage de minorité synthétique). SMOTE est une méthode de suréchantillonnage. Cela crée des échantillons synthétiques (et non des doublons) de la classe minoritaire. Rendre ainsi la classe minoritaire égale à la classe majoritaire. SMOTE fait cela en sélectionnant des enregistrements similaires et en modifiant cet enregistrement, une colonne à la fois, d'une quantité aléatoire à la différence des enregistrements voisins.

Avant le suréchantillonnage, chiffres de l'étiquette '1': 37
Avant le suréchantillonnage, nombre de labels '0': 5050

Après le suréchantillonnage, nombre d'étiquettes '1': 5050
Après le suréchantillonnage, nombre d'étiquettes '0': 5050

Il s’agit maintenant de construire un modèle permettant de classer les exoplanètes sur les données de test.

Je vais donc créer une fonction modèle Qui va:

  1. adapter le modèle
  2. Validation croisée
  3. Précision
  4. rapport de classification
  5. Matrice de confusion
modèle def (classificateur, dtrain_x, dtrain_y, dtest_x, dtest_y):
#fit le modèle
classifier.fit (dtrain_x, dtrain_y)
prédictions = classifier.predict (dtest_x)

#Validation croisée
precision = cross_val_score (estimateur = classificateur, X = x_train_res, y = y_train_res, cv = 5, n_emplois = -1)
moyenne = exactacies.mean ()
variance = precision.std ()
print ("Précision moyenne:" + str (moyenne))
print ("Variance de précision:" + str (variance))

#Précision
print (" naccuracy_score:", exactitude_score (dtest_y, prédictions))

#Classification report
print (" nclassification report: n", (classification_report (dtest_y, prédictions)))

#Confusion matrix
plt.figure (figsize = (13,10))
sous-parcelle (221)
sns.heatmap (confusion_matrix (dtest_y, prédictions), annot = True, cmap = "viridis", fmt = "d", linecolor = "k", linewidths = 3)
plt.title ("MATERIEL DE CONFUSION", fontsize = 20)

Il est toujours nécessaire de valider la stabilité de votre modèle d’apprentissage automatique. Je veux dire que vous ne pouvez tout simplement pas adapter le modèle à vos données d’entraînement et espérez que cela fonctionnera avec précision pour les données réelles qu’il n’a jamais vues auparavant. Vous devez avoir la certitude que votre modèle tient compte de la plupart des schémas des données et qu'il ne capte pas trop le bruit, ou en d’autres termes, son faible biais de variance et de biais.

Ajustez maintenant l'algorithme SVM (Support Vector Machine) à l'ensemble d'apprentissage et effectuez la prédiction.

à partir de sklearn.svm import SVC
SVM_model = SVC ()
modèle (SVM_model, x_train_res, y_train_res, x_test, y_test)
Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer