مدل های ترکیبی یادگیری ماشین (Hybrid Machine Learning Models) با ترکیب الگوریتمهای مختلف، از نقاط قوت منحصربهفرد هرکدام بهره میبرند. این رویکرد منجر به افزایش دقت پیش بینی و ارتقای پایداری مدل در شرایط مختلف داده ای میشود. اگر علاقه مند به ساخت چنین مدلی هستید، این مقاله راهنمای گام به گامی برای شما خواهد بود تا بیاموزید چگونه با بهرهگیری از قدرت پیشبینی چند الگوریتم مختلف، یک مدل ترکیبی بسازید.
مدل ترکیبی یادگیری ماشین با پایتون
چه زمانی باید از مدل ترکیبی استفاده کرد؟
زمانی که پیچیدگی داده ها با استفاده از یک الگوریتم قابل مدیریت نباشد، به کارگیری یک مدل ترکیبی توصیه میشود. در برخی سناریوها، انواع مختلف داده یا الگوهای متنوع درون داده ها ایجاب میکنند که چند الگوریتم به صورت ترکیبی به کار گرفته شوند.
برای مثال، اگر در داده های خود با الگوهای متوالی و هم زمان روند های بلندمدت مواجه هستید، میتوانید از ترکیب LSTM برای تحلیل دنبالهها و رگرسیون خطی برای بررسی روند کلی استفاده کنید.
نیاز به مدل ترکیبی زمانی مشخص میشود که مدل های منفرد در ارزیابی های مبتنی بر معیارهای عملکردی (مثل دقت، یادآوری یا F1-score) عملکرد ضعیفی داشته باشند. ترکیب مدلها میتواند مزایای منحصر به فرد هرکدام را در مدل نهایی وارد کرده و کارایی کلی پیشبینی را بهبود بخشد.
حال در ادامه، بهصورت گامبهگام فرآیند ساخت یک مدل ترکیبی یادگیری ماشین را بررسی میکنیم. در این پروژه، قصد داریم با ترکیب قدرت پیشبینی دو الگوریتم متفاوت، مدلی ترکیبی بسازیم که عملکردی دقیقتر و پایدارتر نسبت به مدلهای منفرد ارائه دهد. دیتاست مورد استفاده در این آموزش را میتوانید از لینک مشخص شده دانلود کنید.
اکنون بیایید وارد مرحله عملی شویم و با وارد کردن کتابخانه های ضروری پایتون و بارگذاری دادهها، کار را آغاز کنیم:
1 2 3 |
import pandas as pd data = pd.read_csv('/content/apple_stock_data.csv') print(data.head()) |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<strong> Date Adj Close Close High Low \ 0 2023-11-02 00:00:00+00:00 176.665985 177.570007 177.779999 175.460007 1 2023-11-03 00:00:00+00:00 175.750671 176.649994 176.820007 173.350006 2 2023-11-06 00:00:00+00:00 178.317520 179.229996 179.429993 176.210007 3 2023-11-07 00:00:00+00:00 180.894333 181.820007 182.440002 178.970001 4 2023-11-08 00:00:00+00:00 181.958893 182.889999 183.449997 181.589996 Open Volume 0 175.520004 77334800 1 174.240005 79763700 2 176.380005 63841300 3 179.179993 70530000 4 182.350006 49340300 </strong> |
1 2 3 |
data['Date'] = pd.to_datetime(data['Date']) data.set_index('Date', inplace=True) data = data[['Close']] |
انتخاب مدلهای ترکیبی
در این پروژه از دو مدل LSTM (حافظه بلند-کوتاهمدت) و رگرسیون خطی (Linear Regression) استفاده خواهیم کرد. انتخاب LSTM به این دلیل است که این مدل توانایی بالایی در شناسایی وابستگیهای دنبالهدار و الگوهای زمانی دارد و برای تحلیل دادههای سریزمانی مانند نوسانات قیمت سهام که تحت تأثیر روندهای تاریخی هستند، بسیار مناسب است.
دوره تخصصی پایتون : آموزش پروژه محور پایتون و جنگو
در مقابل، رگرسیون خطی مدلی ساده و کارآمد برای شناسایی روابط خطی و روندهای بلندمدت در دادههاست. ترکیب این دو مدل در یک رویکرد ترکیبی به ما این امکان را میدهد که از توانایی LSTM در مدلسازی الگوهای زمانی پیچیده و از قابلیت رگرسیون خطی در دنبالکردن روندهای کلی، بهصورت همزمان بهرهمند شویم. هدف از این ترکیب، ایجاد یک سیستم پیش بینی متعادلتر و دقیقتر است.
بنابراین در ادامه، قیمت پایانی (Close) را با استفاده از ابزار MinMaxScaler بین 0 و 1 مقیاسبندی میکنیم تا دادهها برای مدل LSTM قابل استفاده باشند.
1 2 3 |
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)) data['Close'] = scaler.fit_transform(data[['Close']]) |
1 2 3 4 5 6 7 8 9 10 |
import numpy as np def create_sequences(data, seq_length=60): X, y = [], [] for i in range(len(data) - seq_length): X.append(data[i:i+seq_length]) y.append(data[i+seq_length]) return np.array(X), np.array(y) seq_length = 60 X, y = create_sequences(data['Close'].values, seq_length) |
1 2 3 |
train_size = int(len(X) * 0.8) X_train, X_test = X[:train_size], X[train_size:] y_train, y_test = y[:train_size], y[train_size:] |
1 2 3 4 5 6 7 |
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense lstm_model = Sequential() lstm_model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1))) lstm_model.add(LSTM(units=50)) lstm_model.add(Dense(1)) |
1 2 |
lstm_model.compile(optimizer='adam', loss='mean_squared_error') lstm_model.fit(X_train, y_train, epochs=20, batch_size=32) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Epoch 1/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 6s 64ms/step - loss: 0.2519 Epoch 2/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 59ms/step - loss: 0.0425 Epoch 3/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 59ms/step - loss: 0.0396 Epoch 4/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0167 Epoch 5/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 52ms/step - loss: 0.0199 Epoch 6/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - loss: 0.0152 Epoch 7/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - loss: 0.0127 Epoch 8/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 75ms/step - loss: 0.0130 Epoch 9/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 60ms/step - loss: 0.0104 Epoch 10/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 81ms/step - loss: 0.0107 Epoch 11/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 64ms/step - loss: 0.0091 Epoch 12/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 65ms/step - loss: 0.0094 Epoch 13/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 62ms/step - loss: 0.0098 Epoch 14/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 62ms/step - loss: 0.0087 Epoch 15/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 1s 62ms/step - loss: 0.0081 Epoch 16/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 56ms/step - loss: 0.0081 Epoch 17/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 64ms/step - loss: 0.0093 Epoch 18/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 61ms/step - loss: 0.0078 Epoch 19/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 57ms/step - loss: 0.0078 Epoch 20/20 5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 66ms/step - loss: 0.0073 |
1 2 3 4 |
data['Lag_1'] = data['Close'].shift(1) data['Lag_2'] = data['Close'].shift(2) data['Lag_3'] = data['Close'].shift(3) data = data.dropna() |
1 2 3 4 |
X_lin = data[['Lag_1', 'Lag_2', 'Lag_3']] y_lin = data['Close'] X_train_lin, X_test_lin = X_lin[:train_size], X_lin[train_size:] y_train_lin, y_test_lin = y_lin[:train_size], y_lin[train_size:] |
1 2 3 |
from sklearn.linear_model import LinearRegression lin_model = LinearRegression() lin_model.fit(X_train_lin, y_train_lin) |
1 2 3 |
X_test_lstm = X_test.reshape((X_test.shape[0], X_test.shape[1], 1)) lstm_predictions = lstm_model.predict(X_test_lstm) lstm_predictions = scaler.inverse_transform(lstm_predictions) |
1 2 |
lin_predictions = lin_model.predict(X_test_lin) lin_predictions = scaler.inverse_transform(lin_predictions.reshape(-1, 1)) |
1 |
hybrid_predictions = (0.7 * lstm_predictions) + (0.3 * lin_predictions) |
1 2 3 4 5 6 7 8 |
lstm_future_predictions = [] last_sequence = X[-1].reshape(1, seq_length, 1) for _ in range(10): lstm_pred = lstm_model.predict(last_sequence)[0, 0] lstm_future_predictions.append(lstm_pred) lstm_pred_reshaped = np.array([[lstm_pred]]).reshape(1, 1, 1) last_sequence = np.append(last_sequence[:, 1:, :], lstm_pred_reshaped, axis=1) lstm_future_predictions = scaler.inverse_transform(np.array(lstm_future_predictions).reshape(-1, 1)) |
1 2 3 4 5 6 7 |
recent_data = data['Close'].values[-3:] lin_future_predictions = [] for _ in range(10): lin_pred = lin_model.predict(recent_data.reshape(1, -1))[0] lin_future_predictions.append(lin_pred) recent_data = np.append(recent_data[1:], lin_pred) lin_future_predictions = scaler.inverse_transform(np.array(lin_future_predictions).reshape(-1, 1)) |
1 |
hybrid_future_predictions = (0.7 * lstm_future_predictions) + (0.3 * lin_future_predictions) |
1 2 3 4 5 6 7 8 |
future_dates = pd.date_range(start=data.index[-1] + pd.Timedelta(days=1), periods=10) predictions_df = pd.DataFrame({ 'Date': future_dates, 'LSTM Predictions': lstm_future_predictions.flatten(), 'Linear Regression Predictions': lin_future_predictions.flatten(), 'Hybrid Model Predictions': hybrid_future_predictions.flatten() }) print(predictions_df) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Date LSTM Predictions Linear Regression Predictions \ 0 2024-11-02 00:00:00+00:00 232.222122 230.355192 1 2024-11-03 00:00:00+00:00 231.944504 225.707291 2 2024-11-04 00:00:00+00:00 231.732971 222.703426 3 2024-11-05 00:00:00+00:00 231.574249 230.631535 4 2024-11-06 00:00:00+00:00 231.456375 225.486380 5 2024-11-07 00:00:00+00:00 231.368454 222.494588 6 2024-11-08 00:00:00+00:00 231.301605 230.930195 7 2024-11-09 00:00:00+00:00 231.249008 225.245599 8 2024-11-10 00:00:00+00:00 231.205811 222.284007 9 2024-11-11 00:00:00+00:00 231.168671 231.252375 Hybrid Model Predictions 0 231.662038 1 230.073332 2 229.024102 3 231.291435 4 229.665369 5 228.706293 6 231.190176 7 229.447978 8 228.529273 9 231.193782 |
جمع بندی
اینطور بود که یک مدل ترکیبی یادگیری ماشین با استفاده از پایتون ساختیم. مدل ترکیبی یادگیری ماشین را زمانی بسازید که یک الگوریتم واحد نتواند پیچیدگیهای دادهها را شبیهسازی کند یا زمانی که انواع مختلف دادهها یا الگوهای متنوع وجود داشته باشد. امیدوارم از این مقاله در مورد ساخت مدل ترکیبی یادگیری ماشین با پایتون لذت برده باشید. برای پرسیدن سوالات ارزشمند، میتوانید در بخش نظرات پایین مقاله مطرح کنید. همچنین میتوانید من را در اینستاگرام دنبال کنید تا منابع بیشتری دریافت کنید.
همچنین می توانید از بخش جدیدترین سورس برنامه نویسی پایتون دیدن فرمایید
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۱۷ اردیبهشت ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس