読者です 読者をやめる 読者になる 読者になる

LSTMで分類問題を解く(Python)

機械学習 コード 深層学習

内容

Kerasを使ってLSTMを実装。 コードのEmbeddingの都合上 tensorflow.__version = 0.10.0で行う必要があるので注意(今日現在)。

コード

import numpy as np
import pandas as pd
import random

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
from keras.layers import Dropout

import tensorflow as tf

# version チェック
print(tf.__version__)

# データをロード
from sklearn.model_selection import train_test_split
data = pd.read_csv('data.csv')

# データの変換方法
def convert_data(df):
    # 元データを破壊したくないので一旦コピー
    df = df.copy() 
    ....
    # np.array型で返す
    return np.array(df)

# データを行列型式に変換(ここはデータ型式による)
# data : np.array 型
data = convert_data(data)

# 訓練とテストデータに分ける
X, y = data[:,:-1], data[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=random.randint(0, 100))

# ハイパーパラメータ
max_history, embedding_size = 10, 365

# パディング
X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
X_test = sequence.pad_sequences(X_test, maxlen=max_history)

# モデル定義
model = Sequential()
model.add(Embedding(embedding_size, embedding_vecor_length, input_length=max_review_length, dropout=0.2))
model.add(Dropout(0.1))
model.add(LSTM(100))
model.add(Dropout(0.1))
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
print(model.summary())
model.fit(X_train, y_train, nb_epoch=100, batch_size=30)

# テストデータで検証
scores = model.evaluate(X_test, y_test, verbose=0)