Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Tạo dự báo thời tiết đơn giản bằng LSTM
Hướng Dẫn Đồ ÁnLập Trình AI

Tạo dự báo thời tiết đơn giản bằng LSTM

Chia sẻ
Chia sẻ

Dự báo thời tiết là một trong những ứng dụng phổ biến nhất của phân tích chuỗi thời gian (time series analysis). Với sự phát triển của học sâu, đặc biệt là các mạng hồi tiếp như LSTM (Long Short-Term Memory), chúng ta có thể xây dựng các mô hình dự báo thời tiết hiệu quả hơn dựa trên dữ liệu lịch sử.

Trước khi bắt đầu, nếu bạn chưa quen với xử lý dữ liệu thời gian, hãy tham khảo bài Phân tích dữ liệu thời gian thực với Python để hiểu về thao tác dữ liệu dạng time series. Ngoài ra, bài Hướng dẫn tiền xử lý dữ liệu sạch để huấn luyện mô hình tốt hơn sẽ giúp bạn đảm bảo dữ liệu đầu vào chất lượng, còn bài Phân tích cảm xúc review sản phẩm bằng học sâu sẽ cho bạn một cái nhìn về cách hoạt động của LSTM trong NLP – rất giống cách chúng ta sẽ xử lý dữ liệu thời tiết.

Dữ liệu sử dụng để thực hành

Trong bài này, chúng ta sẽ sử dụng bộ dữ liệu Daily Weather Data được cung cấp công khai trên Kaggle. Bộ dữ liệu này bao gồm thông tin thời tiết hàng ngày như nhiệt độ, độ ẩm, lượng mưa… trong nhiều năm, rất phù hợp để huấn luyện LSTM.

📥 Link tải dataset: https://www.kaggle.com/datasets/muthuj7/weather-dataset

Hãy tải file ZIP, giải nén và upload file DailyWeather.csv lên Google Colab hoặc Jupyter Notebook.

Cài đặt thư viện và chuẩn bị môi trường

Để thực hành, chúng ta cần cài đặt một số thư viện xử lý dữ liệu và học sâu.

!pip install tensorflow pandas numpy matplotlib scikit-learn

Import các thư viện:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
import tensorflow as tf

Đọc và khám phá dữ liệu

Sau khi upload file DailyWeather.csv, đọc dữ liệu vào DataFrame và xem qua.

# Đọc dữ liệu
df = pd.read_csv('/content/DailyWeather.csv')
df.head()

Xem thông tin tổng quan và các cột dữ liệu:

df.info()
df.describe()

Kiểm tra các giá trị null và xử lý nếu cần:

df.isnull().sum()
df = df.dropna()

Tiền xử lý dữ liệu

Chọn cột nhiệt độ để dự báo

Ở đây, chúng ta sẽ chỉ dự báo nhiệt độ trung bình (Mean_TemperatureC).

temperature = df['Mean_TemperatureC'].values.reshape(-1,1)

Chuẩn hóa dữ liệu

LSTM hoạt động tốt hơn khi dữ liệu được chuẩn hóa về khoảng [0,1].

scaler = MinMaxScaler(feature_range=(0, 1))
temperature_scaled = scaler.fit_transform(temperature)

Tạo tập dữ liệu theo định dạng LSTM

Với LSTM, chúng ta cần tạo tập dữ liệu theo dạng sequence. Ví dụ, dùng 30 ngày để dự báo ngày tiếp theo.

def create_sequences(data, seq_length=30):
    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)

X, y = create_sequences(temperature_scaled)

Tách dữ liệu thành train/test:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)

Xây dựng mô hình LSTM với TensorFlow

model = tf.keras.Sequential([
    tf.keras.layers.LSTM(64, input_shape=(X_train.shape[1], 1)),
    tf.keras.layers.Dense(1)
])

model.compile(optimizer='adam', loss='mean_squared_error')
model.summary()

Huấn luyện mô hình

history = model.fit(X_train, y_train, epochs=50, validation_data=(X_test, y_test), batch_size=32)

Hiển thị biểu đồ loss trong quá trình huấn luyện:

plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.legend()
plt.title('Loss trong quá trình huấn luyện')
plt.show()

Dự báo và trực quan hóa kết quả

Dự báo trên tập kiểm tra

predicted = model.predict(X_test)
predicted_rescaled = scaler.inverse_transform(predicted)
y_test_rescaled = scaler.inverse_transform(y_test.reshape(-1,1))

Vẽ đồ thị kết quả

plt.figure(figsize=(12,6))
plt.plot(y_test_rescaled, label='Giá trị thực')
plt.plot(predicted_rescaled, label='Dự báo')
plt.legend()
plt.title('So sánh nhiệt độ thực và dự báo')
plt.show()

Dự báo nhiệt độ tương lai

Dự báo 7 ngày tiếp theo dựa trên dữ liệu gần nhất.

last_sequence = X_test[-1]
forecast = []

for _ in range(7):
    next_temp = model.predict(last_sequence.reshape(1,30,1))
    forecast.append(next_temp[0][0])
    last_sequence = np.append(last_sequence[1:], next_temp).reshape(30,1)

forecast_rescaled = scaler.inverse_transform(np.array(forecast).reshape(-1,1))
print("Dự báo 7 ngày tới:", forecast_rescaled.flatten())

Kết luận

Bạn vừa học cách xây dựng một mô hình dự báo thời tiết đơn giản bằng LSTM. Từ việc chuẩn bị dữ liệu, xây dựng mạng LSTM đến dự báo và trực quan hóa kết quả, bạn đã nắm được quy trình đầy đủ của một bài toán time series forecasting. Với nền tảng này, bạn có thể mở rộng sang dự báo đa biến (nhiệt độ, độ ẩm, lượng mưa) hoặc thử nghiệm với các kiến trúc phức tạp hơn như GRU hoặc Transformer.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!