LSTM实践(代码详解)(一)

LSTM实践(代码详解)(一)


首先学习LSTM的目的:对时序数据有一个更深层次的挖掘,对比深度学习方法和机器学习方法在特征提取上的优劣。

一、LSTM博文推荐

这里先推荐一本教材 《TensorFlow深度学习》 。首先学习Tensorflow对LSTM实战是有帮助的。这里不对LSTM进行过多原理解释,给出几个大佬的博文供大家学习:
博文一 :系列好文!!!大佬主要讲解了原理部分和Kears实现部分,建议有程序基础的小伙伴可以学习一下。

博文二 :关于Tensorflow的系列好文,解释通俗易懂,想学习基础部分的小伙伴可以移步查看。

知乎三 :这篇知乎回答可以帮助小伙伴更好的理解LSTM原理部分。

二、代码详解

先贴代码再解释

代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import metrics
from sklearn.model_selection import train_test_split
from keras.models import Model
from keras.layers import LSTM, Activation, Dense, Dropout, Input, Embedding
from keras.optimizers import RMSprop
from keras.callbacks import EarlyStopping
from keras import Sequential


# 查看数据 ===>索引、编号、标签、序列sequence
df = pd.read_csv(r'E:\feature.csv',index_col='INDEX')
df.drop(['ID'],axis=1,inplace=True)


# 划分训练集测试集
X = df.iloc[:,1:]
Y = df.DR
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.15)

'''
实现方法1:模型法
'''
Seq_len = 100
def RNN():
    inputs = Input(name='inputs',shape=[Seq_len])
    layer = Embedding(100,50,input_length=Seq_len)(inputs)
    layer = LSTM(64)(layer)
    layer = Dense(64,name='FC1')(layer)
    layer = Activation('relu')(layer)
    layer = Dropout(0.5)(layer)
    layer = Dense(1,name='out_layer')(layer)
    layer = Activation('sigmoid')(layer)
    model = Model(inputs=inputs,outputs=layer)
    return model

model = RNN()
model.summary()
model.compile(loss='binary_crossentropy',optimizer=RMSprop(),metrics=['accuracy'])

model.fit(X_train,Y_train,batch_size=10,epochs=100,
          validation_split=0.2,callbacks=[EarlyStopping(monitor='val_loss',min_delta=0.0001)])

'''
实现方法2:序列法
'''
# model = Sequential()
# inputs = Input(name='inputs',shape=[max_len])
# model.add(Embedding(max_words,50,input_length=max_len))
# model.add(LSTM(5))
# model.add(Dense(1))
# model.add(Activation( 'sigmoid' ))


# model.compile(optimizer= 'sgd' , loss= 'mse' ,  metrics=[ 'accuracy' ])
# model.fit(X_train,Y_train, batch_size=10, epochs=20,callbacks=[EarlyStopping(monitor='loss',min_delta=0.0001)])



accr = model.evaluate(X_test,Y_test)
print('Test set\n  Loss: {:0.3f}\n  Accuracy: {:0.3f}'.format(accr[0],accr[1]))

y_pre = model.predict(X_test)
print(y_pre)
y_pred = []
for y in y_pre:
    if y > 0.5:
        y_pred.append(1)
    else:
        y_pred.append(0)
print(y_pred)
print(Y_test)

# 查看混淆矩阵(预测值和真实值的各类情况统计矩阵)
confusion_matrix_result = metrics.confusion_matrix(y_pred, Y_test)
print('The confusion matrix result:\n', confusion_matrix_result)


总结

这里先对代码进行一个整理以及备份,没有做过多解释以及分析,想交流学习的小伙伴可以评论区回复,然后我会及时更新。


版权声明:本文为North_City_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。