i LỜI CAM ĐOAN Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi dưới sự hướng dẫn khoa học của PGS TS Nghiêm Trung Dũng và GS TS Hoàng Xuân Cơ Các kết quả trong luận án là trung thực và chư[.]
LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu riêng tơi hướng dẫn khoa học PGS.TS Nghiêm Trung Dũng GS.TS Hoàng Xuân Cơ Các kết luận án trung thực chưa tác giả khác công bố Hà Nội, tháng năm 2020 TẬP THỂ HƯỚNG DẪN NGHIÊN CỨU SINH PGS.TS Nghiêm Trung Dũng Mạc Duy Hưng GS TS Hoàng Xuân Cơ i LỜI CẢM ƠN Trước hết tác giả xin chân thành cảm ơn đến PGS.TS Nghiêm Trung Dũng GS.TS Hồng Xn Cơ tận tình bảo, hướng dẫn, giúp đỡ trình thực luận án Tác giả xin bày tỏ lòng biết ơn Trung tâm Quan trắc Môi trường Miền Bắc, Tổng cục Môi trường tạo điều kiện để tác giả tiếp cận hệ thống quan trắc cung cấp liệu quan trắc chất lượng khơng khí cho luận án Tác giả bày tỏ lịng biết ơn đến thầy, Viện Khoa học Cơng nghệ Mơi trường; Phịng Đào tạo, Trường Đại học Bách khoa Hà Nội hỗ trợ tạo điều kiện thuận lợi để tác giả hoàn thành luận án Tác giả chân thành cảm ơn đến Trường Đại học Kỹ thuật Công nghiệp - Đại học Thái Nguyên, Bộ môn Kỹ thuật Môi trường, Khoa Xây dựng Môi trường tạo điều kiện thuận lợi cho tác giả suốt thời gian thực luận án Tác giả xin bày tỏ lòng cảm ơn tới giúp đỡ, động viên chia sẻ kinh nghiệm lời khuyên quý giá thầy cô, bạn đồng nghiệp suốt trình học tập nghiên cứu Tác giả xin bày tỏ lòng cảm ơn sâu sắc tới giúp đỡ, động viên chia sẻ kinh nghiệm TS Nguyễn Thị Yến Liên TS Nguyễn Thị Thu Thủy suốt trình nghiên cứu Xin gửi lời cảm ơn động viên, chia sẻ tạo điều kiện gia đình bè bạn suốt trình thực luận án Nghiên cứu sinh Mạc Duy Hưng ii MỤC LỤC LỜI CAM ĐOAN………………………………………………………………………i LỜI CẢM ƠN………………………………………………………………………….ii DANH MỤC CHỮ VIẾT TẮT v DANH MỤC BẢNG viii DANH MỤC HÌNH ix MỞ ĐẦU TỔNG QUAN 1.1 Chất lượng khơng khí vấn đề dự báo 1.1.1 Chất lượng khơng khí ảnh hưởng đến sức khỏe 1.1.2 Dự báo chất lượng khơng khí 1.2 Ứng dụng trí tuệ nhân tạo dự báo chất lượng khơng khí 15 1.2.1 Trên giới 15 1.2.2 Ở Việt Nam 19 1.3 Phương pháp tiền xử lý liệu cho mơ hình dự báo thống kê 20 1.3.1 Các phương pháp xử lý liệu ngoại vi 20 1.3.2 Phương pháp bổ khuyết liệu 22 1.4 Mơ hình trí tuệ nhân tạo 23 1.4.1 Mơ hình ARIMA 23 1.4.2 Mạng nơron nhân tạo (ANN) 24 1.4.3 Máy véc tơ hỗ trợ (SVM) 26 1.4.4 Mạng nơron tích chập (CNN) 28 1.4.5 Khối nhớ dài – ngắn (LSTM) 30 PHƯƠNG PHÁP NGHIÊN CỨU 32 2.1 Quy trình nghiên cứu 32 2.2 Thu thập liệu 32 2.2.1 Địa điểm thời gian thu thập liệu 32 2.2.2 Thông số kỹ thuật phương pháp đo đạc trạm quan trắc 33 2.3 Làm chuẩn bị liệu 34 iii 2.3.1 Xử lý liệu ngoại vi 34 2.3.2 Bổ khuyết liệu 35 2.3.3 Kiểm tra độ tin cậy liệu sau bổ khuyết 38 2.3.4 Chuẩn hóa liệu đầu vào cho mơ hình dự báo 39 2.4 Xây dựng mơ hình dự báo thống kê chất lượng khơng khí 41 2.5 Tiến trình thực thi mơ hình 46 2.6 Đánh giá hiệu suất mơ hình nghiên cứu 50 2.7 Nền tảng thông số kỹ thuật máy tính 51 KẾT QUẢ VÀ THẢO LUẬN 53 3.1 Kết phân tích xử lý liệu đầu vào 53 3.1.1 Tình trạng liệu xử lý sơ 53 3.1.2 Kết bổ khuyết liệu 57 3.1.3 Luật phân bố xác suất liệu 62 3.1.4 Diễn biến theo thời gian tương quan thông số 64 3.2 Lựa chọn mơ hình dự báo 71 3.3 Dự báo nồng độ trung bình 73 3.3.1 Thơng số chất lượng khơng khí dạng bụi 75 3.3.2 Nhóm thơng số nhiễm dạng khí 81 3.4 Dự báo nồng độ trung bình ngày 90 3.4.1 Nhóm thơng số chất lượng khơng khí dạng bụi 90 3.4.2 Nhóm thơng số chất lượng khơng khí dạng khí 94 KẾT LUẬN VÀ KIẾN NGHỊ 102 DANH MỤC CÁC CƠNG TRÌNH ĐÃ CƠNG BỐ CỦA LUẬN ÁN 105 PHỤ LỤC 117 iv DANH MỤC CHỮ VIẾT TẮT Tiếng Anh Tiếng Việt AI Artificial Intelligent Trí tuệ nhân tạo ANN Artificial neural netwwork Mạng nơron nhân tạo AQI Air quality index Chỉ số chất lượng khơng khí AR Autoregressive Mơ hình tự hồi quy ARIMA Autoregressive integrated moving average Mơ hình tự hồi quy tích hợp trung bình trượt asmt Ánh sáng mặt trời BN Batch normalization Chuẩn hóa hàng loạt CEM Nothern Centre for Environmental Monitoring Trung tâm quan trắc mơi trường miền Bắc CLKK Chất lượng khơng khí CNN Convolution neural network Mạng nơron tích chập CTM Chemical transport model Mơ hình lan truyền hóa học US.EPA Environmental Protection Agency Cục bảo vệ Môi trường Hoa Kỳ ESN Echo state network Mạng trạng thái phản hồi FFNN Feed-forward neural network Mạng nơron truyền thuận FL Fuzzy – logic Logic mờ FN Fully connected network Mạng nơron kết nối đầy đủ GA Genetic algorithm Thuật giải di truyền v GPU Graphic Process Unit Bộ xử lý hình ảnh (card hình) GRU Gated recurrent unit Đơn vị cổng hồi quy IDE Integrated development environment Mơi trường phát triển tích hợp IQR Inter quartile range Khoảng phân vị KF Kalman filter Bộ lọc Kalman LR Linear regression Hồi quy tuyến tính LSSVM Least squares support vector machine Mơ hình máy véc tơ hỗ trợ bình phương tối thiểu LSTM Long – short term memory Khối nhớ dài – ngắn MA Moving average Mơ hình trung bình trượt MAD Mean absolute deviation Trung bình độ lệch tuyệt đối (Trị trung bình độ lệch tuyệt đối) MAE Mean absolute error Trị trung bình sai tuyệt đối MLP Multi-layer perceptron Mạng nơron đa lớp NARX Nonlinear autoregressive with exogenous input neural network Mạng nơron tự động hồi quy phi tuyến với biến ngoại sinh NMHC Nonmethane hydrocacbon Hydrocacbon mêtan NOAA National Oceanic and Atmospheric Administration Cơ quan quốc gia Đại dương Khí Hoa Kỳ NWP Numerical weather prediction Dự báo thời tiết phương pháp số trị vi Q1 Quartile 25th Phân vị 25% Q3 Quartile 75th Phân vị 75% QCVN Quy chuẩn Việt Nam Rad Radiation Bức xạ mặt trời RBF Radial basis function Hàm sở xuyên tâm RH Relative hummity Độ ẩm tương đối RM Regression model Mơ hình hồi quy RMSE Root mean square error Sai số quân phương RNN Recurrent neural network Mạng nơron hồi quy RT-AQF Real-time Air quality forecast Dự báo chất lượng khơng khí theo thời gian thực SD Standard deviation Độ lệch chuẩn SVM Support vector machine Máy véc tơ hỗ trợ Temp Temperature Nhiệt độ USWB U.S Weather Bureau Cục thời tiết Hoa Kỳ UV Ultraviolet Tia cực tím VOC Volatile organic compounds Các hợp chất hữu bay WD Wind direction Hướng gió WHO World Health Organization Tổ chức Y tế Thế giới WS Wind speed Tốc độ gió vii DANH MỤC BẢNG Bảng 1.1 So sánh ưu nhược điểm số mơ hình dự báo Bảng 2.1 Phương pháp đo đạc thơng số CLKK quan trắc trạm Nguyễn Văn Cừ 33 Bảng 3.1 Thống kê liệu thô thu thập trạm quan trắc Nguyễn Văn Cừ, Long Biên, Hà Nội từ 2010 đến 2018 54 Bảng 3.2 Thống kê tỷ lệ liệu trống trước sau xử lý liệu ngoại vi 57 Bảng 3.3 Kết bù liệu với tỷ lệ liệu giả định từ 5% đến 80% 58 Bảng 3.4 Phân bố xác suất thơng số CLKK điển hình từ 2010 đến 2018 63 Bảng 3.5 Hệ số tương quan (r) thông số 70 Bảng 3.6 So sánh hiệu suất mơ hình thử nghiệm ứng dụng cơng cụ học máy để dự báo nồng độ trung bình bụi PM10 72 Bảng 3.7 Hiệu suất mơ hình dự báo nồng độ trung bình cho chất nhiễm dạng bụi liệu huấn luyện 76 Bảng 3.8 Hiệu suất mơ hình dự báo nồng độ trung bình cho chất ô nhiễm dạng bụi liệu kiểm tra 78 Bảng 3.9 Hiệu suất mơ hình dự báo nồng độ trung bình cho chất nhiễm dạng khí liệu huấn luyện 82 Bảng 3.10 Hiệu suất mơ hình dự báo nồng độ trung bình cho chất nhiễm dạng khí liệu kiểm tra độc lập 85 Bảng 3.11 Hiệu suất mơ hình dự báo nồng độ trung bình ngày cho chất ô nhiễm dạng bụi liệu huấn luyện 91 Bảng 3.12 Hiệu suất mơ hình dự báo nồng độ trung bình ngày cho chất nhiễm dạng bụi liệu kiểm tra độc lập 93 Bảng 3.13 Hiệu suất mơ hình dự báo nồng độ trung bình ngày cho chất nhiễm dạng khí liệu huấn luyện 95 Bảng 3.14 Hiệu suất mô hình dự báo nồng độ trung bình ngày cho chất nhiễm dạng khí liệu kiểm tra độc lập 98 viii DANH MỤC HÌNH Hình 1.1 Giải thích biểu đồ hộp 22 Hình 1.2 Mơ hình tốn tế bào nơron 25 Hình 1.3 Mơ tả cách mạng tích chập nhận dạng hình ảnh 29 Hình 1.4 Cấu trúc khối nhớ dài – ngắn 31 Hình 2.1 Vị trí trạm quan trắc tự động CLKK Nguyễn Văn Cừ 32 Hình 2.2 Sơ đồ bước thực trình xử lý liệu ngoại vi 35 Hình 2.3 Kiến trúc mơ hình dự báo CLKK đề xuất 41 Hình 2.4 Hoạt động lọc lớp tích chập 42 Hình 2.5 Ví dụ hoạt động lọc kích thước 3x3 ma trận đầu vào có kích thước 5x5 42 Hình 2.6 Ví dụ hoạt động lớp gộp (pool layer) 45 Hình 2.7 Sơ đồ bước làm việc mơ hình đề xuất 46 Hình 2.8 Sơ đồ thuật tốn tối ưu Adam 48 Hình 2.9 Giao diện mơi trường làm việc Colaboratory trình duyệt Google Chrome 51 Hình 3.1 Tỷ lệ liệu trống thông số quan trắc liệu thu thập trạm quan trắc Nguyễn Văn Cừ, Long Biên, Hà Nội từ 2010 đến 2018.54 Hình 3.2 Biểu đồ hộp xác định liệu ngoại vi 55 Hình 3.3 Biểu đồ hộp thơng số sau xử lý liệu ngoại vi 56 Hình 3.4 So sánh diễn biến nồng độ NO tính tốn từ mơ hình bù liệu với liệu thực tỷ lệ liệu trống giả định 50% (100 điểm liệu từ liệu) 61 Hình 3.5 Phân bố xác suất 06 thơng số CLKK điển hình năm 2012 64 Hình 3.6 Xu hướng diễn biến chất lượng khơng khí trạm quan trắc Nguyễn Văn Cừ, Long Biên, Hà Nội từ 2010 đến 2018 65 Hình 3.7 Biến trình nồng độ ngày thông số CLKK trạm Nguyễn Văn Cừ, Long Biên, Hà Nội 67 Hình 3.8 Biến trình nồng độ trung bình tháng thơng số CLKK trạm Nguyễn Văn Cừ, Long Biên, Hà Nội từ 2010 đến 2018 69 Hình 3.9 Biểu đồ thay đổi sai số qua Epochs huấn luyện (100 epochs đầu) 75 Hình 3.10 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình giá trị thực đo của chất ô nhiễm dạng bụi liệu huấn luyện 77 ix Hình 3.11 So sánh diễn biến nồng độ trung bình chất ô nhiễm dạng bụi dự báo từ mơ hình CNN-LSTM nồng độ thực liệu huấn luyện 78 Hình 3.12 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình giá trị thực đo của chất ô nhiễm dạng bụi liệu kiểm tra 79 Hình 3.13 So sánh diễn biến nồng độ trung bình chất nhiễm dạng bụi dự báo từ mơ hình CNN-LSTM nồng độ thực liệu kiểm tra 81 Hình 3.14 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình giá trị thực đo của chất ô nhiễm dạng khí liệu huấn luyện 83 Hình 3.15 So sánh diễn biến nồng độ trung bình chất nhiễm dạng khí dự báo từ mơ hình CNN-LSTM nồng độ thực liệu huấn luyện 84 Hình 3.16 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình giá trị thực đo của chất nhiễm dạng khí liệu kiểm tra 86 Hình 3.17 So sánh diễn biến nồng độ trung bình chất nhiễm dạng khí dự báo từ mơ hình CNN-LSTM nồng độ thực liệu kiểm tra 89 Hình 3.18 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình ngày giá trị thực đo của chất ô nhiễm dạng bụi liệu huấn luyện 91 Hình 3.19 So sánh diễn biến nồng độ trung bình ngày chất nhiễm dạng bụi dự báo từ mơ hình CNN-LSTM nồng độ thực liệu huấn luyện 92 Hình 3.20 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình ngày giá trị thực đo của chất ô nhiễm dạng bụi liệu kiểm tra 93 Hình 3.21 So sánh diễn biến nồng độ trung bình ngày chất ô nhiễm dạng bụi dự báo từ mô hình CNN-LSTM nồng độ thực liệu kiểm tra 94 Hình 3.22 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình ngày giá trị thực đo của chất nhiễm dạng khí liệu huấn luyện 96 Hình 3.23 So sánh diễn biến nồng độ trung bình ngày chất nhiễm dạng khí dự báo từ mơ hình CNN-LSTM nồng độ thực liệu huấn luyện 97 Hình 3.24 Tương quan giá trị tính tốn từ mơ hình dự báo nồng độ trung bình ngày giá trị thực đo của chất nhiễm dạng khí liệu kiểm tra 99 Hình 3.25 So sánh diễn biến nồng độ trung bình ngày chất nhiễm dạng khí dự báo từ mơ hình CNN-LSTM nồng độ thực liệu kiểm tra 100 x PHỤ LỤC II MẪU DỮ LIỆU THU THÂP TỪ TRẠM QUAN TRẮC NGUYỄN VĂN CỪ, LONG BIÊN, HÀ NỘI 123 Phụ lục II.1 Mẫu liệu thơ quan trắc chất lượng khơng khí từ 2010 đến 2018 thu thập trạm quan trắc 556, Nguyễn Văn Cừ, Long Biên, Hà Nội WS WD P m/s độ bar NA NA 0,72 1/1/2010 02:00 T RH Rad NO NO2 C % W/m2 NA NA NA NA NA NA NA NA NA NA NA NA 41,34 1014 16,48 96,7 0,92 35,75 34,29 70,04 59,74 2720,3 19,16 NA 0,71 46,47 1014 16,45 97,7 0,93 36,88 33,56 71,03 19,36 1680,6 7,91 8/16/2012 16:00 1,0 288,3 998 34,7 60,8 222 17,7 63,2 80,9 3,0 0,9 307,9 998 34,2 63,9 93,2 27,1 81,9 12/30/2018 22:00 1,1 359,2 1028 10,7 NA NA 18,3 1,0 354,7 1028 10,4 NA NA NOx SO CO O3 PM10 PM2.5 PM1 CH4 NMHC THC BZ TOL EB MX OX NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 3688,5 120,0 28,2 10,1 7,9 2,7 0,9 3,6 1,3 3,4 1,1 2,8 1,2 3,7 5507,9 68,2 48,4 13,1 9,5 2,8 1,3 4,2 2,3 1,9 1,9 4,9 2,3 NA NA NA 80,7 NA NA 26,8 16,1 14,1 NA NA NA NA NA NA NA 18,3 NA NA NA 80,6 NA NA 19,3 14,6 13,5 NA NA NA NA NA NA NA Thời gian 1/1/2010 00:00 1/1/2010 01:00 8/16/2012 17:00 12/30/2018 23:00 o (μg/m3) 111,8 Trong đó: BZ – benzene; TOL – toluen; EB – ethyl-benzen; MX – MP-xylen; OX – O-xylen 124 PHỤ LỤC III MÃ NGUỒN MƠ HÌNH TRÊN NGƠN NGỮ LẬP TRÌNH PYTHON 125 III.2 Kiến trúc tham số mơ hình CNN-LSTM đề xuất Layer (type) Output Shape Param # ================================================================= conv1d_2 (Conv1D) (None, 86, 316) 1264 _ batch_normalization_2 (Batch (None, 86, 316) 1264 _ max_pooling1d_2 (MaxPooling1 (None, 43, 316) _ conv1d_3 (Conv1D) (None, 43, 132) 125268 _ batch_normalization_3 (Batch (None, 43, 132) 528 _ max_pooling1d_3 (MaxPooling1 (None, 21, 132) _ flatten_1 (Flatten) (None, 2772) _ repeat_vector_1 (RepeatVecto (None, 1, 2772) _ lstm_1 (LSTM) (None, 1, 200) 2378400 _ time_distributed_2 (TimeDist (None, 1, 100) 20100 _ time_distributed_3 (TimeDist (None, 1, 1) 101 ================================================================= Total params: 2,526,925 Trainable params: 2,526,029 Non-trainable params: 896 Hình III.1 Kiến trúc tham số mơ hình CNN-LSTM đề xuất III.2 Kiến trúc tham số mơ hình thử nghiệm a) MLP Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 104, 256) 512 _ dense_1 (Dense) (None, 104, 128) 32896 _ dense_2 (Dense) (None, 104, 64) 8256 _ dense_3 (Dense) (None, 104, 32) 2080 _ dense_4 (Dense) (None, 104, 16) 528 _ dense_5 (Dense) (None, 104, 1) 17 ================================================================= Total params: 44,289 Trainable params: 44,289 b) CNN Layer (type) Output Shape Param # ================================================================= conv1d (Conv1D) (None, 102, 32) 128 _ 126 batch_normalization (BatchNo (None, 102, 32) 128 _ max_pooling1d (MaxPooling1D) (None, 51, 32) _ conv1d_1 (Conv1D) (None, 51, 32) 3104 _ batch_normalization_1 (Batch (None, 51, 32) 128 _ max_pooling1d_1 (MaxPooling1 (None, 25, 32) _ time_distributed (TimeDistri (None, 25, 100) 3300 _ time_distributed_1 (TimeDist (None, 25, 1) 101 ================================================================= Total params: 6,889 Trainable params: 6,761 c) LSTM Layer (type) Output Shape Param # ================================================================= lstm (LSTM) (None, 104, 200) 161600 _ time_distributed_2 (TimeDist (None, 104, 100) 20100 _ time_distributed_3 (TimeDist (None, 104, 1) 101 ================================================================= Total params: 181,801 Trainable params: 181,801 d) GRU Layer (type) Output Shape Param # ================================================================= gru (GRU) (None, 104, 200) 121800 _ time_distributed_4 (TimeDist (None, 104, 100) 20100 _ time_distributed_5 (TimeDist (None, 104, 1) 101 ================================================================= Total params: 142,001 Trainable params: 142,001 e) SVM SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.2, gamma='scale', kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) III.3 Nạp thư viện Python cần thiết import pandas as pd import numpy as np import matplotlib.pyplot as plt from math import sqrt from numpy import concatenate from matplotlib import pyplot 127 from pandas import read_csv from pandas import DataFrame from pandas import concat from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import LabelEncoder from sklearn.metrics import mean_squared_error from scipy.stats.stats import pearsonr import csv from tensorflow.keras import layers from tensorflow import keras from tensorflow.keras import Sequential from tensorflow.keras.layers import Input,Dense, Flatten, Dropout, Ac tivation, Conv1D, MaxPooling1D, LSTM, TimeDistributed, RepeatVector, BatchNormalization,RNN import tensorflow as tf from tensorflow.keras.models import model_from_json III.4 Mã nguồn chương trình (hàm) sử dụng mơ hình #Normalized data def normalized_data(data, n_in, n_out, dropnan=True): n_vars = if type(data) is list else data.shape[1] df = DataFrame(data) cols, names = list(), list() # input sequence (t-n, t-1) for i in range(n_in, 0, -1): cols.append(df.shift(i)) names += [('X%d(t-%d)' % (j+1, i)) for j in range(n_vars)] # forecast sequence (t, t+1, t+n) for i in range(0, n_out): cols.append(df.shift(-i)) if i == 0: names += [('X%d(t)' % (j+1)) for j in range(n_vars)] else: names += [('X%d(t+%d)' % (j+1, i)) for j in range(n_vars)] # put it all together agg = concat(cols, axis=1) agg.columns = names # drop rows with NaN values if dropnan: agg.dropna(inplace=True) return agg # plot results def vedothi(y,pre,n_samples): y=np.asarray(y) ax=np.arange(n_samples) plt.figure(1,figsize=(30,3)) 128 plt.plot(ax,y[:n_samples],color='red') plt.plot(ax,pre[:n_samples],color='blue') yy=np.reshape(y,(1,np.product(y.shape)))[0] k,b=np.polyfit(yy,pre,1) #slope, intercept, r_value, p_value, std_err = stats.linregress(y,p re) #print(k,b) #print(yy.shape,pre.shape) plt.figure(2,figsize=(5,5)) plt.scatter(y,pre) line=k*y+b plt.plot(y,line,color='black') print('\n\n y={}*x+{}'.format(k,b)) # calculate MAE, RMSE def hieusuat(y,pre): # Tính RMSE, MAE, r R2 mae=abs(y-pre) mae=np.mean(mae) #print('\n\nMAE={}'.format(mae)) y=np.array(y) pre=np.array(pre) rmse=(y-pre)**2 rmse=np.mean(rmse) rmse=rmse**(1/2) #print('\n\nRMSE={}'.format(rmse)) r=pearsonr(y,pre)[0] R2=r**2 #print('\n\nr={}; R2={}'.format(r,R2)) return mae,rmse,r,R2 #invert data def inv_dat(x,n_features,scaler,col): inv_x=x for i in range(n_features-1): inv_x=concatenate((inv_x,x), axis=1) inv_x = scaler.inverse_transform(inv_x) inv_x = inv_x[:,col] return inv_x #saved models def save_models(model,model_name,station_name): path_json='gdrive/My Drive/DLproject/saved_models/' path_json+=station_name path_json+=model_name path_json+='.json' model_json = model.to_json() 129 with open(path_json, 'w') as json_file: json_file.write(model_json) # serialize weights to HDF5 path_weight='gdrive/My Drive/DLproject/saved_models/' path_weight+=station_name path_weight+=model_name path_weight+='.h5' model.save_weights(path_weight) #call saved models def load_models(model_name,station_name): path_json='gdrive/My Drive/DLproject/saved_models/' path_json+=station_name path_json+=model_name path_json+='.json' json_file = open(path_json, 'r') loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) # load weights into new model path_weight='gdrive/My Drive/DLproject/saved_models/' path_weight+=station_name path_weight+=model_name path_weight+='.h5' loaded_model.load_weights(path_weight) return loaded_model # load data from excel file def load_xlsx(file_name,inx_col): xl_file = pd.ExcelFile(file_name) sheet=xl_file.sheet_names for sh in range(np.shape(sheet)[0]): #print(sheet[sh]) tmp_df=pd.read_excel(xl_file, sheet[sh]) #tmp_df=np.asarray(tmp_df) if sh==0: df=tmp_df else: #print(type(df)) tmp=df.append(tmp_df) df=tmp df.set_index('date', inplace=True) return df # calculate AIC,BIC def cal_aic_bic(y,pre,k): resid=y-pre sse=sum(resid**2) 130 n=len(resid) aic=2*k+n*np.log(sse/n) bic=n*np.log(sse/n)+k*np.log(n) return aic,bic #save data to excel def save2xlsx(x,excel_file): x=pd.DataFrame(x) x.to_excel(excel_file, index=True) #Split data for Trainning and Testing model def split_data(data,split_rate,n_hours,n_features,target): # target - cột chứa giá trị target tính từ bên phải sang trái x=data.values ntrain=round(split_rate*x.shape[0]) train = x[:round(split_rate*x.shape[0]), :] test= x[round(split_rate*x.shape[0]):, :] target=-target n_obs=n_hours*n_features train_X, train_y = train[:, :n_obs], train[:, target] test_X, test_y = test[:, :n_obs], test[:, target] trnX=train_X train_X=np.atleast_3d(train_X) train_y = train_y.reshape((train_y.shape[0], 1, 1)) testX=test_X test_X=np.atleast_3d(test_X) test_y = test_y.reshape((test_y.shape[0], 1, 1)) return train_X, train_y,test_X,test_y def CNN_LSTM(inp_shape): model = Sequential() model.add(Conv1D(filters=32, kernel_size=3, activation='relu', inpu t_shape=inp_shape)) model.add(BatchNormalization()) model.add(MaxPooling1D(pool_size=2)) model.add(Conv1D(filters=32, kernel_size=3, activation='relu', padd ing='same')) model.add(BatchNormalization()) model.add(MaxPooling1D(pool_size=2)) model.add(Flatten()) model.add(RepeatVector(1)) model.add(LSTM(200, activation='tanh', return_sequences=True)) model.add(TimeDistributed(Dense(100, activation='relu'))) model.add(TimeDistributed(Dense(1))) 131 model.compile(loss='mse',optimizer='adam',metrics=['mae', 'mse', 'm ape']) return model III.5 Mã nguồn nạp chuẩn hóa liệu trước huấn luyện # NẠP DỮ LIỆU xl_file = pd.ExcelFile('gdrive/My Drive/DLproject/data/data.xlsx') df=load_xlsx(xl_file,'date') df.drop(['year', 'month', 'days', 'hours', 'Bar', 'Intemp', 'WD''], a xis=1, inplace=True)#Xóa cột khơng sử dụng # -# CHUẨN HÓA DỮ LIỆU data=df.values #data=data.astype('float32') scaler=MinMaxScaler(feature_range=(0, 1)) scaled = scaler.fit_transform(data) n_hours = #number of lag time n_features = df.shape[1] #number of input variables (features) norm_data = normalized_data(scaled, n_hours, 1) # III.6 Mã nguồn khởi tạo huấn luyện mô hình # TẠO MƠ HÌNH model=CNN_LSTM((train_X.shape[1],train_X.shape[2])) #model.summary() #TRAINNING MƠ HÌNH history=model.fit(train_X, train_y, epochs=2000) III.7 Mã nguồn tính tốn hiệu suất vẽ đồ thị # Đổi giá trị nồng độ pre=model.predict(train_X) inv_pre=inv_dat(pre[:,0],n_features,scaler,2) testY=test_y.reshape((len(test_y), 1)) inv_y=inv_dat(testY,n_features,scaler,2) #Tính tốn hiệu suất vẽ hình vedothi(inv_y,inv_pre,len(inv_pre)) hieusuat(inv_y,inv_pre) 132 PHỤ LỤC IV CẤU TRÚC CỦA CÁC MƠ HÌNH SO SÁNH 133 Phụ lục IV.1 Mơ hình LSTM Phụ lục IV.2 Mơ hình GRU 134 PHỤ LỤC V KẾT QUẢ CỦA MỘT SỐ MÔ HÌNH DỰ BÁO THỐNG KÊ CHẤT LƯỢNG KHƠNG KHÍ ỨNG DỤNG CÁC KỸ THUẬT TRÍ TUỆ NHÂN TẠO TRÊN THẾ GIỚI 135 Bảng V.1 Độ tin cậy mơ hình CNN-LSTM đề xuất số mơ hình ứng dụng thành cơng giới Mơ hình Thơng số Quốc gia NO NO2 NOx SO2 CO MAE (μg/m3) RMSE (μg/m3) r R2 MAE (μg/m3) RMSE (μg/m3) r R2 MAE (μg/m3) RMSE (μg/m3) r R2 MAE (μg/m3) RMSE (μg/m3) r R2 MAE (μg/m3) RMSE (μg/m3) r Nghiên cứu [12] [8] [31] CNN-LSTM Elman-ANN MLP Hà Nội, Việt Nam 12,17 17,25 0,795 0,632 7,93 11,34 0,869 0,755 17,10 23,03 0,812 0,660 5,46 7,28 0,598 0,357 779,91 1082,97 0,833 Palermo, Italy Athens, Hy Lạp ANN /ANFIS Tehran, Iran [15] [14] CNN-LSTM LSTM, GRU - [123] LSSVM Trung Quốc 3,49 – 23,42 4,5 – 32,09 0,9 – 0,98 - 0,81 – 2,69 1,29 – 3,61 0,75 – 0.98 0,47 – 3,00 0,58 – 4,14 0,91 – 0,95 0,09 – 0,49 0,13 – 0,50 0,93 – 0,96 0,48 – 1,44 0,72 – 2,08 0,73 – 0,97 0,01 – 0,03 0,02 - 0,04 - 0,35 – 0,43 136 O3 PM10 PM2.5 PM1 R2 MAE (μg/m3) RMSE (μg/m3) r R2 MAE (μg/m3) RMSE (μg/m3) r R2 MAE (μg/m3) RMSE (μg/m3) r R2 MAE (μg/m3) RMSE (μg/m3) r R2 0,694 12,43 17,64 0,886 0,786 9,39 14,50 0,881 0,776 5,33 8,11 0,922 0,849 5,14 7,87 0,909 0,826 3,29 – 3,59 4,44 – 4,99 0,72 – 0,87 2,77 – 5,58 4,53 – 7,44 0,93 – 0.97 - 0,86 – 0,91 25,1 0,666 14,63 24,22 0,95 - 137 0,41 – 0,81 - 0,90 – 0,99 1,76 – 6,90 2,41 – 9,27 0,95– 0,99 1,42 – 4,78 2,46 – 7,69 0,92 – 0,99 0,83 – 2,81 1,53 – 4,22 0,92 – 0,99