Time Series ডেটার জন্য LSTM/GRU মডেল

Time Series এবং Forecasting মডেল - কেরাস (Keras) - Machine Learning

390

LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Units) হল Recurrent Neural Networks (RNNs) এর উন্নত সংস্করণ, যা Time Series Data (যেমন স্টক প্রাইস প্রেডিকশন, সিকুয়েন্স ডেটা, স্পিচ রিকগনিশন) বিশ্লেষণ এবং পূর্বাভাসের জন্য ব্যবহৃত হয়। এই মডেলগুলি গতানুগতিক RNN এর তুলনায় দীর্ঘকালীন সময়কাল ধরে তথ্য সংরক্ষণ এবং ব্যবহার করতে সক্ষম, যা Time Series ডেটাতে অত্যন্ত কার্যকরী।

এখানে LSTM এবং GRU মডেলের মৌলিক ব্যবহার দেখানো হবে, যা Time Series ডেটা নিয়ে কাজ করতে পারে।

LSTM এবং GRU এর মধ্যে পার্থক্য

  • LSTM অনেক বেশি সক্ষম দীর্ঘকালীন সময়ের সংরক্ষণে, তবে এটি বেশি প্যারামিটার নিয়ে আসে।
  • GRU LSTM এর তুলনায় কম প্যারামিটার ব্যবহার করে, তবে এটি এক ধরনের আপগ্রেডেড রিকারেন্ট নেটওয়ার্ক হিসেবে অনেক সময় LSTM এর সমান বা বেশি কার্যকর হতে পারে।

Time Series ডেটার জন্য LSTM/GRU মডেল তৈরি করা

১. ডেটা প্রিপ্রসেসিং

Time Series ডেটার জন্য প্রথমে ডেটা প্রিপ্রসেস করা প্রয়োজন, যেমন স্কেলিং, শিফট করা, উইন্ডো তৈরি করা ইত্যাদি। এটি করতে আপনি MinMaxScaler এবং train_test_split ব্যবহার করতে পারেন।

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split

# Time series ডেটার উদাহরণ
data = pd.read_csv('time_series_data.csv')  # আপনার ডেটাসেট লোড করুন

# Time Series ডেটার প্রিপ্রসেসিং
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data['value'].values.reshape(-1, 1))  # ডেটার মান স্কেল করা

# ডেটা উইন্ডো তৈরি করা (উদাহরণস্বরূপ, পূর্ববর্তী 60 দিনের তথ্য নিয়ে 1 দিনের পূর্বাভাস)
def create_dataset(data, time_step=60):
    X, y = [], []
    for i in range(time_step, len(data)):
        X.append(data[i-time_step:i, 0])  # পূর্ববর্তী 60 দিন
        y.append(data[i, 0])  # পরবর্তী দিন
    return np.array(X), np.array(y)

X, y = create_dataset(scaled_data)

# ডেটা ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)

# X_train এবং X_test কে 3D আকারে রূপান্তর করা (Num_samples, time_steps, features)
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

২. LSTM মডেল তৈরি করা

এখন আমরা LSTM মডেল তৈরি করব যা Time Series ডেটার জন্য পূর্বাভাস তৈরি করতে সক্ষম।

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

# LSTM মডেল তৈরি করা
model = Sequential()

# LSTM লেয়ার
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))  # Overfitting কমানোর জন্য Dropout

model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))

# আউটপুট লেয়ার
model.add(Dense(units=1))  # শুধুমাত্র একটি পূর্বাভাস

# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='mean_squared_error')

# মডেল প্রশিক্ষণ
model.fit(X_train, y_train, epochs=20, batch_size=32)

এখানে:

  • প্রথম LSTM লেয়ারreturn_sequences=True থাকছে, কারণ পরবর্তী LSTM লেয়ারটি সিকুয়েন্স গ্রহণ করবে।
  • Dropout লেয়ারগুলি ব্যবহৃত হয়েছে যাতে ওভারফিটিং কমানো যায়।

৩. GRU মডেল তৈরি করা

GRU (Gated Recurrent Unit) এর জন্য মডেলটি একইভাবে তৈরি করা হবে, তবে এখানে GRU লেয়ার ব্যবহার করা হবে LSTM এর পরিবর্তে।

from tensorflow.keras.layers import GRU

# GRU মডেল তৈরি করা
model_gru = Sequential()

# GRU লেয়ার
model_gru.add(GRU(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model_gru.add(Dropout(0.2))

model_gru.add(GRU(units=50, return_sequences=False))
model_gru.add(Dropout(0.2))

# আউটপুট লেয়ার
model_gru.add(Dense(units=1))

# মডেল কম্পাইল করা
model_gru.compile(optimizer='adam', loss='mean_squared_error')

# মডেল প্রশিক্ষণ
model_gru.fit(X_train, y_train, epochs=20, batch_size=32)

৪. মডেল পূর্বাভাস তৈরি করা

প্রশিক্ষণের পরে, আপনি LSTM বা GRU মডেল ব্যবহার করে Time Series ডেটা নিয়ে পূর্বাভাস তৈরি করতে পারেন।

# পূর্বাভাস তৈরি করা
predicted_stock_price = model.predict(X_test)

# পূর্বাভাস স্কেল করা
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)

# প্রকৃত এবং পূর্বাভাস মূল্য তুলনা করা
import matplotlib.pyplot as plt
plt.plot(scaler.inverse_transform(y_test.reshape(-1, 1)), label='True Value')
plt.plot(predicted_stock_price, label='Predicted Value')
plt.legend()
plt.show()

এখানে:

  • model.predict() মেথড দ্বারা মডেল থেকে পূর্বাভাস তৈরি করা হচ্ছে।
  • scaler.inverse_transform() দিয়ে স্কেল করা পূর্বাভাস ডেটা ডিনরমালাইজ করা হচ্ছে।

৫. মডেল মূল্যায়ন

মডেলের কার্যকারিতা মূল্যায়ন করার জন্য আপনি Mean Squared Error (MSE) বা Root Mean Squared Error (RMSE) ব্যবহার করতে পারেন।

from sklearn.metrics import mean_squared_error
import math

# MSE এবং RMSE
mse = mean_squared_error(scaler.inverse_transform(y_test.reshape(-1, 1)), predicted_stock_price)
rmse = math.sqrt(mse)

print(f'MSE: {mse}')
print(f'RMSE: {rmse}')

সারাংশ

LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Unit) হল Recurrent Neural Networks (RNNs) এর দুটি শক্তিশালী এবং জনপ্রিয় সংস্করণ যা Time Series ডেটা প্রক্রিয়াকরণ এবং পূর্বাভাসের জন্য ব্যবহৃত হয়। LSTM দীর্ঘকালীন সময়ের তথ্য স্মরণ রাখতে সক্ষম এবং GRU এর তুলনায় কম প্যারামিটার ব্যবহার করে, তবে কার্যকারিতায় প্রায় সমান। এই মডেলগুলির মাধ্যমে আপনি Time Series ডেটার উপর ভিত্তি করে পূর্বাভাস তৈরি করতে পারেন, এবং Keras/TensorFlow এর সাহায্যে এটি সহজেই বাস্তবায়ন করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...