Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anadiedrichs/f847659d5570938f5f300efb16f81ece to your computer and use it in GitHub Desktop.
Save anadiedrichs/f847659d5570938f5f300efb16f81ece to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# LSTM pre-processing time series\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The model predict the next T datapoints of the serie given look_back datapoints from the past\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## load libraries"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"\n",
"# -*- coding: utf-8 -*-\n",
"# LSTM for international airline passengers problem with regression framing\n",
"import numpy\n",
"import matplotlib.pyplot as plt\n",
"import pandas\n",
"import math\n",
"from keras.models import Sequential\n",
"from keras.layers.core import Dense, Dropout, Activation\n",
"from keras.layers import Dense, Input\n",
"from keras.layers import LSTM\n",
"from keras.layers.wrappers import TimeDistributed\n",
"from sklearn.preprocessing import MinMaxScaler\n",
"from sklearn.metrics import mean_squared_error,mean_absolute_error\n",
"from keras.layers.core import Flatten"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## function to create datasets input and output"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def create_dataset(dataset, look_back=1, time_step = 1):\n",
" dataX, dataY = [], []\n",
" for i in range(len(dataset)-look_back-time_step):\n",
" a = dataset[i:(i+look_back),0] # processing only one sensor\n",
" dataX.append(a)\n",
" b = dataset[i + look_back:(i + look_back + time_step),0]\n",
" dataY.append(b) # processing only one sensor\n",
" return numpy.array(dataX), numpy.array(dataY)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## load data and plotting"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(975, 1)\n"
]
}
],
"source": [
"# fix random seed for reproducibility\n",
"numpy.random.seed(7)\n",
"dataframe = pandas.read_csv('peach_four_sensors.csv', usecols=[1], engine='python', skiprows=2) #,skipfooter=3\n",
"print(dataframe.shape)\n"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fc10445d710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(dataframe)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\n",
"look_back = 36 # 6 hs previous\n",
"T = 18 #T=18 means 3 hs later, T=36 means 6 hs later\n",
"features = 1 # how many sensors or columns in dataframe"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"dataset = dataframe.values\n",
"dataset = dataset.astype('float32')\n",
"# normalize the dataset\n",
"scaler = MinMaxScaler(feature_range=(0, 1))\n",
"dataset = scaler.fit_transform(dataset)\n",
"# split into train and test sets\n",
"train_size = int(len(dataset) * 0.67)\n",
"test_size = len(dataset) - train_size\n",
"train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]\n",
"# reshape into X=t and Y=t+1\n",
"trainX, trainY = create_dataset(train, look_back, T)\n",
"testX, testY = create_dataset(test, look_back, T)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(599, 36)\n",
"36\n",
"(599, 18)\n"
]
}
],
"source": [
"print(trainX.shape)\n",
"print(len(trainX[0,]))\n",
"#print(trainX.shape[1])\n",
"print(trainY.shape)\n",
"#print(len(trainY[0,]))\n",
"#print(trainX.shape[0])"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(599, 36, 1)\n",
"(599, 18)\n"
]
}
],
"source": [
"# reshape input to be [samples, time steps, features]\n",
"# is it ok this? how should be trainX & testX reshape?\n",
"trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1],features))\n",
"#trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n",
"testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1],features))\n",
"print(trainX.shape)\n",
"print(trainY.shape)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ana/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:12: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(input_dim=36, units=18)`\n",
" if sys.path[0] == '':\n"
]
}
],
"source": [
"# create and fit the LSTM network\n",
"model = Sequential()\n",
"#shape (batch_size, timesteps, input_dim), how?\n",
"model.add(LSTM(64,return_sequences=True,input_shape=(None,features)))\n",
"model.add(LSTM(64, return_sequences=False))\n",
"\n",
"model.add(Dropout(.2)) \n",
"\n",
"# Dense(16, input_shape=(5,3))\n",
"# would result in a Dense network with 3 inputs and 16 outputs which would be applied independently for each of 5 steps\n",
"\n",
"model.add(Dense(input_dim=36, output_dim=T))\n",
"\n",
"model.add(Activation('linear'))\n",
"#model.compile(loss='mean_squared_error', optimizer='adam')\n",
"\n",
"model.compile(loss='mean_squared_error', optimizer='rmsprop') #'rmsprop'\n"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg height=\"476pt\" viewBox=\"0.00 0.00 324.00 476.00\" width=\"324pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 472)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" points=\"-4,4 -4,-472 320,-472 320,4 -4,4\" stroke=\"none\"/>\n",
"<!-- 140466977018096 -->\n",
"<g class=\"node\" id=\"node1\"><title>140466977018096</title>\n",
"<polygon fill=\"none\" points=\"-0.5,-421 -0.5,-467 316.5,-467 316.5,-421 -0.5,-421\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"77.5\" y=\"-440.3\">lstm_3_input: InputLayer</text>\n",
"<polyline fill=\"none\" points=\"155.5,-421 155.5,-467 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183\" y=\"-451.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"155.5,-444 210.5,-444 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183\" y=\"-428.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"210.5,-421 210.5,-467 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"263.5\" y=\"-451.8\">(None, None, 1)</text>\n",
"<polyline fill=\"none\" points=\"210.5,-444 316.5,-444 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"263.5\" y=\"-428.8\">(None, None, 1)</text>\n",
"</g>\n",
"<!-- 140466977207352 -->\n",
"<g class=\"node\" id=\"node2\"><title>140466977207352</title>\n",
"<polygon fill=\"none\" points=\"25,-337 25,-383 291,-383 291,-337 25,-337\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"74\" y=\"-356.3\">lstm_3: LSTM</text>\n",
"<polyline fill=\"none\" points=\"123,-337 123,-383 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-367.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"123,-360 178,-360 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-344.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"178,-337 178,-383 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-367.8\">(None, None, 1)</text>\n",
"<polyline fill=\"none\" points=\"178,-360 291,-360 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-344.8\">(None, None, 64)</text>\n",
"</g>\n",
"<!-- 140466977018096&#45;&gt;140466977207352 -->\n",
"<g class=\"edge\" id=\"edge1\"><title>140466977018096-&gt;140466977207352</title>\n",
"<path d=\"M158,-420.593C158,-412.118 158,-402.297 158,-393.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-393.096 158,-383.096 154.5,-393.096 161.5,-393.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 140466976756736 -->\n",
"<g class=\"node\" id=\"node3\"><title>140466976756736</title>\n",
"<polygon fill=\"none\" points=\"25,-253 25,-299 291,-299 291,-253 25,-253\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"74\" y=\"-272.3\">lstm_4: LSTM</text>\n",
"<polyline fill=\"none\" points=\"123,-253 123,-299 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-283.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"123,-276 178,-276 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"150.5\" y=\"-260.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"178,-253 178,-299 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-283.8\">(None, None, 64)</text>\n",
"<polyline fill=\"none\" points=\"178,-276 291,-276 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-260.8\">(None, 64)</text>\n",
"</g>\n",
"<!-- 140466977207352&#45;&gt;140466976756736 -->\n",
"<g class=\"edge\" id=\"edge2\"><title>140466977207352-&gt;140466976756736</title>\n",
"<path d=\"M158,-336.593C158,-328.118 158,-318.297 158,-309.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-309.096 158,-299.096 154.5,-309.096 161.5,-309.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 140466977019664 -->\n",
"<g class=\"node\" id=\"node4\"><title>140466977019664</title>\n",
"<polygon fill=\"none\" points=\"30,-169 30,-215 286,-215 286,-169 30,-169\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"92.5\" y=\"-188.3\">dropout_2: Dropout</text>\n",
"<polyline fill=\"none\" points=\"155,-169 155,-215 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"182.5\" y=\"-199.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"155,-192 210,-192 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"182.5\" y=\"-176.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"210,-169 210,-215 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"248\" y=\"-199.8\">(None, 64)</text>\n",
"<polyline fill=\"none\" points=\"210,-192 286,-192 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"248\" y=\"-176.8\">(None, 64)</text>\n",
"</g>\n",
"<!-- 140466976756736&#45;&gt;140466977019664 -->\n",
"<g class=\"edge\" id=\"edge3\"><title>140466976756736-&gt;140466977019664</title>\n",
"<path d=\"M158,-252.593C158,-244.118 158,-234.297 158,-225.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-225.096 158,-215.096 154.5,-225.096 161.5,-225.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 140466107158144 -->\n",
"<g class=\"node\" id=\"node5\"><title>140466107158144</title>\n",
"<polygon fill=\"none\" points=\"41.5,-85 41.5,-131 274.5,-131 274.5,-85 41.5,-85\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"92.5\" y=\"-104.3\">dense_2: Dense</text>\n",
"<polyline fill=\"none\" points=\"143.5,-85 143.5,-131 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"171\" y=\"-115.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"143.5,-108 198.5,-108 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"171\" y=\"-92.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"198.5,-85 198.5,-131 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"236.5\" y=\"-115.8\">(None, 64)</text>\n",
"<polyline fill=\"none\" points=\"198.5,-108 274.5,-108 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"236.5\" y=\"-92.8\">(None, 18)</text>\n",
"</g>\n",
"<!-- 140466977019664&#45;&gt;140466107158144 -->\n",
"<g class=\"edge\" id=\"edge4\"><title>140466977019664-&gt;140466107158144</title>\n",
"<path d=\"M158,-168.593C158,-160.118 158,-150.297 158,-141.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-141.096 158,-131.096 154.5,-141.096 161.5,-141.096\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 140466107158200 -->\n",
"<g class=\"node\" id=\"node6\"><title>140466107158200</title>\n",
"<polygon fill=\"none\" points=\"18.5,-1 18.5,-47 297.5,-47 297.5,-1 18.5,-1\" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"92.5\" y=\"-20.3\">activation_2: Activation</text>\n",
"<polyline fill=\"none\" points=\"166.5,-1 166.5,-47 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"194\" y=\"-31.8\">input:</text>\n",
"<polyline fill=\"none\" points=\"166.5,-24 221.5,-24 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"194\" y=\"-8.8\">output:</text>\n",
"<polyline fill=\"none\" points=\"221.5,-1 221.5,-47 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"259.5\" y=\"-31.8\">(None, 18)</text>\n",
"<polyline fill=\"none\" points=\"221.5,-24 297.5,-24 \" stroke=\"black\"/>\n",
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"259.5\" y=\"-8.8\">(None, 18)</text>\n",
"</g>\n",
"<!-- 140466107158144&#45;&gt;140466107158200 -->\n",
"<g class=\"edge\" id=\"edge5\"><title>140466107158144-&gt;140466107158200</title>\n",
"<path d=\"M158,-84.5931C158,-76.1177 158,-66.2974 158,-57.104\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"161.5,-57.0958 158,-47.0959 154.5,-57.0959 161.5,-57.0958\" stroke=\"black\"/>\n",
"</g>\n",
"</g>\n",
"</svg>"
],
"text/plain": [
"<IPython.core.display.SVG object>"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import SVG\n",
"from keras.utils.vis_utils import model_to_dot\n",
"\n",
"SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/100\n",
"40s - loss: 0.0117\n",
"Epoch 2/100\n",
"41s - loss: 0.0103\n",
"Epoch 3/100\n",
"40s - loss: 0.0107\n",
"Epoch 4/100\n",
"41s - loss: 0.0105\n",
"Epoch 5/100\n",
"47s - loss: 0.0099\n",
"Epoch 6/100\n",
"44s - loss: 0.0100\n",
"Epoch 7/100\n",
"47s - loss: 0.0098\n",
"Epoch 8/100\n",
"57s - loss: 0.0098\n",
"Epoch 9/100\n",
"57s - loss: 0.0096\n",
"Epoch 10/100\n",
"55s - loss: 0.0086\n",
"Epoch 11/100\n",
"55s - loss: 0.0085\n",
"Epoch 12/100\n",
"57s - loss: 0.0089\n",
"Epoch 13/100\n",
"55s - loss: 0.0084\n",
"Epoch 14/100\n",
"59s - loss: 0.0082\n",
"Epoch 15/100\n",
"57s - loss: 0.0081\n",
"Epoch 16/100\n",
"57s - loss: 0.0077\n",
"Epoch 17/100\n",
"48s - loss: 0.0079\n",
"Epoch 18/100\n",
"59s - loss: 0.0074\n",
"Epoch 19/100\n",
"55s - loss: 0.0073\n",
"Epoch 20/100\n",
"49s - loss: 0.0072\n",
"Epoch 21/100\n",
"55s - loss: 0.0073\n",
"Epoch 22/100\n",
"46s - loss: 0.0072\n",
"Epoch 23/100\n",
"38s - loss: 0.0071\n",
"Epoch 24/100\n",
"39s - loss: 0.0070\n",
"Epoch 25/100\n",
"39s - loss: 0.0069\n",
"Epoch 26/100\n",
"39s - loss: 0.0066\n",
"Epoch 27/100\n",
"39s - loss: 0.0069\n",
"Epoch 28/100\n",
"39s - loss: 0.0065\n",
"Epoch 29/100\n",
"37s - loss: 0.0067\n",
"Epoch 30/100\n",
"38s - loss: 0.0066\n",
"Epoch 31/100\n",
"39s - loss: 0.0060\n",
"Epoch 32/100\n",
"39s - loss: 0.0062\n",
"Epoch 33/100\n",
"39s - loss: 0.0059\n",
"Epoch 34/100\n",
"39s - loss: 0.0061\n",
"Epoch 35/100\n",
"39s - loss: 0.0061\n",
"Epoch 36/100\n",
"39s - loss: 0.0058\n",
"Epoch 37/100\n",
"38s - loss: 0.0058\n",
"Epoch 38/100\n",
"39s - loss: 0.0054\n",
"Epoch 39/100\n",
"38s - loss: 0.0059\n",
"Epoch 40/100\n",
"39s - loss: 0.0057\n",
"Epoch 41/100\n",
"38s - loss: 0.0051\n",
"Epoch 42/100\n",
"40s - loss: 0.0055\n",
"Epoch 43/100\n",
"40s - loss: 0.0051\n",
"Epoch 44/100\n",
"40s - loss: 0.0053\n",
"Epoch 45/100\n",
"40s - loss: 0.0052\n",
"Epoch 46/100\n",
"39s - loss: 0.0055\n",
"Epoch 47/100\n",
"40s - loss: 0.0051\n",
"Epoch 48/100\n",
"39s - loss: 0.0052\n",
"Epoch 49/100\n",
"40s - loss: 0.0050\n",
"Epoch 50/100\n",
"40s - loss: 0.0049\n",
"Epoch 51/100\n",
"40s - loss: 0.0049\n",
"Epoch 52/100\n",
"40s - loss: 0.0046\n",
"Epoch 53/100\n",
"40s - loss: 0.0049\n",
"Epoch 54/100\n",
"40s - loss: 0.0048\n",
"Epoch 55/100\n",
"40s - loss: 0.0046\n",
"Epoch 56/100\n",
"40s - loss: 0.0047\n",
"Epoch 57/100\n",
"38s - loss: 0.0045\n",
"Epoch 58/100\n",
"40s - loss: 0.0044\n",
"Epoch 59/100\n",
"39s - loss: 0.0040\n",
"Epoch 60/100\n",
"40s - loss: 0.0042\n",
"Epoch 61/100\n",
"40s - loss: 0.0041\n",
"Epoch 62/100\n",
"40s - loss: 0.0041\n",
"Epoch 63/100\n",
"39s - loss: 0.0040\n",
"Epoch 64/100\n",
"36s - loss: 0.0037\n",
"Epoch 65/100\n",
"39s - loss: 0.0037\n",
"Epoch 66/100\n",
"37s - loss: 0.0036\n",
"Epoch 67/100\n",
"38s - loss: 0.0037\n",
"Epoch 68/100\n",
"38s - loss: 0.0034\n",
"Epoch 69/100\n",
"35s - loss: 0.0036\n",
"Epoch 70/100\n",
"36s - loss: 0.0036\n",
"Epoch 71/100\n",
"35s - loss: 0.0033\n",
"Epoch 72/100\n",
"35s - loss: 0.0033\n",
"Epoch 73/100\n",
"41s - loss: 0.0034\n",
"Epoch 74/100\n",
"35s - loss: 0.0037\n",
"Epoch 75/100\n",
"36s - loss: 0.0034\n",
"Epoch 76/100\n",
"40s - loss: 0.0033\n",
"Epoch 77/100\n",
"37s - loss: 0.0032\n",
"Epoch 78/100\n",
"38s - loss: 0.0035\n",
"Epoch 79/100\n",
"35s - loss: 0.0031\n",
"Epoch 80/100\n",
"36s - loss: 0.0032\n",
"Epoch 81/100\n",
"36s - loss: 0.0030\n",
"Epoch 82/100\n",
"36s - loss: 0.0031\n",
"Epoch 83/100\n",
"36s - loss: 0.0032\n",
"Epoch 84/100\n",
"37s - loss: 0.0031\n",
"Epoch 85/100\n",
"37s - loss: 0.0030\n",
"Epoch 86/100\n",
"36s - loss: 0.0030\n",
"Epoch 87/100\n",
"37s - loss: 0.0028\n",
"Epoch 88/100\n",
"36s - loss: 0.0029\n",
"Epoch 89/100\n",
"36s - loss: 0.0028\n",
"Epoch 90/100\n",
"37s - loss: 0.0029\n",
"Epoch 91/100\n",
"37s - loss: 0.0027\n",
"Epoch 92/100\n",
"38s - loss: 0.0027\n",
"Epoch 93/100\n",
"37s - loss: 0.0029\n",
"Epoch 94/100\n",
"39s - loss: 0.0028\n",
"Epoch 95/100\n",
"41s - loss: 0.0027\n",
"Epoch 96/100\n",
"37s - loss: 0.0030\n",
"Epoch 97/100\n",
"37s - loss: 0.0026\n",
"Epoch 98/100\n",
"36s - loss: 0.0026\n",
"Epoch 99/100\n",
"36s - loss: 0.0025\n",
"Epoch 100/100\n",
"36s - loss: 0.0026\n"
]
}
],
"source": [
"# entreno con epochs 10, pero en cualquier experimento de otros ejemplos he visto que llegan a epochs 100\n",
"history = model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)\n",
"#thrown error for input dimensions\n"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dict_keys(['loss'])\n"
]
}
],
"source": [
"print(history.history.keys())"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fc0abd38f28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(268, 18)\n",
"(268, 18)\n"
]
}
],
"source": [
"#evaluate results on train and testing sets\n",
"\n",
"trainPredict = model.predict(trainX)\n",
"testPredict = model.predict(testX)\n",
"#inverse transform\n",
"\n",
"trainPredict = scaler.inverse_transform(trainPredict)\n",
"trainY_ = scaler.inverse_transform(trainY)\n",
"testY_ = scaler.inverse_transform(testY)\n",
"testPredict = scaler.inverse_transform(testPredict)\n",
"print(testPredict.shape)\n",
"print(testY_.shape)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"268\n"
]
}
],
"source": [
"print(testPredict.shape[0])\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 6.28210545 6.20149994 6.55800009 7.07473707 7.79850006 8.47894764\n",
" 8.42578983 8.00300026 7.78210545 8.02250004 8.2747364 8.4252634\n",
" 8.55449963 8.44789505 8.29684258 8.08300018 7.95263147 7.65649986]\n"
]
}
],
"source": [
"print(trainY_[0,:])"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 21.70949936 22.11473656 22.92000008 21.58947372 22.25749969\n",
" 24.2747364 23.89105225 24.7159996 25.67105293 25.03210449\n",
" 24.86899948 24.8615799 26.59449959 26.9904995 23.96368408\n",
" 22.83749962 21.33315849 20.74263191]\n"
]
}
],
"source": [
"print(testY_[0,:])"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 21.11172867 21.42520142 21.7344265 22.07173538 22.34594536\n",
" 22.68812943 22.97079849 23.19146538 23.34585381 23.54753113\n",
" 23.82490349 24.088974 24.17110825 24.32502174 24.56505775\n",
" 24.7787838 24.94233322 24.95349312]\n"
]
}
],
"source": [
"print(testPredict[0,:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quiero mostrar para cada testY\\_[i,:] su correspondiente testPredict\\[i,:]"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1.83700001 1.87105262 2.17000008 1.95949996 1.73105264 1.58222222\n",
" 1.19799995 1.21894741 1.30900002 1.56105268 1.84749997 2.05263162\n",
" 2.20263147 3.33049989 4.47149992 5.6420002 6.72263145 7.74894714]\n"
]
}
],
"source": [
"print(testY_[99,:])\n",
"\n",
"#df = pandas.DataFrame({'testY_real':testY_[:,0], 'testPred':testPredict[:,0]})\n",
"#print(df.values[30:238,:])\n"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1.56074369 1.72786713 2.00058842 2.26337719 2.49819922 2.7473166\n",
" 3.05175352 3.26558733 3.38446641 3.3726902 3.19600606 3.02028489\n",
" 2.86746144 2.61785698 2.4132874 2.27622461 2.22451234 2.3206737 ]\n"
]
}
],
"source": [
"print(testPredict[99,:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Por cada predicción a tres horas, calcular el RMSE y MAE"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [],
"source": [
"# DATAframe o array para guardar resultados\n",
"index = []\n",
"rmse = []\n",
"mae = []\n",
"for i in range(testPredict.shape[0]):\n",
" index.append(i)\n",
" rmse.append(math.sqrt(mean_squared_error(testY_[i,:], testPredict[i,:])))\n",
" mae.append( mean_absolute_error(testY_[i,:], testPredict[i,:]))\n",
" #print(i, \"rmse %.2f\" % (rmse[i]),\" mae %.2f\" % (mae[i]))\n"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>MAE</th>\n",
" <th>RMSE</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.564057</td>\n",
" <td>1.905111</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.675029</td>\n",
" <td>2.528658</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2.110533</td>\n",
" <td>3.098332</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2.772926</td>\n",
" <td>3.926500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2.478173</td>\n",
" <td>2.860632</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2.429895</td>\n",
" <td>3.084483</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>3.751128</td>\n",
" <td>4.824124</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>3.467863</td>\n",
" <td>4.334990</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>3.925537</td>\n",
" <td>4.926680</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>4.695890</td>\n",
" <td>5.609170</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>3.957635</td>\n",
" <td>4.713658</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>3.935733</td>\n",
" <td>4.552240</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>3.675592</td>\n",
" <td>4.142769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>4.882679</td>\n",
" <td>5.253860</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>5.046731</td>\n",
" <td>5.283937</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>1.744841</td>\n",
" <td>2.366325</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2.609835</td>\n",
" <td>2.723524</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>4.662142</td>\n",
" <td>5.370238</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>5.770406</td>\n",
" <td>6.523238</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>7.562086</td>\n",
" <td>8.459769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>7.589294</td>\n",
" <td>8.412863</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>7.567803</td>\n",
" <td>8.446760</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>8.615360</td>\n",
" <td>9.428759</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>6.563748</td>\n",
" <td>7.482100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>5.979612</td>\n",
" <td>6.894503</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>6.321163</td>\n",
" <td>7.116551</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>3.982562</td>\n",
" <td>4.818138</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>3.336992</td>\n",
" <td>3.897141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>2.470062</td>\n",
" <td>2.788293</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>1.734911</td>\n",
" <td>1.930680</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>238</th>\n",
" <td>2.504313</td>\n",
" <td>3.174432</td>\n",
" </tr>\n",
" <tr>\n",
" <th>239</th>\n",
" <td>2.116001</td>\n",
" <td>2.404801</td>\n",
" </tr>\n",
" <tr>\n",
" <th>240</th>\n",
" <td>3.482298</td>\n",
" <td>3.840016</td>\n",
" </tr>\n",
" <tr>\n",
" <th>241</th>\n",
" <td>2.890070</td>\n",
" <td>3.208608</td>\n",
" </tr>\n",
" <tr>\n",
" <th>242</th>\n",
" <td>2.140806</td>\n",
" <td>2.696508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>243</th>\n",
" <td>1.546735</td>\n",
" <td>2.652686</td>\n",
" </tr>\n",
" <tr>\n",
" <th>244</th>\n",
" <td>1.693672</td>\n",
" <td>2.792267</td>\n",
" </tr>\n",
" <tr>\n",
" <th>245</th>\n",
" <td>2.101707</td>\n",
" <td>3.375181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>246</th>\n",
" <td>2.518095</td>\n",
" <td>4.169106</td>\n",
" </tr>\n",
" <tr>\n",
" <th>247</th>\n",
" <td>2.973250</td>\n",
" <td>4.354129</td>\n",
" </tr>\n",
" <tr>\n",
" <th>248</th>\n",
" <td>3.373566</td>\n",
" <td>4.967108</td>\n",
" </tr>\n",
" <tr>\n",
" <th>249</th>\n",
" <td>3.869445</td>\n",
" <td>5.159655</td>\n",
" </tr>\n",
" <tr>\n",
" <th>250</th>\n",
" <td>4.365412</td>\n",
" <td>5.732141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>251</th>\n",
" <td>5.038114</td>\n",
" <td>6.611658</td>\n",
" </tr>\n",
" <tr>\n",
" <th>252</th>\n",
" <td>5.878349</td>\n",
" <td>7.586145</td>\n",
" </tr>\n",
" <tr>\n",
" <th>253</th>\n",
" <td>6.358576</td>\n",
" <td>7.908771</td>\n",
" </tr>\n",
" <tr>\n",
" <th>254</th>\n",
" <td>7.213222</td>\n",
" <td>8.675438</td>\n",
" </tr>\n",
" <tr>\n",
" <th>255</th>\n",
" <td>8.101359</td>\n",
" <td>9.395348</td>\n",
" </tr>\n",
" <tr>\n",
" <th>256</th>\n",
" <td>9.000299</td>\n",
" <td>10.097498</td>\n",
" </tr>\n",
" <tr>\n",
" <th>257</th>\n",
" <td>9.278957</td>\n",
" <td>10.219271</td>\n",
" </tr>\n",
" <tr>\n",
" <th>258</th>\n",
" <td>9.266560</td>\n",
" <td>10.054589</td>\n",
" </tr>\n",
" <tr>\n",
" <th>259</th>\n",
" <td>7.826496</td>\n",
" <td>8.606127</td>\n",
" </tr>\n",
" <tr>\n",
" <th>260</th>\n",
" <td>7.045425</td>\n",
" <td>7.787453</td>\n",
" </tr>\n",
" <tr>\n",
" <th>261</th>\n",
" <td>5.575171</td>\n",
" <td>6.438163</td>\n",
" </tr>\n",
" <tr>\n",
" <th>262</th>\n",
" <td>4.612935</td>\n",
" <td>5.559509</td>\n",
" </tr>\n",
" <tr>\n",
" <th>263</th>\n",
" <td>3.851424</td>\n",
" <td>4.769587</td>\n",
" </tr>\n",
" <tr>\n",
" <th>264</th>\n",
" <td>3.003620</td>\n",
" <td>3.846453</td>\n",
" </tr>\n",
" <tr>\n",
" <th>265</th>\n",
" <td>2.879380</td>\n",
" <td>3.603711</td>\n",
" </tr>\n",
" <tr>\n",
" <th>266</th>\n",
" <td>2.464706</td>\n",
" <td>3.162834</td>\n",
" </tr>\n",
" <tr>\n",
" <th>267</th>\n",
" <td>2.053470</td>\n",
" <td>2.718874</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>268 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" MAE RMSE\n",
"0 1.564057 1.905111\n",
"1 1.675029 2.528658\n",
"2 2.110533 3.098332\n",
"3 2.772926 3.926500\n",
"4 2.478173 2.860632\n",
"5 2.429895 3.084483\n",
"6 3.751128 4.824124\n",
"7 3.467863 4.334990\n",
"8 3.925537 4.926680\n",
"9 4.695890 5.609170\n",
"10 3.957635 4.713658\n",
"11 3.935733 4.552240\n",
"12 3.675592 4.142769\n",
"13 4.882679 5.253860\n",
"14 5.046731 5.283937\n",
"15 1.744841 2.366325\n",
"16 2.609835 2.723524\n",
"17 4.662142 5.370238\n",
"18 5.770406 6.523238\n",
"19 7.562086 8.459769\n",
"20 7.589294 8.412863\n",
"21 7.567803 8.446760\n",
"22 8.615360 9.428759\n",
"23 6.563748 7.482100\n",
"24 5.979612 6.894503\n",
"25 6.321163 7.116551\n",
"26 3.982562 4.818138\n",
"27 3.336992 3.897141\n",
"28 2.470062 2.788293\n",
"29 1.734911 1.930680\n",
".. ... ...\n",
"238 2.504313 3.174432\n",
"239 2.116001 2.404801\n",
"240 3.482298 3.840016\n",
"241 2.890070 3.208608\n",
"242 2.140806 2.696508\n",
"243 1.546735 2.652686\n",
"244 1.693672 2.792267\n",
"245 2.101707 3.375181\n",
"246 2.518095 4.169106\n",
"247 2.973250 4.354129\n",
"248 3.373566 4.967108\n",
"249 3.869445 5.159655\n",
"250 4.365412 5.732141\n",
"251 5.038114 6.611658\n",
"252 5.878349 7.586145\n",
"253 6.358576 7.908771\n",
"254 7.213222 8.675438\n",
"255 8.101359 9.395348\n",
"256 9.000299 10.097498\n",
"257 9.278957 10.219271\n",
"258 9.266560 10.054589\n",
"259 7.826496 8.606127\n",
"260 7.045425 7.787453\n",
"261 5.575171 6.438163\n",
"262 4.612935 5.559509\n",
"263 3.851424 4.769587\n",
"264 3.003620 3.846453\n",
"265 2.879380 3.603711\n",
"266 2.464706 3.162834\n",
"267 2.053470 2.718874\n",
"\n",
"[268 rows x 2 columns]"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res = pandas.DataFrame(data={'RMSE':rmse,'MAE':mae})\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fc0aaf01cf8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.boxplot(res['MAE'].values)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fc0ab2dfd30>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.boxplot(res['RMSE'].values)\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment