Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 81 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
81
Dung lượng
2,32 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN THỊ THANH XÂY DỰNG MÔ HÌNH MẠNG NƠ RON SÂU NHẰM ĐÁNH GIÁ NGUY CƠ CHÁY RỪNG Ở VIỆT NAM Chuyên ngành : Công Nghệ Thông Tin NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS.TS Lê Văn Hƣng Hà Nội – Năm 2019 Lời cam đoan Luận văn Thạc sĩ “Xây dựng mơ hình mạng nơ ron sâu nhằm đánh giá nguy cháy rừng Việt Nam” chuyên ngành Công nghệ thông tin công trình cá nhân tơi Các nội dung nghiên cứu kết trình bày luận văn trung thực rõ ràng Các tài liệu tham khảo, nội dung trích dẫn ghi rõ nguồn gốc Hà Nội, ngày 10 tháng 10 năm 2019 Tác giả luận văn Nguyễn Thị Thanh Mục lục Danh mục hình Danh mục bảng biểu Danh mục từ viết tắt MỞ ĐẦU .9 Lý chọn đề tài Mục tiêu 10 Nội dung nghiên cứu 10 Đối tƣợng phạm vi nghiên cứu 11 Phƣơng pháp nghiên cứu 11 Kết dự kiến 12 Ý nghĩa khoa học thực tiễn 13 Bố cục luận văn .13 CHƢƠNG 1: BÀI TOÁN DỰ BÁO NGUY CƠ CHÁY RỪNG 15 1.1 Tình hình nghiên cứu ngồi nƣớc 15 1.2 Hƣớng giải toán luận văn .20 CHƢƠNG 2: MẠNG NƠ RON NHÂN TẠO 21 2.1 Nơ ron nhân tạo 21 2.2 Mạng nơ ron nhân tạo 24 2.3 Huấn luyện mạng nơ ron .27 2.4 Thiết kế mơ hình mạng nơ ron truyền thẳng .37 CHƢƠNG 3: XÂY DỰNG MÔ HÌNH MẠNG NƠ RON SÂU ĐÁNH GIÁ .41 NGUY CƠ CHÁY RỪNG TẠI LÂM ĐỒNG .41 3.1 Vùng nghiên cứu 41 3.2 Thu thập liệu cháy rừng khứ yếu tố liên quan .44 3.3 Xây dựng tập liệu huấn luyện kiểm tra mơ hình 49 3.4 Đánh giá khả dự báo yếu tố đầu vào 50 3.5 Thiết kế kiến trúc mơ hình 51 3.6 Chọn thuật tốn huấn luyện mơ hình 53 3.7 Phƣơng pháp đánh giá mơ hình 53 3.8 Huấn luyện mơ hình 54 3.9 Thành lập đồ phân vùng nguy cháy rừng cho tỉnh Lâm Đồng 59 3.10 So sánh kết với số phƣơng pháp học máy khác 60 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 61 Kết đạt đƣợc 61 Hạn chế 61 Hƣớng phát triển 61 PHỤ LỤC 63 Danh mục hình Hình Một nơ ron thần kinh sinh học 22 Hình Cấu trúc nơ ron nhân tạo 22 Hình Hàm sigmoid 23 Hình Hàm 23 Hình Hàm ReLU 24 Hình ANN với hai tầng ẩn 25 Hình Gradient descent .28 Hình Các kí hiệu ANN 31 Hình Thuật tốn lan truyền ngược .33 Hình 10 Bản đồ tỉnh Lâm Đồng điểm cháy rừng năm 2013 41 Hình 11 Cháy rừng thông huyện Di Linh 44 Hình 12 Bản đồ yếu tố (a) Độ dốc; (b) Hướng dốc; (c) Độ cao; (d) Sử dụng đất; (e) Chỉ số NDVI (f) Khoảng cách đến đường giao thông 47 Hình 12 (tiếp tục): Bản đồ yếu tố (g) Khoảng cách tới khu dân cư; (h) Nhiệt độ; (i) Tốc độ gió (j) Lượng mưa 49 Hình 14 Mơ hình tốn dự báo nguy cháy rừng 53 Hình 15 Đường cong ROC AUC tập liệu huấn luyện 58 Hình 16 Đường cong ROC AUC tập liệu kiểm tra 58 Hình 17 Bản đồ phân vùng nguy cháy rừng tỉnh Lâm Đồng 59 Danh mục bảng biểu Bảng 3.1 Biến động diện tích loại đất, loại rừng giai đoạn 2005-2010 42 Bảng 3.2 Tỉ lệ % vụ cháy rừng theo tháng năm 2013 45 Bảng 3.3 Khả dự báo yếu tố đầu vào theo Pearson 50 Bảng 3.4 Ma trận hỗn hợp 54 Bảng 3.5 Ma trận hỗn hợp chuẩn hóa 54 Bảng 3.6 Kết thử nghiệm với thuật toán tối ưu Adam 55 Bảng 3.7 Kết thử nghiệm với thuật toán tối ưu Rmsprop 56 Bảng 3.8 Ma trận hỗn hợp tập liệu huấn luyện 57 Bảng 3.9 Ma trận hỗn hợp chuẩn hóa tập liệu huấn luyện 57 Bảng 3.10 Ma trận hỗn hợp tập liệu kiểm tra 57 Bảng 3.11 Ma trận hỗn hợp chuẩn hóa tập liệu kiểm tra 57 Bảng 3.12 Độ xác mơ hình ANN so với mơ hình học máy khác 60 STT Danh mục từ viết tắt Từ viết tắt Từ đầy đủ NDVI Normalized Difference Vegetation Index NDWI Normalized Difference Water Index NDMI Normalized Difference Moisture Index ANN Artificial Neural Network CNN Convolutional Neural Network MỞ ĐẦU Lý chọn đề tài Theo cơng bố trạng rừng tồn quốc năm 2018 Bộ Nơng nghiệp Phát triển nơng thơn, tính đến hết năm 2018, diện tích rừng tồn quốc 14,3 triệu ha, rừng tự nhiên 10,2 triệu rừng trồng 4,1 triệu (Bộ Nông nghiệp Phát triển nông thôn, 2017) Theo thống kê Cục Kiểm lâm, năm gần đây, bình quân năm lửa rừng thiêu trụi 1.500 rừng loại Thiệt hại ƣớc tính hàng trăm tỷ đồng năm, chƣa kể đến ảnh hƣởng xấu môi trƣờng sống, thiệt hại làm tăng lũ lụt vùng hạ lƣu, làm giảm tính đa dạng sinh học, phá vỡ cảnh quan, gây tổn hại đến tính mạng tài sản ngƣời Số liệu thống kê tài nguyên rừng cho thấy năm gần diện tích rừng tăng lên, nhƣng chất lƣợng rừng lại có chiều hƣớng giảm Rừng nguyên sinh khoảng 7%, rừng thứ sinh nghèo kiệt chiếm gần 70% tổng diện tích rừng nƣớc, loại rừng dễ xảy cháy Hiện nay, Việt Nam có khoảng triệu rừng dễ cháy, bao gồm rừng thông, rừng tràm, rừng tre nứa, rừng bạch đàn, rừng khộp, rừng non khoanh nuôi tái sinh tự nhiên rừng đặc sản Cùng với diện tích rừng dễ xảy cháy tăng thêm hàng năm, tình hình diễn biến thời tiết ngày phức tạp, khó lƣờng ảnh hƣởng biến đổi khí hậu làm nguy tiềm ẩn cháy rừng cháy lớn ngày nghiêm trọng Việt Nam Vì vậy, việc xây dựng mơ hình đánh giá nguy cháy rừng Việt Nam, áp dụng thử nghiệm cho tỉnh, có tính thời cao cần thiết Các phƣơng pháp dự báo nguy cháy rừng nƣớc ta chủ yếu dựa mơ hình truyền thống, ví dụ dựa số tổng hợp P (Nesterov, 1949) có cải tiến để phù hợp với điều kiện Việt Nam (Hƣng, 2004) tính theo yếu tố nhiệt độ, độ ẩm khơng khí, lƣợng mƣa, kiểu rừng, sức gió mức sƣơng mù Nhƣ vậy, thấy phƣơng pháp bỏ qua nhiều yếu tố đầu vào quan trọng cho toán dự báo nguy cháy rừng, đặc biệt cho vùng lớn, nhƣ: số thảm thực vật (NDVI, NDWI, NDMI), số ẩm địa hình (TWI), khoảng cách tới đƣờng giao thông, khoảng cách tới khu dân cƣ, độ dốc, hƣớng dốc, yếu tố đƣợc chứng minh có khả dự báo cao cháy rừng (Ganteaume, et al., 2013; Bui, et al., 2016; Bui, et al., 2017) Ngoài ra, nghiên cứu chƣa đề cập đến việc kiểm định độ xác dự báo Do đó, cần thiết phải có nghiên cứu xây dựng mô đánh giá nguy cháy rừng dựa phƣơng pháp trí tuệ tính tốn đại Các mơ hình sử dụng nhiều yếu tố đầu vào nói trên, đồng thời, độ xác dự báo mơ hình đƣợc đánh giá thông qua số thống kê Mục tiêu Xây dựng mơ hình mạng nơ ron truyền thẳng sâu đánh giá nguy cháy rừng Việt Nam, áp dụng thí điểm cho tỉnh Lâm Đồng Nội dung nghiên cứu Bài toán dự báo nguy cháy rừng đƣợc xem nhƣ tốn phân lớp cho điểm đồ raster (dạng lƣới ô vuông) với hai lớp: cháy rừng không cháy Để xây dựng mơ hình dự báo nguy cháy rừng, đề tài thu thập liệu liên quan đến cháy rừng vùng nghiên cứu khứ, sau tạo tập liệu huấn luyện kiểm tra mơ hình Sau mơ hình đƣợc xây dựng thành cơng, đƣợc sử dụng để tính số nguy cháy rừng cho tất điểm vùng nghiên cứu Vì vậy, đề tài thực nội dung sau đây: Thu thập, tổng hợp tài liệu, số liệu cháy rừng yếu tố liên quan khứ tỉnh Lâm Đồng; 10 Nghiên cứu sở khoa học phƣơng pháp xây dựng mơ hình mạng nơ ron nhân tạo nhằm đánh giá nguy cháy rừng; Lựa chọn yếu tố đầu vào thích hợp cho tốn mơ hình hóa cháy rừng vùng nghiên cứu chuẩn hóa liệu yếu tố này; Xây dựng tập liệu huấn luyện kiểm tra; đánh giá khả dự báo yếu tố đầu vào loại bỏ yếu tố khơng có khả dự báo; Xây dựng mơ hình mạng nơ ron truyền thẳng sâu cho toán dự báo nguy cháy rừng; Đánh giá độ xác dự báo mơ hình xây dựng tập liệu huấn luyện kiểm tra, so sánh với kết phƣơng pháp khác Đối tƣợng phạm vi nghiên cứu Đối tượng Cháy rừng yếu tố liên quan Mạng nơ ron ứng dụng Phạm vi nghiên cứu Tỉnh Lâm Đồng Mạng nơ ron truyền thẳng sâu Phƣơng pháp nghiên cứu Thu thập, tổng hợp tài liệu, số liệu từ nghiên cứu trƣớc cháy rừng khứ yếu tố liên quan vùng nghiên cứu: Đã có nghiên cứu cháy rừng yếu tố liên quan Lâm Đồng Tác giả thu thập tài liệu, số liệu từ nghiên cứu cho luận văn; Nghiên cứu sở khoa học phƣơng pháp xây dựng mơ hình mạng nơ ron nhân tạo nhằm dự báo nguy cháy rừng: Những sở khoa học đƣợc khẳng định nghiên cứu mạng nơ ron nhân tạo ứng 11 print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (T1, 378 - T1, T1/378*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (T0, 378 - T0, T0/378*100)) dataset = numpy.loadtxt("d:\Validationdata.csv", delimiter=",") Xnew = dataset[:,0:10] Yold = dataset[:,10] ynew = model.predict_classes(Xnew) print("\nTesting accuracy:") s=0 v1 = v0 = for i in range(len(Yold)): if Yold[i] == ynew[i]: s=s+1 if(Yold[i] == and Yold[i] == ynew[i]): v1 = v1 + if(Yold[i] == and Yold[i] == ynew[i]): v0 = v0 + print("\n Testing accuracy: %s/324 dat %.2f%%" % (s,(s/324)*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (v1, 162 - v1, v1/162*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (v0, 162 - v0, v0/162*100)) cnf_matrix = confusion_matrix(Yold, ynew) print('Confusion matrix:') print(cnf_matrix) def plot_confusion_matrix(cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix Normalization can be applied by setting `normalize=True` """ if normalize: 68 cm = cm.astype('float') / cm.sum(axis=1, keepdims = True) plt.imshow(cm, interpolation='nearest', cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) fmt = '.2f' if normalize else 'd' thresh = cm.max() / for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])): plt.text(j, i, format(cm[i, j], fmt), horizontalalignment="center", color="white" if cm[i, j] > thresh else "black") plt.tight_layout() plt.ylabel('True label') plt.xlabel('Predicted label') # Plot non-normalized confusion matrix class_names = [0, 1] plt.figure() plot_confusion_matrix(cnf_matrix, classes=class_names, title='Confusion matrix, without normalization') # Plot normalized confusion matrix plt.figure() plot_confusion_matrix(cnf_matrix, classes=class_names, normalize=True, title='Normalized confusion matrix') plt.show() Chƣơng trình đánh giá ma trận CM cho tập huấn luyện import numpy import matplotlib.pyplot as plt import itertools import numpy as np from numpy.random import seed seed(1) 69 #from tensorflow import set_random_seed #set_random_seed(2) from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from sklearn.metrics import confusion_matrix from keras.optimizers import Adam from sklearn.metrics import roc_curve from keras.constraints import maxnorm dataset = numpy.loadtxt("d:\Traindata1.csv", delimiter=",") X = dataset[:,0:10] Y = dataset[:,10] phanbo = 'glorot_uniform' hamtruyen = 'tanh' model = Sequential() # model.add(Dropout(0.2, input_shape=(10,))) # model.add(Dropout(0.2)) model.add(Dense(10, input_dim=10, init=phanbo, activation=hamtruyen)) model.add(Dropout(0.2)) model.add(Dense(20, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(10, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(5, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(1, init=phanbo, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, Y, nb_epoch=2000, batch_size=20) scores = model.evaluate(X, Y) print("\nTraining accuracy\n") Yn = model.predict_classes(X) 70 T1 = T0 = for i in range(len(X)): # print("X=%s, Predicted=%s" % (X[i], Yn[i])) if(Y[i] == and Y[i] ==Yn[i]): T1 = T1 + if(Y[i] == and Y[i] ==Yn[i]): T0 = T0 + print("\n Training accuracy (%s): %.2f%%" % (model.metrics_names[1], scores[1]*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (T1, 378 - T1, T1/378*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (T0, 378 - T0, T0/378*100)) dataset = numpy.loadtxt("d:\Validationdata.csv", delimiter=",") Xnew = dataset[:,0:10] Yold = dataset[:,10] ynew = model.predict_classes(Xnew) print("\nTesting accuracy:") s=0 v1 = v0 = for i in range(len(Yold)): if Yold[i] == ynew[i]: s=s+1 if(Yold[i] == and Yold[i] == ynew[i]): v1 = v1 + if(Yold[i] == and Yold[i] == ynew[i]): v0 = v0 + print("\n Testing accuracy: %s/324 dat %.2f%%" % (s,(s/324)*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (v1, 162 - v1, v1/162*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (v0, 162 - v0, v0/162*100)) cnf_matrix = confusion_matrix(Y, Yn) print('Confusion matrix:') 71 print(cnf_matrix) def plot_confusion_matrix(cm, classes, normalize=False, title='Confusion matrix', cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix Normalization can be applied by setting `normalize=True` """ if normalize: cm = cm.astype('float') / cm.sum(axis=1, keepdims = True) plt.imshow(cm, interpolation='nearest', cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) fmt = '.2f' if normalize else 'd' thresh = cm.max() / for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])): plt.text(j, i, format(cm[i, j], fmt), horizontalalignment="center", color="white" if cm[i, j] > thresh else "black") plt.tight_layout() plt.ylabel('True label') plt.xlabel('Predicted label') # Plot non-normalized confusion matrix class_names = [0, 1] plt.figure() plot_confusion_matrix(cnf_matrix, classes=class_names, title='Confusion matrix, without normalization') # Plot normalized confusion matrix plt.figure() plot_confusion_matrix(cnf_matrix, classes=class_names, normalize=True, title='Normalized confusion matrix') 72 plt.show() Chƣơng trình vẽ đƣờng cong ROC import numpy import matplotlib.pyplot as plt import itertools import numpy as np from numpy.random import seed seed(1) #from tensorflow import set_random_seed #set_random_seed(2) from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from sklearn.metrics import confusion_matrix from keras.optimizers import Adam from sklearn.metrics import roc_curve from keras.constraints import maxnorm dataset = numpy.loadtxt("d:\Traindata1.csv", delimiter=",") X = dataset[:,0:10] Y = dataset[:,10] phanbo = 'glorot_uniform' hamtruyen = 'tanh' model = Sequential() # model.add(Dropout(0.2, input_shape=(10,))) # model.add(Dropout(0.2)) model.add(Dense(10, input_dim=10, init=phanbo, activation=hamtruyen)) model.add(Dropout(0.2)) model.add(Dense(20, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(10, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(5, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) 73 model.add(Dropout(0.2)) model.add(Dense(1, init=phanbo, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, Y, nb_epoch=2000, batch_size=20) scores = model.evaluate(X, Y) print("\nTraining accuracy\n") Yn = model.predict_classes(X) T1 = T0 = for i in range(len(X)): # print("X=%s, Predicted=%s" % (X[i], Yn[i])) if(Y[i] == and Y[i] ==Yn[i]): T1 = T1 + if(Y[i] == and Y[i] ==Yn[i]): T0 = T0 + print("\n Training accuracy (%s): %.2f%%" % (model.metrics_names[1], scores[1]*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (T1, 378 - T1, T1/378*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (T0, 378 - T0, T0/378*100)) dataset = numpy.loadtxt("d:\Validationdata.csv", delimiter=",") Xnew = dataset[:,0:10] Yold = dataset[:,10] ynew = model.predict_classes(Xnew) print("\nTesting accuracy:") s=0 v1 = v0 = for i in range(len(Yold)): if Yold[i] == ynew[i]: s=s+1 if(Yold[i] == and Yold[i] == ynew[i]): v1 = v1 + 74 if(Yold[i] == and Yold[i] == ynew[i]): v0 = v0 + print("\n Testing accuracy: %s/324 dat %.2f%%" % (s,(s/324)*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (v1, 162 - v1, v1/162*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (v0, 162 - v0, v0/162*100)) y_pred_keras = model.predict(Xnew).ravel() fpr_keras, tpr_keras, thresholds_keras = roc_curve(Yold, y_pred_keras) from sklearn.metrics import auc auc_keras = auc(fpr_keras, tpr_keras) plt.figure(1) plt.plot([0, 1], [0, 1], 'k ') plt.plot(fpr_keras, tpr_keras, label='DNN (area = {:.3f})'.format(auc_keras)) # plt.plot(fpr_rf, tpr_rf, label='RF (area = {:.3f})'.format(auc_rf)) plt.xlabel('False positive rate') plt.ylabel('True positive rate') plt.title('ROC curve') plt.legend(loc='best') plt.show() # Zoom in view of the upper left corner plt.figure(2) plt.xlim(0, 0.2) plt.ylim(0.8, 1) plt.plot([0, 1], [0, 1], 'k ') plt.plot(fpr_keras, tpr_keras, label='DNN (area = {:.3f})'.format(auc_keras)) # plt.plot(fpr_rf, tpr_rf, label='RF (area = {:.3f})'.format(auc_rf)) plt.xlabel('False positive rate') plt.ylabel('True positive rate') plt.title('ROC curve (zoomed in at top left)') plt.legend(loc='best') plt.show() Chƣơng trình vẽ đƣờng cong ROC cho tập huấn luyện import numpy import matplotlib.pyplot as plt import itertools import numpy as np 75 from numpy.random import seed seed(1) #from tensorflow import set_random_seed #set_random_seed(2) from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from sklearn.metrics import confusion_matrix from keras.optimizers import Adam from sklearn.metrics import roc_curve from keras.constraints import maxnorm dataset = numpy.loadtxt("d:\Traindata1.csv", delimiter=",") X = dataset[:,0:10] Y = dataset[:,10] phanbo = 'glorot_uniform' hamtruyen = 'tanh' model = Sequential() # model.add(Dropout(0.2, input_shape=(10,))) # model.add(Dropout(0.2)) model.add(Dense(10, input_dim=10, init=phanbo, activation=hamtruyen)) model.add(Dropout(0.2)) model.add(Dense(20, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(10, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(5, init=phanbo, activation=hamtruyen,W_constraint=maxnorm(3))) model.add(Dropout(0.2)) model.add(Dense(1, init=phanbo, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X, Y, nb_epoch=2000, batch_size=20) 76 scores = model.evaluate(X, Y) print("\nTraining accuracy\n") Yn = model.predict_classes(X) T1 = T0 = for i in range(len(X)): # print("X=%s, Predicted=%s" % (X[i], Yn[i])) if(Y[i] == and Y[i] ==Yn[i]): T1 = T1 + if(Y[i] == and Y[i] ==Yn[i]): T0 = T0 + print("\n Training accuracy (%s): %.2f%%" % (model.metrics_names[1], scores[1]*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (T1, 378 - T1, T1/378*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (T0, 378 - T0, T0/378*100)) dataset = numpy.loadtxt("d:\Validationdata.csv", delimiter=",") Xnew = dataset[:,0:10] Yold = dataset[:,10] ynew = model.predict_classes(Xnew) print("\nTesting accuracy:") s=0 v1 = v0 = for i in range(len(Yold)): if Yold[i] == ynew[i]: s=s+1 if(Yold[i] == and Yold[i] == ynew[i]): v1 = v1 + if(Yold[i] == and Yold[i] == ynew[i]): v0 = v0 + print("\n Testing accuracy: %s/324 dat %.2f%%" % (s,(s/324)*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (v1, 162 - v1, v1/162*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (v0, 162 - v0, v0/162*100)) 77 y_pred_keras = model.predict(X).ravel() fpr_keras, tpr_keras, thresholds_keras = roc_curve(Y, y_pred_keras) # fpr_keras, tpr_keras, thresholds_keras = roc_curve(Y, Yn) from sklearn.metrics import auc auc_keras = auc(fpr_keras, tpr_keras) plt.figure(1) plt.plot([0, 1], [0, 1], 'k ') plt.plot(fpr_keras, tpr_keras, label='DNN (area = {:.3f})'.format(auc_keras)) # plt.plot(fpr_rf, tpr_rf, label='RF (area = {:.3f})'.format(auc_rf)) plt.xlabel('False positive rate') plt.ylabel('True positive rate') plt.title('ROC curve') plt.legend(loc='best') plt.show() # Zoom in view of the upper left corner plt.figure(2) plt.xlim(0, 0.2) plt.ylim(0.8, 1) plt.plot([0, 1], [0, 1], 'k ') plt.plot(fpr_keras, tpr_keras, label='DNN (area = {:.3f})'.format(auc_keras)) # plt.plot(fpr_rf, tpr_rf, label='RF (area = {:.3f})'.format(auc_rf)) plt.xlabel('False positive rate') plt.ylabel('True positive rate') plt.title('ROC curve (zoomed in at top left)') plt.legend(loc='best') plt.show() Chƣơng trình dùng phƣơng pháp SVM import numpy from numpy.random import seed seed(1) #from tensorflow import set_random_seed #set_random_seed(2) from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from sklearn.svm import SVC 78 # Pha huan luyen dataset = numpy.loadtxt("d:\Traindata1.csv", delimiter=",") X = dataset[:,0:10] Y = dataset[:,10] model = SVC(C=1.0, kernel='rbf', gamma='auto') # model = SVC(C=10.0, kernel='sigmoid', gamma='auto') # model = SVC(gamma='scale', C=1.0, epsilon=0.2) # model = SVC(kernel='linear', probability=True) model.fit(X, Y) print("\nTraining accuracy\n") Yn = model.predict(X) T1 = T0 = for i in range(len(X)): # print("X=%s, Predicted=%s" % (X[i], Yn[i])) if(Y[i] == and Y[i] ==Yn[i]): T1 = T1 + if(Y[i] == and Y[i] ==Yn[i]): T0 = T0 + print("\n Training accuracy: %.2f%%" % ((T1+T0)/756*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (T1, 378 - T1, T1/378*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (T0, 378 - T0, T0/378*100)) # Pha kiem thu dataset = numpy.loadtxt("d:\Validationdata.csv", delimiter=",") Xnew = dataset[:,0:10] Yold = dataset[:,10] ynew = model.predict(Xnew) 79 print("\nTesting accuracy:") s=0 v1 = v0 = for i in range(len(Yold)): if Yold[i] == ynew[i]: s=s+1 if(Yold[i] == and Yold[i] == ynew[i]): v1 = v1 + if(Yold[i] == and Yold[i] == ynew[i]): v0 = v0 + print("\n Testing accuracy: %s/324 dat %.2f%%" % (s,(s/324)*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (v1, 162 - v1, v1/162*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (v0, 162 - v0, v0/162*100)) model.score(Xnew,Yold) Chƣơng trình dùng phƣơng pháp RF import numpy from numpy.random import seed seed(1) #from tensorflow import set_random_seed #set_random_seed(2) from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from sklearn.ensemble import RandomForestClassifier # Pha huan luyen dataset = numpy.loadtxt("d:\Traindata1.csv", delimiter=",") X = dataset[:,0:10] Y = dataset[:,10] model = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0) 80 model.fit(X, Y) print("\nTraining accuracy\n") Yn = model.predict(X) T1 = T0 = for i in range(len(X)): # print("X=%s, Predicted=%s" % (X[i], Yn[i])) if(Y[i] == and Y[i] ==Yn[i]): T1 = T1 + if(Y[i] == and Y[i] ==Yn[i]): T0 = T0 + print("\n Training accuracy: %.2f%%" % ((T1+T0)/756*100)) print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (T1, 378 - T1, T1/378*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (T0, 378 - T0, T0/378*100)) # Pha kiem thu dataset = numpy.loadtxt("d:\Validationdata.csv", delimiter=",") Xnew = dataset[:,0:10] Yold = dataset[:,10] ynew = model.predict(Xnew) print("\nTesting accuracy:") s=0 v1 = v0 = for i in range(len(Yold)): if Yold[i] == ynew[i]: s=s+1 if(Yold[i] == and Yold[i] == ynew[i]): v1 = v1 + if(Yold[i] == and Yold[i] == ynew[i]): v0 = v0 + print("\n Testing accuracy: %s/324 dat %.2f%%" % (s,(s/324)*100)) 81 print("\n True positive: %s, False positive: %s, Positive predictive value: %.2f%%" % (v1, 162 - v1, v1/162*100)) print("\n True negative: %s, False negative: %s, Negative predictive value: %.2f%%" % (v0, 162 - v0, v0/162*100)) model.score(Xnew,Yold) 82 ... hình mạng nơ ron truyền thẳng CHƢƠNG 3: XÂY DỰNG MÔ HÌNH MẠNG NƠ RON SÂU ĐÁNH GIÁ NGUY CƠ CHÁY RỪNG TẠI LÂM ĐỒNG 3.1 Vùng nghiên cứu 3.2 Thu thập liệu cháy rừng khứ yếu tố liên quan 3.3 Xây dựng. .. 24 2.3 Huấn luyện mạng nơ ron .27 2.4 Thiết kế mơ hình mạng nơ ron truyền thẳng .37 CHƢƠNG 3: XÂY DỰNG MƠ HÌNH MẠNG NƠ RON SÂU ĐÁNH GIÁ .41 NGUY CƠ CHÁY RỪNG TẠI LÂM ĐỒNG ... Đồng; 10 Nghiên cứu sở khoa học phƣơng pháp xây dựng mô hình mạng nơ ron nhân tạo nhằm đánh giá nguy cháy rừng; Lựa chọn yếu tố đầu vào thích hợp cho tốn mơ hình hóa cháy rừng vùng nghiên cứu