0
votes

Comment pouvons-nous être sûrs de l'efficacité d'un réseau neuronal

J'ai formé un réseau neuronal avant pour la classification binaire et j'ai eu une précision de 83%, qui (j'espère), je vais m'améliorer plus tard en modifiant les paramètres des intrants. Mais certains tests me font me sentir confus:

My DataSet Longueur est 671 Donc, je la divise comme 513 Set de train, 58 Set de validation et 100 Set de test

  1. Lorsque je change la taille de mes séries (train, validation, test), le score de précision peut diminuer à certains scores très bas comme 40%

  2. Le Neural Net est censé apprendre de l'ensemble de train, mais lorsque je teste, après la formation, avec le même ensemble de trains et non l'ensemble de tests, je pensais que le modèle devrait marquer 100%, car il vient de appris de celui-ci, le regarda, mais cela n'améliore que quelques-uns avec 87% ...

    Je suis un débutant dans ML donc je ne sais pas si c'est normal ou non, je suis juste curieux et je veux attraper toutes les petites choses à savoir, comprendre parfaitement ce que je fais. Je suppose que c'est peut-être la normalisation de mes vecteurs, mais je ne sais pas beaucoup à ce sujet. Je peux vous partager mon code complet si vous le souhaitez, mais comme chaque filet neural, c'est assez long mais facile à lire.


0 commentaires

3 Réponses :


1
votes

Donc, deux choses à résoudre ici.

1- Il s'agit d'un très très petit ensemble de données pour NN, il n'est donc pas surprenant que les résultats varient autant lors de la modification de la taille des ensembles.

2- Vous n'êtes pas censé avoir 100% sur l'ensemble de train. Si vous le faites, votre modèle a sévèrement surversé et il ne sera pas en mesure de généraliser avec de nouveaux exemples.

3- Le meilleur moyen d'obtenir une bonne estimation des performances de généralisation avec un tel ensemble de données est avec une validation croisée K-Fold (je devrais dire, sans doute le meilleur, mais c'est certainement à mon avis le plus facile). Fondamentalement au lieu de séparer l'ensemble de données comme vous l'avez fait, vous vous entraînerez par exemple sur 80% de l'ensemble de données et testez-le sur les 20%, puis entraînez-vous sur 80% d'autres et testez sur 20% différents, 5 fois jusqu'à ce que tous les exemples aient été testés. sur (il y a quelques variantes de cela). En savoir plus ici https://fr.wikipedia.org/wiki/cross-validation_ ( Statistiques)

4- Pour un tel ensemble de données, OMI Un autre algorithme peut mieux fonctionner.

espère que cela aide :)


5 commentaires

Merci pour votre aide, mais qu'avez-vous voulu dire exactement au 4ème point? Quel genre d'algorithme? Quelle taille serait considérable et «calme welll»?


Eh bien, il y a beaucoup d'algorithmes disponibles (si vous en voulez une partie de la boîte, je vous suggère de visiter Sklearn qui implémentent de nombreuses personnes). Je suppose que vous faites une classification binaire basée sur le fait que vous avez utilisé la précision comme score, alors essayez peut-être la régression SVM ou linéaire, celles-ci fonctionnent généralement bien pour la classification binaire avec un petit jeu de données. Les forêts aléatoires sont également toujours une option valide, surtout si vous avez beaucoup de fonctionnalités!


J'ai déjà essayé la régression linéaire, mais elle n'a pas bien fonctionné, je suis presque sûr que j'ai besoin de net de neuronal car la régression linéaire est à peu près des statistiques, elle n'apprend rien et ma classification en a besoin. Mais il n'est pas facile d'avoir un gros jeu de données pour mon problème ..


Désolé, je voulais dire une régression logistique et non linéaire. Il suffit également de tout ce que l'apprentissage de la machine est à peu près des statistiques. Ce serait plus facile si j'avais plus d'informations sur le problème


Quel avantage peut-il y avoir dans le test [sic] avant toute formation que si vous modifiez le net après le test via certains moyens autres que la formation?



1
votes

OP: Vos questions sont très bonnes pour quelqu'un qui vient de commencer dans l'apprentissage de la machine.

  1. Avez-vous garanti que la distribution de votre dataset de formation et de test est similaire? J'essaierais de garder le nombre d'échantillons par classe (étiquette) à peu près égale si possible. Par exemple, si votre ensemble d'entraînement est gravement déséquilibré, votre algorithme de prédiction pourrait avoir tendance à favoriser l'étiquette qui apparaît plus souvent.

  2. Je pense que vous êtes sur la bonne voie pour survivre à votre modèle pour vous assurer que votre architecture, votre formation et votre autre sont correctement configurés. Utilisez-vous la régularisation? Si tel est le cas, je pense que vous voudrez peut-être supprimer cela pour voir si votre modèle peut correspondre à votre jeu de données de formation. Je comprends que cela va à l'encontre de ce que la réponse de la réponse acceptée suggère, mais c'est un moyen utile de déboguer votre configuration

  3. Quelle est la qualité des étiquettes pour votre jeu de données? Si vous avez du bruit dans vos étiquettes, cela affecterait la précision de votre classificateur

  4. Vous pouvez également essayer de transférer l'apprentissage si vous ne pouvez pas obtenir plus de données de formation


2 commentaires

Vous aviez raison, mon jeu de données était déséquilibré (70% de l'étiquette 0 dans le jeu de tests et seulement 40% sur l'ensemble de train, donc oui, l'étiquette 1 est privilégiée). J'essaie avec Smote algorithme comme @sun suggéré, mais je pensais que nous voulions que nous voulions les mêmes proportions en termes de% des étiquettes dans l'ensemble des tests et de train, car j'ai vu que Smote va donner la Même forme à mes jeux de données, de sorte que pas plus de ratio de 90-10%, est-ce normal? Puis-je équilibrer moi-même? 3) J'ai des bruits dans mes étiquettes, je ne peux rien faire à ce sujet, mais oui, c'est sûr que cela affecterait la précision.


@ Benech17 Je ne peux que fournir des indications générales ici. On dirait que vous essayez déjà de rééquilibrer vos cours qui sont bons. Les autres options incluent: - Échantillonnage stratifié - Tinkering avec votre fonction de perte pour tenir compte de la nature déséquilibrée de votre ensemble de données avant de faire tout cela, pouvez-vous établir une base de référence pour non seulement la précision, mais aussi la précision, le rappel et l'ACC pour votre classificateur ?



1
votes

Comme suggéré par beaucoup de personnes 3: 1: 1 (60:20:20 = test de validation de train) est une règle de tiumnier pour diviser les données, si vous jouez avec de petites données, il est préférable de rester à 80: 20 ou 70:30 Just Train-test, je vais habituellement pour un ratio 90:10 pour de meilleurs résultats.

Avant de commencer par la classification, vérifiez d'abord si votre jeu de données est équilibré ou déséquilibré (il ne devrait pas y avoir moins d'exemple appartient à une classe par rapport à d'autres) car même si cela vous donne une bonne précision, il incitera induire une bonne précision. < / p>

Si le jeu de données est déséquilibré, défini des données pré-traitées avec l'algorithme d'échantillonnage (pour E.g Smote) et réamples. Il créera des ensembles égaux d'exemples pour la classe à base de voisins.

Comme correctement mentionné dans une autre réponse, utilisez la classification de la validation croisée telle que K-pli. Le concept de validation croisée est effectué pour modifier les paramètres utilisés pour la formation afin d'optimiser sa précision et d'annuler l'effet du sur-adaptation sur les données de formation, il supprimait également le bruit de l'ensemble de données. Je passe habituellement pour une validation croisée à 10 fois sur laquelle les données sont divisées en 10 partitions et dans chaque partition Itération 1/10 utilisent comme test et reposant en tant que formation. Prenez la moyenne des 10 calculs pour obtenir une bonne estimation de la performance de votre classificateur.


7 commentaires

Je ne comprends pas l'algorithme d'échantillonnage ... Je veux dire, SMOTE va me donner mon test régler la même forme que le jeu de train, et ce faisant, il n'y aura plus de ratio de 80:20 ?? Pouvez-vous me l'expliquer s'il vous plaît? (Je suis ce Exemple pour Smote @vimalthilak


Non, cela créera plus d'exemples pour la classe minoritaire. Par E.G Votre jeu de données d'origine a de la classe 1: 1000 et de la classe 0: 10, puis sur la base du quartier, il créera l'exemple de la classe 0 et effectuera des ensembles de données équilibrés. Dans votre exemple pour Smote, vous pouvez voir le nombre d'étiquettes de classe minoritaire a été augmenté et la taille globale des données a également augmenté.


Avant de suréchantillonnage, des comptes d'étiquettes '1': [345] Avant de suréchanter, des comptes d'étiquette '0': [199019] Après suréchantillonnage, la forme de train_x: (398038, 29) après suréchantillonnage, la forme de train_y: (398038, ) Après la suréchantillonnage, des comptes d'étiquettes '1': 199019 après suréchantillonnage, compte de label '0': 199019


ok donc si je comprends bien, cela dupliquera certaines données pour avoir autant d'étiquettes que l'étiquette 0, eh bien, je l'ai fait et je trouve toujours à peu près la même précision, 85%, mais bien sûr que je devais changer certains paramètres comme les nombres de neurones dans mes couches cachées


Pour votre clarté, vous allez toujours avoir une formule ratio pour le train / test. REMARQUE: Veuillez mesurer vos performances en utilisant des métriques tels que MCC, F-Score, etc.


D'accord, j'espère que je vais aussi avoir un bon résultat avec ceux-ci, je vous ferai savoir! En outre, je ne sais pas si c'est le bon sens, mais je décide du nombre de neurones dans les couches cachées, etc. Par certaines boucles et prenez le meilleur résultat, est-il un moyen plus facile?


Je dois encore expérimenter avec le réseau de neurones, mais une fois que je faisais. Je vais certainement vous revenir à vous.