كيفية استخدام Recurrent Neural Networks (RNNs) لتحليل السلاسل الزمنية باستخدام Keras
كيفية استخدام Recurrent Neural Networks (RNNs) لتحليل السلاسل الزمنية باستخدام Keras
في هذا الدليل الشامل، سنتعرف على كيفية استخدام الشبكات العصبية المتكررة (RNNs) لتحليل البيانات المتسلسلة مثل السلاسل الزمنية. سنستخدم مكتبة Keras لبناء نموذج لتحليل سلسلة زمنية باستخدام بيانات واقعية من الإنترنت (أسعار الأسهم). سوف نقوم ببناء نموذج RNN بسيط، تدريب النموذج، تقييم أدائه، وأخيرًا التنبؤ بالقيم المستقبلية.
الخطوة 1: تثبيت المكتبات المطلوبة
أول خطوة هي تثبيت المكتبات الضرورية. سنحتاج إلى Keras
وTensorFlow
لبناء النموذج، بالإضافة إلى pandas
وNumPy
للتعامل مع البيانات. سنستخدم مكتبة yfinance
لجلب بيانات الأسهم من الإنترنت.
pip install keras tensorflow numpy pandas yfinance matplotlib scikit-learn
الخطوة 2: استيراد المكتبات
بعد تثبيت المكتبات، نقوم باستيرادها في مشروعنا.
import numpy as np
import pandas as pd
import yfinance as yf
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
الخطوة 3: تحميل بيانات واقعية
سنقوم باستخدام بيانات أسعار الإغلاق اليومية لسهم شركة Apple (AAPL) كمثال. سنقوم بتحميل البيانات باستخدام مكتبة yfinance
:
# تحميل بيانات أسعار الإغلاق لسهم Apple
stock_data = yf.download('AAPL', start='2015-01-01', end='2022-01-01')
stock_data = stock_data[['Close']] # اختيار عمود سعر الإغلاق فقط
# عرض أول 5 صفوف من البيانات
print(stock_data.head())
# رسم البيانات
plt.figure(figsize=(10,6))
plt.plot(stock_data)
plt.title('سعر إغلاق سهم Apple (2015-2022)')
plt.xlabel('التاريخ')
plt.ylabel('سعر الإغلاق')
plt.show()
الخطوة 4: تجهيز البيانات للسلاسل الزمنية
1. تطبيع البيانات: نظرًا لأن البيانات يجب أن تكون في نطاق بين 0 و 1، نقوم بتطبيعها باستخدام MinMaxScaler
.
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(stock_data)
2. إنشاء نافذة زمنية: نقوم بإنشاء مجموعة بيانات زمنية، حيث نستخدم 60 يومًا للتنبؤ بسعر اليوم التالي.
def create_dataset(data, look_back=60):
X, Y = [], []
for i in range(len(data) - look_back):
X.append(data[i:i + look_back, 0])
Y.append(data[i + look_back, 0])
return np.array(X), np.array(Y)
look_back = 60
X, Y = create_dataset(scaled_data, look_back)
# إعادة تشكيل البيانات لتناسب نموذج Keras (عدد العينات، حجم النافذة الزمنية، 1)
X = np.reshape(X, (X.shape[0], X.shape[1], 1))
الخطوة 5: تقسيم البيانات إلى تدريب واختبار
نقوم بتقسيم البيانات إلى مجموعتين: مجموعة تدريب (80%) ومجموعة اختبار (20%).
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
الخطوة 6: بناء نموذج RNN
سنقوم الآن ببناء نموذج بسيط باستخدام Keras. النموذج يتكون من طبقة RNN وطبقة كثيفة (Dense) للتنبؤ بالقيمة.
# بناء النموذج
model = Sequential()
model.add(SimpleRNN(50, input_shape=(look_back, 1))) # طبقة RNN مع 50 وحدة عصبية
model.add(Dense(1)) # طبقة الإخراج
# تجميع النموذج
model.compile(optimizer='adam', loss='mean_squared_error')
# عرض ملخص النموذج
model.summary()
الخطوة 7: تدريب النموذج
بعد بناء النموذج، نقوم بتدريبه باستخدام بيانات التدريب لمدة 50 دورة (epochs).
history = model.fit(X_train, Y_train, epochs=50, batch_size=32, validation_data=(X_test, Y_test))
الخطوة 8: تقييم النموذج وتحليل الأداء
رسم خسارة النموذج أثناء التدريب:
# رسم الخسارة (Loss) أثناء التدريب
plt.plot(history.history['loss'], label='خسارة التدريب')
plt.plot(history.history['val_loss'], label='خسارة التحقق')
plt.title('خسارة النموذج أثناء التدريب')
plt.xlabel('عدد الدورات')
plt.ylabel('الخسارة')
plt.legend()
plt.show()
الخطوة 9: التنبؤ باستخدام النموذج
بعد تدريب النموذج، يمكننا استخدامه للتنبؤ بالقيم المستقبلية.
# التنبؤ على مجموعة الاختبار
predictions = model.predict(X_test)
# إعادة تحويل القيم المتنبأ بها إلى المقياس الأصلي
predictions_rescaled = scaler.inverse_transform(predictions.reshape(-1, 1))
Y_test_rescaled = scaler.inverse_transform(Y_test.reshape(-1, 1))
# رسم القيم المتوقعة مقابل القيم الحقيقية
plt.figure(figsize=(10,6))
plt.plot(Y_test_rescaled, label='القيم الحقيقية')
plt.plot(predictions_rescaled, label='القيم المتوقعة')
plt.title('القيم الحقيقية مقابل القيم المتوقعة لسعر إغلاق سهم Apple')
plt.xlabel('الوقت')
plt.ylabel('سعر الإغلاق')
plt.legend()
plt.show()
الخاتمة
في هذا الدليل، تعلمنا كيفية بناء نموذج RNN باستخدام مكتبة Keras لتحليل بيانات السلاسل الزمنية. قمنا بتحميل بيانات أسعار إغلاق سهم Apple، جهزنا البيانات للاستخدام في نموذج RNN، ثم قمنا بتدريب النموذج واختباره. يمكنك الآن تطبيق هذه الخطوات على بيانات أخرى مثل أسعار الأسهم المختلفة أو حتى بيانات المناخ.
خطوات إضافية:
- تحسين النموذج: يمكن تحسين أداء النموذج باستخدام طبقات LSTM أو GRU بدلاً من SimpleRNN.
- ضبط المعلمات: يمكنك تجربة تعديل حجم النافذة الزمنية (look_back)، وعدد الخلايا العصبية، وعدد الدورات لتحسين النتائج.
اترك تعليقاً