[PYTHON] [Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques

modifier l'historique

** 2016/8/31 Corrigé car le calcul de l'AUC ne voyait que «bien» **

Aperçu

En parlant de CNN (réseau de neurones convolutifs) en Deep Learning, bien que le traitement d'image soit le principal, je n'ai fait aucune analyse liée au traitement d'image, donc cette fois je voudrais vérifier ** si les prévisions météorologiques peuvent être faites à partir d'images météorologiques ** pense.

Préparation

Obtention d'images météorologiques

Des images météorologiques ont été téléchargées à partir du site de l'Université de Kochi. Obtenez les données de janvier 2015 à juillet 2016. J'ai utilisé l'image comme celle-ci. De plus, comme il y a des données toutes les heures, j'ai eu les données à 17h00.

fe.16082717.jpg

Source: Fourni par l'Université de Kochi, Université de Tokyo, Agence météorologique

Obtenez le temps passé

Le temps passé peut être obtenu auprès de la [page] de l'Agence météorologique (http://www.data.jma.go.jp/risk/obsdl/index.php). Il s'agit également de données météorologiques quotidiennes de janvier 2015 à juillet 2016. L'endroit était Tokyo et j'ai utilisé la météo de jour.

Problème de réglage

Le problème est "de prédire le beau temps et la pluie du lendemain à partir de l'image météo près du Japon à 17h00 la veille". Le temps de l'Agence météorologique comprend «pluie après beau temps» et «nuageux», mais si la pluie est incluse, elle est traitée comme «pluie», sinon elle est traitée comme «fine», et c'est un problème de classification binaire.

Prétraitement

La météo de demain sera affectée non seulement par le mouvement des nuages près de Tokyo, mais également par les vents d'ouest, nous avons donc besoin d'une plus large gamme d'images météorologiques, mais nous n'avons pas besoin de la météo loin du Japon. Donc, je vais recadrer l'image pour en faire des données près du Japon.

import numpy as np
from PIL import Image
import datetime as dt

w = 640
h = 480
"""Réglage à couper uniquement autour du Japon"""
sw = 320
sh = 65
ew = 540
eh = 320
"""Compression d'image"""
is_comp = False

def get_mat(dates=[]):
    """

    :param dates:
    :return:
    """
    l = len(dates)
    if not is_comp:
        wr = ew - sw
        hr = eh - sh
    else:
        wr = 50
        hr = 50

    mat = np.zeros((l,3,wr,hr),dtype=np.float32)
    file_base = base_file_dir + "fe.%s" + base_hour + ".jpg "

    j = 0
    err_dates = []
    for ddd in dates:
        dd = dt.datetime.strptime(ddd,"%Y/%m/%d")
        dd_str = dd.strftime("%y%m%d")
        try:
            im = Image.open(file_base % (dd_str))
            im = im.crop((sw,sh,ew,eh))
            im = im.resize((wr, hr))
            mat0 = np.array(im)
            for i in range(0,3):
                mat[j,i,:,:] = mat0[:,:,i].T
            j += 1
        except:
            err_dates.append(ddd)
            print dd_str + " --> Error!!"
    return mat[0:j],err_dates

Il prend une liste de dates, renvoie les images sous forme de matrice numpy et renvoie également la date à laquelle l'erreur s'est produite. L'objet image im contient une image, mais si vous la convertissez en matrice avec numpy, elle sera dans l'ordre de (largeur, hauteur, canal), alors faites attention à ce qu'elle soit transposée. Ici, le rognage est effectué à partir de l'image (480x640) dans la mesure où l'archipel japonais est inclus. Cela ressemble à ce qui suit.

test02.jpg

Étant donné que les données après avoir créé une matrice contiennent des données de 0 à 255 dans chaque cellule, divisez-les par 255 et convertissez-les en données de 0 à 1.

En raison du temps d'apprentissage de CNN après cela, j'ai pensé à compresser l'image, mais cette fois j'ai arrêté.

Modèle CNN

Le modèle du réseau de neurones convolutif utilise celui qui était utilisé auparavant. Konohen ou Konohen ou [Konohen](http: // qiita) Voir .com / wbh / items / da881fac695f17042b19).

Les réglages des paramètres sont les suivants.

params = {"clm_dim":clm_dim,"in_channels":3,"out_channels":3,"row_dim":row_dim,"filt_clm":3,"filt_row":3,"pool_clm":3,"pool_row":3,"batchsize":200,"hidden_dim":500,"n_classes":2}

clm_dim et row_dim correspondent à la largeur et à la hauteur de chaque image. De plus, comme le nombre de canaux est RVB, il est réglé sur 3. Utilisez également la mise en commun maximale. Si vous augmentez la taille du filtre ou la taille du pool, le calcul prendra plus de temps. (accro à)

Même avec ce paramètre, cela prend beaucoup de temps sur mon macbook pro. Donc, cette fois, j'ai mis epoch = 50.

Données d'entraînement et données de test

Comme cela prend beaucoup de temps de calcul, les données de formation sont pour un an du 1er janvier 2015 au 31 décembre 2015, et les données de test sont du 1er janvier 2016 au 31 juillet 2016. Même cela prend du temps. Le traitement d'image fait peur ...

Formation du modèle et précision des tests

Le processus d'apprentissage et la précision des tests sont les suivants. train_test.png

En outre, la précision d'apprentissage est susceptible d'augmenter, mais la précision du test ne rattrape pas.

résultats de test

En AUC ~~ 0,78 ~~ ** 0,70 **, divers indicateurs sont les suivants.

Precision Recall F-Score
pluie 0.54 0.67 0.6
Bien 0.83 0.74 0.78
moyenne 0.74 0.72 0.72

Je pense que c'est une assez bonne impression de ce que j'ai fait. Cependant, des prévisions de pluie, seulement 54% ont effectivement plu.

Tracons le taux de pluie réel et le rapport fin en les arrangeant par ordre décroissant avec la probabilité de pluie.

test_ruiseki.png

Il semble que ce ne soit pas aléatoire mais prédictif. C'est vrai, car le taux de pluie réel dans les données de test est de 30% et le rapport ensoleillé est de 60%.

Gestion de la nébulosité

Il semble que l'une des raisons pour lesquelles la précision ne s'améliore pas est le traitement du "trouble". Il y a des cas de «soleil puis nuageux» et de «pluie temporaire nuageuse», et le taux de nébulosité dans les données réelles dépasse 70%. (Trop nuageux) Cette fois, le premier est traité comme une amende et le second comme une pluie. Par conséquent, il semble que vous ne savez pas quelle est la situation délicate. Ceci est un défi. Cependant, dans ce résultat, il semble que la pluie évidente soit frappée avec un bon degré de précision.

La classification trivalente est un problème difficile car la nébulosité devient dominante.

Le prévisionniste météorologique est incroyable.

à partir de maintenant

Je me demande si c'est l'algorithme, mais pour les données, par exemple, il est possible de prendre la différence avec l'image de la veille ou de supprimer les pixels de la carte de base. Je pense que je vais le faire petit à petit.

Recommended Posts

[Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Apprendre en profondeur à partir des bases mathématiques Partie 2 (pendant la fréquentation)
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
Apprentissage amélioré pour apprendre de zéro à profond
Alignement d'image: du SIFT au deep learning
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 12) Deep learning
Obtenez des données de Poloniex, un bureau de change virtuel, via l'API et utilisez le Deep Learning pour prédire le prix du lendemain.
À propos de l'ordre d'apprentissage des langages de programmation (de débutant à intermédiaire) Partie 2
Les débutants du Deep Learning ont essayé les prévisions météorologiques à partir d'images satellitaires météorologiques à l'aide de Keras
Tweet les prévisions météo avec le bot Partie 2
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
POST des images depuis ESP32-CAM (MicroPython) vers le serveur
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow) - Partie 2
Apprentissage profond à partir de zéro
Créer un ensemble de données d'images à utiliser pour la formation
Je voulais utiliser la bibliothèque Python de MATLAB
Othello ~ De la troisième ligne de "Implementation Deep Learning" (4) [Fin]
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
Apprentissage profond à partir de zéro 1 à 3 chapitres
Papier: Papier d'apprentissage automatique qui reproduit des images dans le cerveau, (reconstruction d'image profonde à partir de l'activité cérébrale humaine)
Comment utiliser le générateur
[Apprentissage en profondeur] Découvrez comment utiliser chaque fonction du réseau neuronal convolutif [DW jour 3]
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
[Python] J'ai essayé de laisser LINE BOT répondre aux prévisions météo
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
(Deep learning) J'ai collecté des images de l'API Flickr et essayé de discriminer en transférant l'apprentissage avec VGG16
Introduction au Deep Learning ~ Règles d'apprentissage ~
J'ai capturé le projet Toho avec Deep Learning ... je le voulais.
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 8) J'ai dessiné le graphique du chapitre 6 avec matplotlib
Comment utiliser le décorateur
Introduction au Deep Learning ~ Rétropropagation ~
[Deep Learning from scratch] À propos des couches requises pour implémenter le traitement de rétropropagation dans un réseau neuronal
Chapitre 1 Introduction à Python Découpez uniquement les bons points de Deeplearning à partir de zéro
[Apprentissage automatique] Comprenez à partir des mathématiques pourquoi le coefficient de corrélation varie de -1 à 1.
Version Lua Apprentissage profond à partir de zéro Partie 6 [Traitement d'inférence de réseau neuronal]
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (Partie 1)
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (partie 2)
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Comment utiliser la fonction zip
Comment utiliser le module optparse
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
Comment utiliser SWIG de WAF
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Apprentissage profond à partir de zéro (calcul des coûts)
Apprentissage profond pour démarrer sans GPU
Introduction à l'apprentissage profond ~ Préparation au codage ~
Publier une image de Python sur Tumblr
Utilisez l'API Flickr de Python
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 7 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 8 Mémo
Deep learning / Deep learning made from scratch Chapitre 5 Mémo
Deep learning / Deep learning made from scratch Chapitre 4 Mémo
Deep learning / Deep learning from scratch 2 Chapitre 3 Mémo
Mémo d'apprentissage profond créé à partir de zéro