Ich habe versucht zu sehen, wie viel Strombedarf durch maschinelles Lernen vorhergesagt werden kann, also werde ich das Verfahren organisieren.
Es ist ein halbes Jahr her, seit ich diesen Artikel geschrieben habe, und ich habe viel über neue Dinge gelernt, also habe ich den Artikel für Teil 2 geschrieben. Vorhersage des Strombedarfs durch maschinelles Lernen Teil 2 ](http://qiita.com/mix_dvd/items/1f96f5202614dbea93e0)
Der folgende Artikel wurde ebenfalls am 22. Dezember 2017 erstellt. Bitte beziehen Sie sich auch darauf. Stromverbrauchsprognose mit TensorFlow mit Keras
Maschine: MacBook Air Mid 2012 Sprache: Python 3.5.1 Ausführen: Jupyter Notebook 4.2.1 Bibliothek: scikit-learn auf Anaconda 4.1.0
Laden Sie zunächst die Daten zum Strombedarf von der Tokyo Electric Power-Website herunter.
http://www.tepco.co.jp/forecast/html/download-j.html
Der Dateiname war "juyo-2016.csv". Die heruntergeladenen Daten sind eine CSV mit Datum, Uhrzeit und tatsächlicher Leistung. Da sie jedoch eine zusätzliche Zeichenfolge enthalten, korrigieren Sie sie und speichern Sie sie als UTF-8.
Das Format der gespeicherten Daten ist wie folgt.
DATE | TIME | Performance(10.000 kW) |
---|---|---|
2016/04/01 | 00:00 | 234 |
2016/04/01 | 01:00 | 235 |
... |
Als ich als nächstes nach Referenzmaterial suchte, konnte ich frühere Wetterdaten von der Meteorologischen Agentur herunterladen, sodass ich die Daten für denselben Zeitraum und dasselbe Intervall wie die Daten zum Strombedarf herunterladen werde.
http://www.data.jma.go.jp/gmd/risk/obsdl/index.php
Der Dateiname war "data.csv". Die heruntergeladenen Daten sind CSV von Datum und Uhrzeit, Temperatur, Qualitätsinformationen und einheitlicher Nummer. Da sie jedoch eine kleine zusätzliche Zeichenfolge enthalten, korrigieren Sie sie und speichern Sie sie als UTF-8.
Das Format der gespeicherten Daten ist wie folgt.
Datum (und Uhrzeit | Temperatur(℃) |
---|---|
2016-04-01 00:00 | 15 |
2016-04-01 01:00 | 16 |
... |
python
import pandas as pd
import numpy as np
#Leistungsdaten lesen
kw_df = pd.read_csv("juyo-2016.csv")
#Temperaturdaten lesen
temp_df = pd.read_csv("data.csv")
python
import pandas as pd
url = "http://www.tepco.co.jp/forecast/html/images/juyo-2016.csv"
kw_df = pd.read_csv(url, encoding="shift_jis", skiprows=2)
kw_df.head()
file = "data.csv"
temp_df = pd.read_csv(file, encoding="shift_jis", skiprows=4)
temp_df = temp_df[temp_df.columns[:2]]
temp_df.columns = ["Datum (und Uhrzeit","Temperatur(℃)"]
Bei der Anwendung auf maschinelles Lernen kombinieren wir die Daten und konvertieren sie in numerische Daten für maschinelles Lernen. Erstens sind die Datumsdaten unbrauchbar, also konvertieren wir sie in Tagesdaten.
[Beispiel] Sonntag-> 0 Montag-> 1 ...Und
Da es sich um stündliche Daten handelt, konvertieren Sie als Nächstes die Zeit in Daten.
[Beispiel] 0:00 -> 0 1:00 -> 1 ...Und
python
#Daten kombinieren
df = kw_df
df["Temperatur"] = temp_df["Temperatur(℃)"]
#Tagesdaten abrufen
import datetime
pp = df["DATE"]
tmp = []
for i in range(len(pp)):
d = datetime.datetime.strptime(pp[i], "%Y/%m/%d")
tmp.append(d.weekday())
df["weekday"] = tmp
#Zeitdaten abrufen
pp = df["TIME"]
tmp = []
for i in range(len(pp)):
d = datetime.datetime.strptime(pp[i], "%H:%M")
tmp.append(d.hour)
df["hour"] = tmp
Erstellen Sie Trainingsdaten und Testdaten aus den verarbeiteten Daten. Hier sind die für die Eingabe verwendeten Variablen "Temperatur", "Tag" und "Zeit", und die Ausgangsvariablen sind "Leistung".
Die Folge der verarbeiteten Daten ist "DATUM", "ZEIT", "Ist (10.000 kW)", "Temperatur", "Wochentag", "Stunde", also Eingabe (erklärende Variable) 3,4, Aus der 5. Spalte erhalten, verwendet die Ausgabe (Ausgabevariable) das tatsächliche Ergebnis (10.000 kW) in der 2. Spalte. Es normalisiert auch die Daten für maschinelles Lernen.
python
#Eingang
pp = df[["Temperatur","weekday","hour"]]
X = pp.as_matrix().astype('float')
#Ausgabe
pp = df["Performance(10.000 kW)"]
y = pp.as_matrix().flatten()
#Laden Sie das Kreuzvalidierungsmodul
from sklearn import cross_validation
#Trainingsset mit beschrifteten Daten(X_train, y_train)Und Testset(X_test, y_test)Eingeteilt in
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=.2, random_state=42)
#Laden Sie das Normalisierungsmodul
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Versuchen wir es mit maschinellem Lernen mit SVM.
python
#Modul laden
from sklearn import svm
model = svm.SVC()
#Lernen
model.fit(X_train, y_train)
# model.score(X,y)Verwenden Sie diese Option, um die Vorhersagegenauigkeit zu erhalten
print(model.score(X_test,y_test))
Die vorhergesagte Punktzahl ist "0.00312989045383"! !! Ich war überrascht, wie niedrig die Punktzahl war! !! Es ist nicht gut! Du denkst ...
Um zu sehen, wie es aussieht, habe ich ein Diagramm gezeichnet und es überprüft.
python
#Fehlerberechnung
pp = pd.DataFrame({'kw': np.array(y_test), "result": np.array(result)})
pp["err"] = pp["kw"] - pp["result"]
pp.plot()
Irgendwie scheint es so zu folgen, wie es ist (^ - ^) Überprüfen Sie das Vorhersageergebnis mit tatsächlichen Werten.
python
err_max = 0
err_min = 50000
err_ave = 0
for i in range(len(pp)):
if err_max < pp["err"][i]:
err_max = pp["err"][i]
if err_min > pp["err"][i]:
err_min = pp["err"][i]
err_ave += pp["err"][i]
print(err_max)
print(err_min)
print(err_ave / i)
Das Ausführungsergebnis ist wie folgt.
1571
-879
114.81661442
Was ist mit diesem Ergebnis? Ich kann nicht sagen, ob es gut oder schlecht ist ... (-_-;)
Eigentlich denke ich, ich muss mehr darüber nachdenken, aber ich dachte, wenn es eine Situation gäbe, in der ich in einer Situation, in der es nur wenige Daten aus der Vergangenheit gab, eine Prognose des Strombedarfs erstellen müsste, wäre dies ein gutes Referenzergebnis.
Übrigens wurden die Jupyter Notebook-Datei und die verarbeitete CSV-Datei auf GitHub veröffentlicht. Bitte lesen Sie auch diese.
https://github.com/shinob/predict_kw
Recommended Posts