diff --git a/README.md b/README.md index 59d297b..dcba12a 100644 --- a/README.md +++ b/README.md @@ -28,10 +28,10 @@ AI Plot data: https://machinelearningmastery.com/visualize-machine-learning-data - [X] Compare prediction with y_test that were false ## Dataset -Nous avons décidé de prendre un dataset sur le site Kaggle, il contient 100 000 lignes qui réprésentent -chacune un objet stellaire observé en lui attribuant plusieurs caractéristiques comme sa declinaison, -les couleurs observées et autres valeurs scientifiques. -Chaque ligne est donc associée à une classe qui peut-être "QSO" un quasar, "Galaxy" ou "Star". +Nous avons décidés de prendre un dataset sur le site Kaggle, il contient 100 000 lignes qui réprésentent +chacune un objet stellaire observé en lui attribuant plusieurs caractéristiques comme son inclinaison, +les longueurs d'ondes observées et autres valeurs scientifiques. +Chaque ligne est donc associée à une classe qui peut-être "QSO" un quasar, "Galaxy" ou "Star" une étoile. Notre première étape à été de regarder le dataset pour savoir si certaines données sont manquantes. En utilisant `df.info()` nous pouvons avoir certaines informations sur les données, il ne manque aucune valeur. @@ -40,16 +40,14 @@ Nous pouvons maintenant regarder la répartition des classes, celle-ci est assez ~21.000 étoiles et ~19000 quasar. Nous pouvons en déduire que les galaxies sont plus communes mais cela pourrait-il avoir une incidence sur la précision de notre modèle ? -Après avoir tester avec un nombre égal de Galaxie, Etoiles et Quasar les résultats sont moins bon qu'en utilisant -le dataset de base. La précision n'est donc pas impacté par le grand nombre de Galaxie. +Après avoir testé avec un nombre égal de Galaxies, Etoiles et Quasars, les résultats sont moins bon qu'en utilisant +le dataset de base. La précision n'est donc pas impactée par le grand nombre de galaxies. -## Plot -J'ai la flemme d'analyser les plots que j'ai fait. ## Choix des données d'entrainement -Pour entrainer des modèles nous devons d'abord diviser notre dataset en deux parties, les caractéristique +Pour entrainer des modèles nous devons d'abord diviser notre dataset en deux parties, les caractéristiques de chaque objet (x) ainsi que la classe à laquelle il est associé (y). La valeur (x) ne représente pas -forcément toutes des caractéristiques, nous avons d'abord du effectuer un tri. +forcément toutes des caractéristiques pertinantes, nous avons d'abord du effectuer un tri. Voici la liste des colonnes avec leurs descriptions: @@ -72,15 +70,15 @@ Voici la liste des colonnes avec leurs descriptions: 17) **MJD** = Modified Julian Date, used to indicate when a given piece of SDSS data was taken 18) **fiber_ID** = fiber ID that identifies the fiber that pointed the light at the focal plane in each observation -Plusieurs colonnes n'ont enfait aucun rapport avec l'astre en lui-meme mais plutot sont plutot des informations sur -l'équipement utilsé pendant les observations. Nous les avons donc enlevé de (x) car leurs présence ne fait que -baisser la précision des modèles entrainé. +Plusieurs colonnes n'ont enfait aucun rapport avec l'astre en lui-meme, mais sont plutôt des informations sur +l'équipement utilisé pendant les observations. Nous les avons donc enlevées de (x) car leurs présence ne fait que +baisser la précision des modèles entrainés. ## Entrainement -Nous avons testé plusieurs modèle au cours de ce projet dans le but de trouver celui qui est le plus précis -pour prédire la catégorie d'un astre grace à ses caractéristique. Au début de manière aléatoire en jouant -avec les hyper-paramètres puis nous avons utilisé [l'arbre de choix de sklearn](https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html). -Nous voulons prédire une catgorie il faut donc utiliser un *Classifier* et nous avons 100.000 lignes, vu que la conditions est "<100K" nous avons utilisé +Nous avons testés plusieurs modèles au cours de ce projet dans le but de trouver celui qui est le plus précis +pour prédire la catégorie d'un astre grace à ses caractéristiques. Au début de manière aléatoire en jouant +avec les hyper-paramètres, puis nous avons utilisés [l'arbre de choix de sklearn](https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html). +Nous voulons prédire une catégorie, il faut donc utiliser un *Classifier* et nous avons 100.000 lignes, vu que la conditions est "<100K" nous avons utilisés les modèles pour < et > à 100.000 lignes: - KNN @@ -88,25 +86,25 @@ les modèles pour < et > à 100.000 lignes: - Linear SVC - Random Forest -Mais aussi d'autre modèle pour tester leurs efficacité: +Mais aussi d'autre modèles pour tester leurs efficacité: - Multi-Layer Perceptron - Nearest Centroid - SGD -Pour entrainer est tester nos modèles il nous faut faire plusieurs groupe de donnée, celles d'entrainement -**Xtrain** et **Xtest**, pour les test **Ytrain** et **Ytest**. C'est groupe ont été généré en utilisant +Pour entrainer et tester nos modèles, il nous faut faire plusieurs groupes de données, celles d'entrainement +**Xtrain** et **Xtest**, pour les test **Ytrain** et **Ytest**. Ces groupes ont été générés en utilisant `train_test_split(x, y,test_size=0.25, random_state=0)`, *test_size* défini le % du dataset à utiliser pour les tests. L'ajout du paramètre `stratified=y` qui doit garder une répartition égale dans les groupes de test et train n'a pas augmenté la précision de nos modèles pour autant. -Maintenant il ne reste plus qu'a utiliser la méthode `fit(Xtrain, Ytrain)` des modèles en utilisant **Xtrain** et **Ytrain**. +Maintenant il ne reste plus qu'à utiliser la méthode `fit(Xtrain, Ytrain)` des modèles en utilisant **Xtrain** et **Ytrain**. Ensuite il nous faut tester le modèle en lui faisant prédire les classes des données **Ytrain** en utilisant `predictions = model.predict(Xtest)` et enfin récupérer la précision du modèle en comparant nos prédictions avec **Ytest**: `accuracy_score(Ytest, predictions).` ## Résultat -Le meilleur modèle pour notre dataset est d'après nos expérimentation le **RandomForestClassifier** avec une précision +Le meilleur modèle pour notre dataset est d'après nos expérimentations le **RandomForestClassifier** avec une précision de 98%. Voici les résultats obtenu sur l'ensemble des modèles: