Python >> Tutoriel Python >  >> Python Tag >> Keras

la précision du keras ne s'améliore pas de plus de 59 %

Il me semble que pour un réseau de neurones, vos données ne sont pas assez variables. Vous avez beaucoup de valeurs similaires dans votre jeu de données. Cela pourrait être une raison de la faible précision. Essayez un simple régresseur et non un réseau de neurones.

Si vous souhaitez utiliser un réseau de neurones à tout prix, vous devez modifier les éléments suivants :

Généralement, pour la régression, vous devez définir la fonction d'activation de votre dernière couche sur "relu" ou "linéaire", le sigmoïde est généralement utilisé pour les couches cachées.

Essayez de les changer en premier. Si ça ne marche pas, essayez aussi différentes stratégies comme :

  1. Augmenter la taille du lot
  2. Augmenter le nombre d'époques
  3. Appliquez le blanchiment à votre ensemble de données avant l'exécution (étape de prétraitement).
  4. Réduisez le taux d'apprentissage, vous devriez utiliser le planificateur.

Pour le blanchiment vous pouvez faire :

from sklearn.decomposition import PCA

pca = PCA(whiten=True)
pca.fit(X)
X = pca.transform(X)

# make here train test split ...

X_test = pca.transform(X_test) # use the same pca model for the test set.

Vous avez beaucoup de zéros dans votre jeu de données. Ici vous avez une liste de pourcentage de valeurs nulles par colonne (entre 0 et 1) :

0.6611697598907094 WORK_EDUCATION
0.5906196483663051 SHOP
0.15968546556987515 OTHER
0.4517919980835284 AM
0.3695455825652879 PM
0.449195697003247 MIDDAY
0.8160996565242585 NIGHT
0.03156998520561604 AVG_VEH_CNT
1.618641571247746e-05 work_traveltime
2.2660981997468445e-05 shop_traveltime
0.6930343378622924 work_tripmile
0.605410795044367 shop_tripmile
0.185622578107549 TRPMILES_sum
3.237283142495492e-06 TRVL_MIN_sum
0.185622578107549 TRPMILES_mean
0.469645614614391 HBO
0.5744850291841075 HBSHOP
0.8137429143965219 HBW
0.5307266729469959 NHB
0.2017960446874565 DWELTIME_mean
1.618641571247746e-05 TRVL_MIN_mean
0.6959996892208183 work_dweltime
0.6099365168775757 shop_dweltime
0.0009258629787537107 firsttrip_time
0.002949164942813393 lasttrip_time
0.7442934791405661 age_2.0
0.7541995655566023 age_3.0
0.7081200773063214 age_4.0
0.9401296855626884 age_5.0
0.3490503429901489 KNN_result

En bref : Les NN sont rarement les meilleurs modèles pour classer soit de petites quantités de données, soit des données déjà représentées de manière compacte par quelques colonnes non hétérogènes. Assez souvent, les méthodes boostées ou GLM produiraient de meilleurs résultats pour un effort similaire.

Que pouvez-vous faire avec votre modèle ? De manière contre-intuitive, entraver parfois la capacité du réseau peut être bénéfique, en particulier lorsque le nombre de paramètres réseau dépasse le nombre de points d'apprentissage. On peut réduire le nombre de neurones, comme dans votre cas, en définissant la taille des couches sur 16 environ et en supprimant simultanément les couches; introduire des régularisations (lissage des étiquettes, décroissance des poids, etc.) ; ou générer plus de données en ajoutant plus de colonnes dérivées dans différentes échelles (log, binaire).

Une autre approche consisterait à rechercher des modèles NN conçus pour votre type de données. Comme, par exemple, les réseaux de neurones auto-normalisants ou l'apprentissage large et profond pour les systèmes de recommandation.

Si vous n'essayez qu'une seule chose, je vous recommande de faire une recherche sur la grille du taux d'apprentissage ou d'essayer plusieurs optimiseurs différents.

Comment prendre une meilleure décision sur le modèle à utiliser ? Parcourez les concours kaggle.com terminés et trouvez des ensembles de données similaires à celui que vous avez sous la main, puis découvrez les techniques utilisées par les meilleurs sites.