** 31.08.2016 Korrigiert, da bei der AUC-Berechnung nur "gut" angezeigt wurde **
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.
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.
Quelle: Bereitgestellt von der Kochi University, Universität Tokio, Meteorological Agency
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.
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.
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.
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.
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.
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 ...
Der Lernprozess und die Testgenauigkeit sind wie folgt.
Auch die Lerngenauigkeit wird wahrscheinlich zunehmen, aber die Testgenauigkeit holt nicht auf.
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.
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%.
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.
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