Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F102745946
lstm.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
Sun, Feb 23, 18:25
Size
2 KB
Mime Type
text/x-python
Expires
Tue, Feb 25, 18:25 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
24413302
Attached To
R2096 projectML
lstm.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
,
seq_length
=
1
):
dataX
,
dataY
=
[],
[]
for
i
in
range
(
len
(
dataset
)
-
seq_length
):
dataX
.
append
(
dataset
[
i
:(
i
+
seq_length
),
0
])
dataY
.
append
(
dataset
[
i
+
seq_length
,
0
])
return
numpy
.
array
(
dataX
),
numpy
.
array
(
dataY
)
# FUNCTION: lstm
def
lstm
(
fileName
,
ratioTrain
=
0.67
,
seq_length
=
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
,
seq_length
)
testX
,
testY
=
create_dataset
(
test
,
seq_length
)
# 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
,
seq_length
)))
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
Otrain
=
model
.
predict
(
trainX
)
Otest
=
model
.
predict
(
testX
)
# invert predictions
Otrain
=
scaler
.
inverse_transform
(
Otrain
)
trainY
=
scaler
.
inverse_transform
([
trainY
])
Otest
=
scaler
.
inverse_transform
(
Otest
)
testY
=
scaler
.
inverse_transform
([
testY
])
dataset2
=
scaler
.
inverse_transform
(
dataset
)
# calculate root mean squared error
# trainScore = math.sqrt(mean_squared_error(trainY[0], Otrain[:,0]))
# testScore = math.sqrt(mean_squared_error(testY[0], Otest[:,0]))
trainScore
=
mean_squared_error
(
trainY
[
0
],
Otrain
[:,
0
])
/
2
testScore
=
mean_squared_error
(
testY
[
0
],
Otest
[:,
0
])
/
2
score
=
[
trainScore
,
testScore
];
# IO for Matlab
scipy
.
io
.
savemat
(
'../output/dataset.mat'
,
mdict
=
{
'dataset'
:
dataset2
})
scipy
.
io
.
savemat
(
'../output/Otrain.mat'
,
mdict
=
{
'Otrain'
:
Otrain
})
scipy
.
io
.
savemat
(
'../output/Oval.mat'
,
mdict
=
{
'Oval'
:
Otest
})
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
])
f
=
int
(
sys
.
argv
[
6
])
lstm
(
a
,
b
,
c
,
d
,
e
,
f
)
Event Timeline
Log In to Comment