Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F102771117
lstm3.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Feb 24, 00:55
Size
3 KB
Mime Type
text/x-python
Expires
Wed, Feb 26, 00:55 (2 d)
Engine
blob
Format
Raw Data
Handle
24419649
Attached To
R2096 projectML
lstm3.py
View Options
# LSTM for international airline passengers problem with regression framing
import
numpy
import
scipy.io
import
matplotlib.pyplot
as
plt
from
pandas
import
read_csv
import
math
import
sys
from
keras.models
import
Sequential
from
keras.layers
import
Dense
from
keras.layers
import
LSTM
from
sklearn.preprocessing
import
MinMaxScaler
from
sklearn.metrics
import
mean_squared_error
# FUNCTION: convert an array of values into a dataset matrix
def
create_dataset
(
dataset
,
look_back
=
1
):
dataX
,
dataY
=
[],
[]
for
i
in
range
(
len
(
dataset
)
-
look_back
-
1
):
dataX
.
append
(
dataset
[
i
:(
i
+
look_back
),
0
])
dataY
.
append
(
dataset
[
i
+
look_back
,
0
])
return
numpy
.
array
(
dataX
),
numpy
.
array
(
dataY
)
# FUNCTION: lstm
def
lstm
(
fileName
,
ratioTrain
=
0.67
,
look_back
=
1
,
nbNodeHiddenLayer
=
4
,
epochs_
=
10
,
batch_size_
=
1
,
verbose_
=
2
):
numpy
.
random
.
seed
(
7
)
# load the dataset
dataframe
=
read_csv
(
fileName
,
usecols
=
[
1
],
engine
=
'python'
,
header
=
None
)
dataset
=
dataframe
.
values
dataset
=
dataset
.
astype
(
'float32'
)
# normalize the dataset
scaler
=
MinMaxScaler
(
feature_range
=
(
0
,
1
))
dataset
=
scaler
.
fit_transform
(
dataset
)
# split into train and test sets
train_size
=
int
(
len
(
dataset
)
*
ratioTrain
)
test_size
=
len
(
dataset
)
-
train_size
train
,
test
=
dataset
[
0
:
train_size
,:],
dataset
[
train_size
:
len
(
dataset
),:]
# reshape into X=t and Y=t+1
trainX
,
trainY
=
create_dataset
(
train
,
look_back
)
testX
,
testY
=
create_dataset
(
test
,
look_back
)
# reshape input to be [samples, time steps, features]
trainX
=
numpy
.
reshape
(
trainX
,
(
trainX
.
shape
[
0
],
1
,
trainX
.
shape
[
1
]))
testX
=
numpy
.
reshape
(
testX
,
(
testX
.
shape
[
0
],
1
,
testX
.
shape
[
1
]))
# create and fit the LSTM network
model
=
Sequential
()
model
.
add
(
LSTM
(
nbNodeHiddenLayer
,
input_shape
=
(
1
,
look_back
)))
model
.
add
(
Dense
(
1
))
model
.
compile
(
loss
=
'mean_squared_error'
,
optimizer
=
'adam'
)
model
.
fit
(
trainX
,
trainY
,
epochs
=
epochs_
,
batch_size
=
batch_size_
,
verbose
=
verbose_
)
# make predictions
trainPredict
=
model
.
predict
(
trainX
)
testPredict
=
[]
# print(trainPredict)
tmp
=
trainX
[
-
1
]
tmp
=
numpy
.
reshape
(
tmp
,
(
tmp
.
shape
[
0
],
1
,
tmp
.
shape
[
1
]))
# print(model.predict(tmp))
testPredict
.
append
(
model
.
predict
(
tmp
))
# print(testPredict)
tmp
=
testPredict
[
0
]
tmp
=
numpy
.
array
(
tmp
)
tmp
=
numpy
.
reshape
(
tmp
,
(
tmp
.
shape
[
0
],
1
,
tmp
.
shape
[
1
]))
# print(tmp)
testPredict
.
append
(
model
.
predict
(
tmp
))
tmp
=
testPredict
[
1
]
tmp
=
numpy
.
array
(
tmp
)
tmp
=
numpy
.
reshape
(
tmp
,
(
tmp
.
shape
[
0
],
1
,
tmp
.
shape
[
1
]))
# print(tmp)
testPredict
.
append
(
model
.
predict
(
tmp
))
for
i
in
range
(
len
(
testX
)
-
3
):
tmp
=
testPredict
[
i
]
tmp
=
numpy
.
array
(
tmp
)
tmp
=
numpy
.
reshape
(
tmp
,
(
tmp
.
shape
[
0
],
1
,
tmp
.
shape
[
1
]))
# print(tmp)
testPredict
.
append
(
model
.
predict
(
tmp
))
testPredict
=
numpy
.
array
(
testPredict
)
# invert predictions
trainPredict
=
scaler
.
inverse_transform
(
trainPredict
)
trainY
=
scaler
.
inverse_transform
([
trainY
])
testPredict
=
numpy
.
reshape
(
testPredict
,
(
testPredict
.
shape
[
0
],
testPredict
.
shape
[
2
]))
testPredict
=
scaler
.
inverse_transform
(
testPredict
)
testY
=
scaler
.
inverse_transform
([
testY
])
dataset2
=
scaler
.
inverse_transform
(
dataset
)
# calculate root mean squared error
trainScore
=
math
.
sqrt
(
mean_squared_error
(
trainY
[
0
],
trainPredict
[:,
0
]))
testScore
=
math
.
sqrt
(
mean_squared_error
(
testY
[
0
],
testPredict
[:,
0
]))
score
=
[
trainScore
,
testScore
];
# IO for Matlab
scipy
.
io
.
savemat
(
'./output/dataset.mat'
,
mdict
=
{
'dataset'
:
dataset2
})
scipy
.
io
.
savemat
(
'./output/trainPredict.mat'
,
mdict
=
{
'trainPredict'
:
trainPredict
})
scipy
.
io
.
savemat
(
'./output/testPredict.mat'
,
mdict
=
{
'testPredict'
:
testPredict
})
scipy
.
io
.
savemat
(
'./output/score.mat'
,
mdict
=
{
'score'
:
score
})
if
__name__
==
"__main__"
:
a
=
str
(
sys
.
argv
[
1
])
b
=
float
(
sys
.
argv
[
2
])
c
=
int
(
sys
.
argv
[
3
])
d
=
int
(
sys
.
argv
[
4
])
e
=
int
(
sys
.
argv
[
5
])
lstm
(
a
,
b
,
c
,
d
,
e
)
Event Timeline
Log In to Comment