[PYTHON] [Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen

Geschichte verändern

** 31.08.2016 Korrigiert, da bei der AUC-Berechnung nur "gut" angezeigt wurde **

Überblick

Apropos CNN (Convolutional Neural Network) in Deep Learning, obwohl die Bildverarbeitung die Hauptsache ist, habe ich keine Analyse in Bezug auf die Bildverarbeitung durchgeführt, daher möchte ich dieses Mal überprüfen, ob eine Wettervorhersage aus meteorologischen Bildern möglich ist. Überlegen.

Vorbereitung

Wetterbilder erhalten

Meteorologische Bilder wurden von Website der Kochi-Universität heruntergeladen. Erhalten Sie Daten von Januar 2015 bis Juli 2016. Ich habe das Bild [wie folgt] verwendet (http://weather.is.kochi-u.ac.jp/sat/gms.fareast/2016/08/27/fe.16082717.jpg). Da es stündlich Daten gibt, habe ich die Daten außerdem um 17:00 Uhr erhalten.

fe.16082717.jpg

Quelle: Bereitgestellt von der Kochi University, Universität Tokio, Meteorological Agency

Überwinde das Wetter

Das vergangene Wetter kann auf der [Seite] der Meteorologischen Agentur (http://www.data.jma.go.jp/risk/obsdl/index.php) abgerufen werden. Dies sind auch tägliche Wetterdaten von Januar 2015 bis Juli 2016. Der Ort war Tokio und ich nutzte das Tageswetter.

Problemstellung

Das Problem besteht darin, "das schöne Wetter und den Regen des nächsten Tages anhand des Wetterbildes in der Nähe von Japan am Vortag um 17:00 Uhr vorherzusagen". Das Wetter der Meteorologischen Agentur umfasst "Regen nach schönem Wetter" und "bewölkt". Wenn jedoch Regen enthalten ist, wird er als "Regen" behandelt, andernfalls wird er als "fein" behandelt und es handelt sich um ein binäres Klassifizierungsproblem.

Vorverarbeitung

Das Wetter von morgen wird nicht nur von der Bewegung der Wolken in der Nähe von Tokio, sondern auch von Westwinden beeinflusst. Wir brauchen also eine größere Auswahl an meteorologischen Bildern, aber wir brauchen das Wetter nicht weit von Japan entfernt. Also werde ich das Bild zuschneiden, um Daten in der Nähe von Japan zu erhalten.

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

w = 640
h = 480
"""Einstellung, nur um Japan heraus zu schneiden"""
sw = 320
sh = 65
ew = 540
eh = 320
"""Bildkompression"""
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

Es nimmt eine Liste von Daten auf, gibt die Bilder als Numpy-Matrix zurück und gibt auch das Datum zurück, an dem der Fehler aufgetreten ist. Das Bildobjekt im enthält ein Bild. Wenn Sie es jedoch in eine Matrix mit numpy konvertieren, liegt es in der Reihenfolge (Breite, Höhe, Kanal). Achten Sie daher darauf, dass es transponiert wird. Hier wird das Bild (480 x 640) so weit zugeschnitten, dass der japanische Archipel enthalten ist. Es sieht wie folgt aus.

test02.jpg

Da die Daten nach dem Erstellen einer Matrix Daten von 0 bis 255 in jeder Zelle enthalten, teilen Sie sie durch 255 und konvertieren Sie sie in Daten von 0 bis 1.

Aufgrund der Lernzeit von CNN danach dachte ich darüber nach, das Bild zu komprimieren, aber diesmal hörte ich auf.

CNN-Modell

Das Modell des Faltungsnetzwerks verwendet das zuvor verwendete. Konohen oder Konohen oder [Konohen](http: // qiita) Siehe .com / wbh / items / da881fac695f17042b19).

Die Parametereinstellungen sind wie folgt.

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 und row_dim entsprechen der Breite und Höhe jedes Bildes. Da die Anzahl der Kanäle RGB ist, wird sie auf 3 gesetzt. Verwenden Sie auch max Pooling. Wenn Sie die Filtergröße oder die Poolgröße erhöhen, dauert die Berechnung länger. (süchtig nach)

Selbst mit dieser Einstellung dauert es auf meinem MacBook Pro sehr lange. Also habe ich diesmal Epoche = 50 gesetzt.

Trainingsdaten und Testdaten

Da die Berechnung viel Zeit in Anspruch nimmt, gelten die Trainingsdaten für ein Jahr vom 1. Januar 2015 bis zum 31. Dezember 2015 und die Testdaten vom 1. Januar 2016 bis zum 31. Juli 2016. Auch das braucht Zeit. Bildverarbeitung ist beängstigend ...

Modelltraining und Testgenauigkeit

Der Lernprozess und die Testgenauigkeit sind wie folgt. train_test.png

Auch die Lerngenauigkeit wird wahrscheinlich zunehmen, aber die Testgenauigkeit holt nicht auf.

Testergebnisse

In AUC ~~ 0,78 ~~ ** 0,70 ** sind verschiedene Indikatoren wie folgt.

Precision Recall F-Score
Regen 0.54 0.67 0.6
Fein 0.83 0.74 0.78
durchschnittlich 0.74 0.72 0.72

Ich denke, es ist ein ziemlich gutes Gefühl für das, was ich getan habe. Von den Regenprognosen betrug der tatsächliche Regen jedoch 54%, was niedrig ist.

Zeichnen wir das tatsächliche Verhältnis von Regen und Schönwetter und ordnen sie in absteigender Reihenfolge mit der Wahrscheinlichkeit von Regen an.

test_ruiseki.png

Es scheint nicht zufällig, sondern prädiktiv zu sein. Das ist richtig, denn die tatsächliche Regenquote in den Testdaten beträgt 30% und die Sonnenquote 60%.

Umgang mit Trübungen

Es scheint, dass einer der Gründe, warum sich die Genauigkeit nicht verbessert, die Behandlung von "Trübung" ist. Es gibt Fälle von "sonnigem und dann bewölktem" und "trübem vorübergehenden Regen", und der Trübungsgrad in den tatsächlichen Daten übersteigt 70%. (Zu bewölkt) Diesmal wird Ersteres als fein und Letzteres als Regen behandelt. Daher scheint es, dass Sie nicht wissen, welche subtile Situation vorliegt. Das ist eine Herausforderung. In diesem Ergebnis scheint es jedoch, dass der offensichtliche Regen mit einem guten Maß an Genauigkeit getroffen wird.

Die dreiwertige Klassifizierung ist ein schwieriges Problem, da die Trübung dominiert.

Die Wettervorhersage ist unglaublich.

von jetzt an

Ich frage mich, ob dies der Algorithmus ist, aber für die Daten ist es beispielsweise möglich, den Unterschied zum Bild vom Vortag zu nehmen oder die Pixel der Basiskarte zu entfernen. Ich denke, ich werde es nach und nach tun.

Recommended Posts

[Teil 4] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Deep Learning aus den mathematischen Grundlagen Teil 2 (während der Teilnahme)
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Verbessertes Lernen, um von null bis tief zu lernen
Bildausrichtung: von SIFT bis Deep Learning
"Deep Learning from Grund" Memo zum Selbststudium (Teil 12) Deep Learning
Erhalten Sie Daten von Poloniex, einem virtuellen Geldwechsel, über die API und verwenden Sie Deep Learning, um den Preis des nächsten Tages vorherzusagen.
Über die Reihenfolge des Lernens von Programmiersprachen (vom Anfänger bis zum Fortgeschrittenen) Teil 2
Deep Learning-Anfänger versuchten die Wettervorhersage aus meteorologischen Satellitenbildern mit Keras
Tweet die Wettervorhersage mit Bot Teil 2
Deep Learning von Grund auf neu ① Kapitel 6 "Lerntechniken"
POST-Images von ESP32-CAM (MicroPython) an den Server
Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-
Deep Learning von Grund auf neu
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Othello ~ Aus der dritten Zeile von "Implementation Deep Learning" (4) [Ende]
Ich habe versucht, Dropout zu erklären
Deep Learning von Grund auf 1-3 Kapitel
Papier: Maschinelles Lernpapier, das Bilder im Gehirn reproduziert (Tiefenbildrekonstruktion aus menschlicher Gehirnaktivität)
Verwendung des Generators
[Deep Learning] Untersuchen Sie, wie jede Funktion des Faltungsnetzes verwendet wird [DW Tag 3]
[Deep Learning von Grund auf neu] Ich habe versucht, die Gradientenbestätigung auf leicht verständliche Weise zu erklären.
[Python] Ich habe versucht, LINE BOT die Wettervorhersage beantworten zu lassen
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
(Deep Learning) Ich habe Bilder von der Flickr-API gesammelt und versucht, durch Transferlernen mit VGG16 zu unterscheiden
Einführung in Deep Learning ~ Lernregeln ~
Ich habe das Toho-Projekt mit Deep Learning aufgenommen ... ich wollte.
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
"Deep Learning from Grund" Memo zum Selbststudium (Teil 8) Ich habe die Grafik in Kapitel 6 mit matplotlib gezeichnet
Wie benutzt man den Dekorateur?
Einführung in Deep Learning ~ Backpropagation ~
[Deep Learning von Grund auf neu] Informationen zu den Ebenen, die für die Implementierung der Backpropagation-Verarbeitung in einem neuronalen Netzwerk erforderlich sind
Kapitel 1 Einführung in Python Schneiden Sie nur die guten Punkte des Deeplearning aus, die von Grund auf neu erstellt wurden
[Maschinelles Lernen] Verstehen Sie aus der Mathematik, warum der Korrelationskoeffizient zwischen -1 und 1 liegt.
Lua-Version Deep Learning von Grund auf neu Teil 6 [Inferenzverarbeitung für neuronale Netze]
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
[Python + Heroku] Vom Zustand ohne Python zur Anzeige von etwas mit Heroku (Teil 2)
Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 4 Memo
Verwendung der Zip-Funktion
Verwendung des optparse-Moduls
Deep Learning / Deep Learning von Grund auf neu Kapitel 3 Memo
Wie man SWIG von waf benutzt
Deep Learning / Deep Learning von Null 2 Kapitel 5 Memo
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Versuchen Sie es mit TensorFlow Part 2
Tiefes Lernen von Grund auf neu (Kostenberechnung)
Tiefes Lernen, um ohne GPU zu beginnen
Einführung in Deep Learning ~ Codierungsvorbereitung ~
Poste ein Bild von Python auf Tumblr
Verwenden Sie die Flickr-API von Python
Deep Learning / Deep Learning von Null 2 Kapitel 7 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 8 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 5 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 4 Memo
Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 3 Memo
Deep Learning Memo von Grund auf neu gemacht