Mẫu Giá trị thực tế Giá trị dự báo Tỷ lệ % Lỗi MSE
0 345 346.04 99.7 0.0104 1 356 356.9 99.75 0.0045 2 307 307.49 99.84 0.0016 3 248 248.48 99.81 0.0012 4 147 144.2 98.1 0.0056 5 310 310.08 99.97 0.0001 6 421 424.55 99.16 0.0051 7 342 343.03 99.7 0.0013 8 142 142.17 99.88 0.0002 9 354 354.77 99.78 0.0008 10 277 277.84 99.7 0.0008 11 465 451.42 97.08 0.0113 12 187 187.15 99.92 0.0001 13 387 386.46 99.86 0.0004 14 254 253.81 99.93 0.0001 15 187 187.99 99.47 0.0006 16 150 149.24 99.5 0.0004
17 108 112.13 96.18 0.0023
18 230 229.69 99.86 0.0002
19 250 249.81 99.92 0.0001
Nhƣ vậy kết quả dự báo sử dụng công cụ là mạng nơron truyền thẳng với thuật toán lan truyền ngƣợc sai số cho kết quả dự báo tƣơng đối chính xác, sai số là chấp nhận đƣợc.
Hình 3.2. Kết quả kiểm tra mạng
Hình 3.2 mô tả kết quả kiểm tra mạng với bộ dữ liệu kiểm tra từ năm 2011 đến 2017. Đƣờng màu xanh mô ta giá trị thực tế thu thập đƣợc và đƣờng màu đỏ là đƣờng thể hiện giá trị dự báo, ngoài ra giao diện còn thể hiện lỗi MSE của dự báo. Nhìn vào biểu đồ kiểm tra kết quả của mạng ta nhận thấy kết quả dự báo của mạng là tƣơng đối chính xác, tức là sai số của dự báo là nhỏ.
Hình 3.3. Kết quả dự báo cho 3 năm 2018, 2019, 2020
Trong bảng là kết quả dự báo của ba năm liên tiếp là 2018, 2019 và 2020. Số dự báo là đƣờng màu đỏ. Kết quả dự báo của năm 2019 sẽ có 1 đầu vào là kết quả dự báo của năm 2018 và năm 2020 sẽ lấy kết quả dự báo của năm 2019 làm 1 đầu vào.
3.8. So sánh các phƣơng pháp dự báo.
Hiện nay có rất nhiều các phƣơng pháp khác nhau đƣợc sử dụng để dự báo nhw : Phƣơng pháp dự báo trung bình dài hạn, phƣơng pháp dự báo trung bình động, phƣơng pháp hồi quy tuyến tính, phƣơng pháp san bằng số mũ…
Để đánh giá độ chính xác và tính ƣu việt của mạng nơron trong dự báo luận văn có sử dụng các phƣơng pháp này để so sánh kết quả dự báo.
Phƣơng pháp dự báo trung bình dài hạn : là phƣơng pháp mà số dự báo
bằng trung bình cộng của các quan sát thực tế trƣớc đó. Ta có công thức : 𝐹𝑡+1 = 𝑛 −1𝑖=0 𝐷𝑡−1 𝑛 (3-3) Trong đó : Ft+1 : Số dự báo ở kỳ thứ t+1 Dt : Số quan sát ử kỳ thứ t n : Tổng quan sát
Bảng 3.8. Kết quả dự báo bằng phương pháp trung bình dài hạn STT Giá trị thực tế Giá trị dự báo Tỷ lệ % 1 345 273 78.99 2 356 279 78.40 3 307 286 93.00 4 248 287 86.36 5 147 284 51.70 6 310 275 88.77 7 421 277 65.88 8 342 286 83.57 9 142 289 49.14 10 354 281 79.44 11 277 285 97.24 12 465 284 61.18 13 187 293 63.89 14 387 288 74.44 15 254 292 86.92 16 187 291 64.33 17 150 287 52.32 18 108 282 38.35 19 230 275 83.51 20 250 274 91.29
Phƣơng pháp trung bình động :Số dự báo ở kỳ thứ t+1 bằng trung bình cộng
của n kỳ trƣớc đó. Cứ mỗi kỳ dự báo sẽ bỏ đi số liệu xa nhất trong quá khứ và thêm vào số liệu mới nhất. Ta có công thức :
𝐹𝑡+1 = 𝐷𝑡+ 𝐷𝑡−1+⋯+𝐷𝑡−𝑛
𝑛+1 (3-4)
Bảng 3.9. Kết quả dự báo bằng phương pháp trung bình động
STT Giá trị thực tế Giá trị dự báo Tỷ lệ %
1 345 194 56.23 2 356 263 73.78 3 307 265 86.43 4 248 336 73.81 5 147 304 48.41 6 310 234 75.48 7 421 235 55.82
9 142 358 39.70 10 354 302 85.22 11 277 279 99.16 12 465 258 55.41 13 187 365 51.19 14 387 310 80.02 15 254 346 73.34 16 187 276 67.75 17 150 276 54.35 18 108 197 54.82 19 230 148 64.49 20 250 163 65.07
Phƣơng pháp này có sử dụng công cụ dự báo Moving Average và cho ra sơ đồ dự báo nhƣ sau :
Hình 3.4. Sơ đồ kết quả dự báo trung bình động
Phƣơng pháp hồi quy tƣơng quan : Phƣơng pháp này sử dụng mối phụ thuộc
của một biến (biến phụ thuộc) với một hay nhiều biến khác (biến độc lập) để ƣớc lƣợng và dự báo giá trị trung bình của biến phụ thuộc với các giá trị đã biết của biến độc lập.
Ta có kết quả dự báo nhƣ sau :
Bảng 3.10. Kết quả dự báo bằng phương pháp hồi quy tương quan
STT Giá trị thực tế Giá trị dự báo Tỷ lệ %
1 345 345 99.91 2 356 356 99.92 3 307 310 99.13 4 248 248 99.86 5 147 144 97.69 6 310 312 99.46 7 421 420 99.70 8 342 340 99.33
10 354 354 99.92 11 277 280 99.05 12 465 465 99.95 13 187 189 99.14 14 387 390 99.30 15 254 255 99.74 16 187 190 98.61 17 150 148 98.40 18 108 106 97.76 19 230 216 93.76 20 250 248 99.06
Phƣơng pháp dự báo san bằng mũ đơn giản : Phƣơng pháp này sẽ dự báo giá
trị mới bằng giá trị cũ cộng với khoảng chênh lệch giữa nhu cầu dự báo thực và nhu cầu dự báo của kỳ trƣớc, có điều chỉnh hệ số.
Ta có công thức sau :
𝐹𝑡 = 𝐹𝑡−1+∝ 𝐷𝑡−1 − 𝐹𝑡−1 với 𝑂 <∝< 1 (3-5) Trong đó :
Ft : Nhu cầu dự báo kỳ t
Ft-1 : Nhu cầu dự báo kỳ t-1
Dt-1 : Nhu cầu thực kỳ t-1
α : Hệ số san bằng mũ
Ta có bảng kết quả dự báo nhƣ sau :
Bảng 3.11. Kết quả dự báo bằng phương pháp san bằng mũ
STT Giá trị thực tế Giá trị dự báo Tỷ lệ %
1 345 289 83.78 2 356 336 94.36 3 307 316 97.25 4 248 268 92.43 5 147 183 80.16 6 310 272 87.75 7 421 376 89.38 8 342 352 97.08 9 142 205 69.24 10 354 309 87.38 11 277 287 96.62 12 465 412 88.50
13 187 254 73.52 14 387 347 89.72 15 254 282 90.08 16 187 215 86.78 17 150 170 88.42 18 108 126 85.38 19 230 199 86.50 20 250 165 65.87
Sơ đồ biểu diễn độ sai số của dự báo :
Hình 3.5. Kết quả dự báo san bằng mũ
Qua các kết quả của các phƣơng pháp dự báo thì kết quả dự báo bằng công cụ mạng nơron cho kết quả chính xác và đáng tin cậy nhất. Vì vậy, luận văn lựa chọn dự báo tuyển sinh bằng mạng nơron truyền thẳng với thuật toán lan truyền ngƣợc sai số là hoàn toàn có cơ sở.
3.9 Kết luận chƣơng 3
Qua các kết quả thực nghiệm thu đƣợc trong quá trình thử nghiệm trên công cụ dự báo trong luận văn đã chỉ ra đƣợc những điều sau:
Mạng nơron nhân tạo có tính ứng dụng rất đa dạng, khá hiệu quả trong các bài toán dự báo.
Mức độ chính xác của mô hình phụ thuộc vào rất nhiều thông số, tuy nhiên lại chƣa có một phƣơng pháp nào để xác định đƣợc chính xác định tính cũng nhƣ định lƣợng của các thông số. Ta phải thông qua phƣơng pháp thực nghiệm để xác định giá trị thông số tối ƣu.
Số liệu của mỗi đơn vị tuyển sinh có đặc trƣng riêng và thông số tối ƣu thay đổi theo mức độ đặc trƣng của số liệu.
KẾT LUẬN
Luận văn nghiên cứu mạng nơron nhân tạo, mô hình mạng nơron truyền thẳng đƣợc huấn luyện với giải thuật lan truyền ngƣợc cho bài toán dự báo số học sinh tuyển vào Trung tâm GDNN-GDTX quận Đống Đa.
Các đóng góp của luận văn:
1. Luận văn đã nghiên cứu tổng quan về mạng nơron nhân tạo, đi sâu vào nghiên cứu mạng nơron lan truyền thẳng huấn luyện bằng thuật toán lan truyền ngƣợc sai số nhằm đạt tới một kết quả tốt nhất cho bài toán tối ƣu trọng số mạng nơron nhân tạo.
2. Luận văn cũng đã xây dựng đƣợc phần mềm dự báo số học sinh tuyển vào Trung tâm GDNN-GDTX quận Đống Đa trong năm tiếp theo.
Hƣớng phát triển tiếp theo
Những kết quả thực nghiệm khả quan dựa trên nghiên cứu về ứng dụng mạng nơron nhân tạo với thuật toán học là lan truyền ngƣợc sai số trong bài toán dự báo số học sinh tuyển vào Trung tâm GDNN-GDTX quận Đống Đa trong năm tới cho thấy đây là một mô hình hiệu quả.
Vì vậy, hƣớng phát triển tiếp theo của luận văn là cải tiến phƣơng pháp dự báo để có kết quả chính xác nhất.
Ngoài ra, có thể sử dụng kết hợp với logic mờ và giải thuật di truyền (GA) để cho kết quả dự báo chính xác hơn.
TÀI LIỆU THAM KHẢO Tiếng Việt
1. Thái Trung Hải (2014), Sử dụng mạng nơron trong việc dự đoán kết quả đậu đại học, Luận văn Thạc sỹ, Đại học Lạc Hồng.
2. Nguyễn Quang Hoan, Hoàng Thị Lan Phƣơng (2006), “Dự báo giá chứng khoán sử dụng công nghệ mạng nơron”, Kỷ yếu hội nghị khoa học lần 3 về nghiên cứu, phát triển và ứng dụng công nghệ thông tin và truyền thông Hà Nội ICT.rda’06 (20-21/5/2006) tr 157 -164
3. Nguyễn Quang Hoan (2005), Giáo trình mạng nơron nhân tạo, Học viện công nghệ bƣu chính viễn thông.
4. Hoàng Phúc Lâm, Nguyễn Hƣớng Điền, Công Thanh, Hoàng Thanh Vân (2007), “Sử dụng mạng nơron đa lớp truyền thẳng và mạng truy hồi dự báo tổng lƣợng bức xạ ngày cho một số trạm ở đồng bằng phía Bắc Việt Nam”, Tạp chí Khí tượng Thủy văn số 10 (559).
5. Trần Đức Minh (2002), Ứng dụng mạng nơron truyền thẳng trong dự báo dữ liệu, Luận văn thạc sỹ, Viện Công nghệ Thông tin.
6. Nguyễn Đình Thúc (2000), Mạng nơron nhân tạo – phương pháp và ứng dụng,
Nhà xuất bản Giáo dục.
7. Nguyễn Văn Trịnh (2012), Ứng dụng mạng nơron trong dự báo tỷ lệ nghỉ học, Luận văn thạc sỹ,Viện Toán Ứng dụng và Tin học – Đại học Bách khoa Hà Nội.
8. Phạm Thị Hoàng Nhung (2007), Nghiên cứu, ứng dụng các phương pháp học máy tiên tiến trong công tác dự báo, vận hành hồ Hòa Bình, Luận văn thạc sỹ, trƣờng Đại học Công nghệ (ĐHQGHN).
Tiếng Anh
9. John C. Chambers, Satinder K. Mullick and Donald D. Smith (1971), How to Choose the Right Forecasting Technique, https://hbr.org/1971/07/how-to- choose-the-right-forecasting-technique.
10.Petar Halachev (2012), “Prediction of e-Learning Efficiency by Neural Networks”, Cybernetics And Information Technologies – volume 12 – Nơron 12, Bulgarian Academy of Sciences.
11.Hopfield, J.J (1982), “Neural Networks and Physical Systems with Emergent Collective Computational Abilities”, Proceeding of Natural Academic Sciences, USA, vol. 79, pp. 2.554 – 2.558.
12.Robert J. Schallkoff (1997), Artificial Neural Networks, The McGraw – Hill Companies, Inc 1997.
13.David Silverman, Jonh A. Dracup (2000), “Artificial Neural Networks and Long-Range Precipitation Prediction in California”, Journal of Applied Meteorology, vol 39 (Jan 2000), pp. 57-66.
14.Dipti Srinivasan, A.C. Liew, Jonh S., P. Chen (1991), “Short Term Forecasting Using Neural Networks Approach”, IEEE 91TH0374-9/91/0000-0012, pp 12- 16, 1991.
15.Morioka Y., Sakurai K., Yokoyama A. Sekine Y. (1993), “Next Day Peak Load Forecasting Using a Multilayer Neural Network with an Additional Learning”,
IEEE, 0-7803-1217-1/93, 1993.
16.Michael Negnevitsky (2005), Artificial Intelligence, Addison Wesley. 17.FicoCorporation (2009), Understanding Predictive Analytics.
18.Dean Abbott (2014), Applied Predictive Analytics: Principles and Techniques for the Professional Data Analyst,Wiley.
PHỤ LỤC A
GIỚI THIỆU CÔNG CỤ VÀ KẾT QUẢ DỰ BÁO 1. Giao diện chính của phần mềm
Chức năng Cấu hình mạng:
- Nút lệnh Nhập từ tệp: Cho phép ngƣời dùng nạp dữ liệu từ tệp dữ liệu. - Nút lệnh Tạo thông số mạng: Để tạo mới một mạng nơron lan truyền
ngƣợc. Thông số mạng đƣợc tạo bao gồm: Số nơron lớp vào, số nơron lớp ẩn, số nơron lớp ra, tốc độ học, hệ số quán tính, số lần học tối đa, sai số cực tiểu.
2. Giao diện huấn luyện
Trƣớc khi huấn luyện phải Nhập dữ liệu cho mạng.
- Nút lệnh Huấn luyện: Dùng để huấn luyện mạng, màn hình hiển thị thông số huấn luyện mạng gồm Tập dữ liệu huấn luyện và dữ liệu đã chuẩn hóa.
- Nút lệnh Chuẩn hóa: Dùng để chuẩn hóa dữ liệu huấn luyện. - Nút lệnh Xóa dữ liệu: Để xóa các dữ liệu.
3. Giao diện Kiểm tra mạng
Trƣớc khi kiểm tra mạng phải Nhập dữ liệu cho mạng.
Nút lệnh Kiểm tra mạng: Để kiểm tra độ chính xác kết quả huấn luyện của mạng. Giao diện hiển thị tập dữ liệu đƣợc kiểm tra và dữ liệu đã chuẩn hóa của mạng.
5. Chức năng Giới thiệu vào Thoát
Chức năng Giới thiệu: Hiện các thông tin tên đề tài, tác giả, giáo viên hƣớng dẫn
luận văn.
PHỤ LỤC B
MỘT SỐ MÃ NGUỒN CỦA CÔNG CỤ 1. Huấn luyện mạng
public void Bp_Run(List<double> sampleSeries, double learnRate, double momentum, int theEpoches = 10000, double residual = 0.00001)
{
InitForTrain(); int i, j, k, n; int epoch = 0;
double MAE = Double.MaxValue; double LastError = Double.MaxValue;
List<double> MAError = new List<double>();
double[,] deltaInputHidden = new double[s_Network.m_iNumInputNodes + 1, s_Network.m_iNumHiddenNodes];
double[,] deltaHiddenOutput = new double[s_Network.m_iNumHiddenNodes + 1, s_Network.m_iNumOutputNodes];
double[,] lagDeltaInputHidden = new double[s_Network.m_iNumInputNodes + 1, s_Network.m_iNumHiddenNodes];
double[,] lagDeltaHiddenOutput = new double[s_Network.m_iNumHiddenNodes + 1, s_Network.m_iNumOutputNodes];
for (j = 0; j < s_Network.m_iNumHiddenNodes; j++) // initialize weight- step of Input Hidden connection
{
for (i = 0; i <= s_Network.m_iNumInputNodes; i++) {
deltaInputHidden[i, j] = 0.0; lagDeltaInputHidden[i, j] = 0.0; }
}
for (k = 0; k < s_Network.m_iNumOutputNodes; k++) // initialize weight- step of Hidden Output connection
{ for (j = 0; j <= s_Network.m_iNumHiddenNodes; j++) { deltaHiddenOutput[j, k] = 0.0; lagDeltaHiddenOutput[j, k] = 0.0; } }
TraningProgress frmTraningProgress = new TraningProgress(); frmTraningProgress.SetInit(sampleSeries.Count(), theEpoches , 1); System.Windows.Forms.Application.DoEvents();
frmTraningProgress.Show(); bool isUserStop = false;
RunTime BeginRunTime = new RunTime(); BeginRunTime.GetCurrTime();
while (epoch < theEpoches) {
for (n = s_Network.m_iNumInputNodes; n < sampleSeries.Count; n++) {
// forward
double[] lstTemp = new double[s_Network.m_iNumInputNodes]; for (i = s_Network.m_iNumInputNodes; i > 0; i--)
{
lstTemp[s_Network.m_iNumInputNodes - i] = sampleSeries[n - i]; } s_Network.CalculateOutput(lstTemp); for (k = 0; k < s_Network.m_iNumOutputNodes; k++) { MAE += Math.Abs(sampleSeries.ElementAt(n + k) - s_Network.m_arOutputNodes[k].GetOutput()); } // backward
/*calculate weight-step for weights connecting from hidden nodes to output nodes*/
for (k = 0; k < s_Network.m_iNumOutputNodes; k++) {
for (j = 0; j <= s_Network.m_iNumHiddenNodes; j++) {
double parDerv = -s_Network.m_arOutputNodes[k].GetOutput() * (1 - s_Network.m_arOutputNodes[k].GetOutput()) *
s_Network.m_arHiddenNodes[j].GetOutput() * (sampleSeries.ElementAt(n) - s_Network.m_arOutputNodes[k].GetOutput());
deltaHiddenOutput[j, k] = -learnRate * parDerv + momentum * lagDeltaHiddenOutput[j, k];
lagDeltaHiddenOutput[j, k] = deltaHiddenOutput[j, k]; }
}
/*calculate weight-step for weights connecting from input nodes to hidden nodes*/ for (j = 0; j < s_Network.m_iNumHiddenNodes; j++) { double temp = 0.0; for (k = 0; k < s_Network.m_iNumOutputNodes; k++) { temp += -(sampleSeries.ElementAt(n) - s_Network.m_arOutputNodes[k].GetOutput()) * s_Network.m_arOutputNodes[k].GetOutput() * (1 - s_Network.m_arOutputNodes[k].GetOutput()) * s_Network.m_arHiddenOutputConn[j, k]; }
for (i = 0; i <= s_Network.m_iNumInputNodes; i++) {
double parDerv = s_Network.m_arHiddenNodes[j].GetOutput() * (1 - s_Network.m_arHiddenNodes[j].GetOutput()) *
s_Network.m_arInputNodes[i].GetInput() * temp;
deltaInputHidden[i, j] = -learnRate * parDerv + momentum * lagDeltaInputHidden[i, j];
lagDeltaInputHidden[i, j] = deltaInputHidden[i, j]; }
}
{
for (i = 0; i <= s_Network.m_iNumInputNodes; i++) {
s_Network.m_arInputHiddenConn[i, j] += deltaInputHidden[i, j];
} }
/*updating weight from Hidden to Output*/
for (k = 0; k < s_Network.m_iNumOutputNodes; k++) { for (j = 0; j <= s_Network.m_iNumHiddenNodes; j++) { s_Network.m_arHiddenOutputConn[j, k] += deltaHiddenOutput[j, k]; } }
} // end outer for
MAE = MAE / (sampleSeries.Count - s_Network.m_iNumInputNodes); // caculate mean square error
if (Math.Abs(MAE - LastError) < residual) // if the Error is not improved significantly, halt training process and rollback
{
RollBack(); break; }
else
{ //else backup the current configuration and continue training LastError = MAE; BackUp(); MAError.Add(MAE); epoch++; } frmTraningProgress.SetStep(epoch); System.Windows.Forms.Application.DoEvents(); if (frmTraningProgress.isStop == true) { isUserStop = true; break; } //Thread.Sleep(10); } frmTraningProgress.OnClose(); RunTime EndRunTime = new RunTime(); EndRunTime.GetCurrTime();
RunTime RunTimeUse = new RunTime();
RunTimeUse = BeginRunTime.Subtraction(EndRunTime); /* output training result */
TrainingResult result = new TrainingResult();
result.trainResult.AppendText("Số vòng huấn luyện tối đa: " + theEpoches + "\n");
"\n");
result.trainResult.AppendText("Lỗi MAE: " + MAE + "\n");
result.trainResult.AppendText("Sai số cực tiểu: " + residual + "\n"); result.trainResult.AppendText("Tốc độ học: " + learnRate + "\n"); result.trainResult.AppendText("Hệ số quán tính: " + momentum + "\n"); result.trainResult.ReadOnly = true;
//result.chart1.Series["MAE"].Color = System.Drawing.Color.Red; result.chart1.Series["Lỗi MSE"].Color = System.Drawing.Color.Red; for (int t = 0; t < MAError.Count; t++)
{ //result.chart1.Series["MAE"].Points.AddXY(t + 1, MAError.ElementAt(t)); result.chart1.Series["Lỗi MSE"].Points.AddXY(t + 1, MAError.ElementAt(t)); } result.trainResult.AppendText("Thời gian: " + RunTimeUse.ConverTimeString() + "\n");
result.label1.Text = "Giải thuật: Lan truyền ngược"; result.ShowDialog();
}
2. Chuẩn hóa dữ liệu
private void btChuanHoa_Click(object sender, EventArgs e) {
double max = ListInput.Max(); double min = ListInput.Min(); int count = ListInput.Count;
int k = 0; int j = 0;
ListViewItem ltmp = default(ListViewItem); ListChuanHoa.Clear();
for (int i = 0; i < ListInput.Count; i++) {
double a = ListInput.ElementAt(i);
double b = (a - min) / (max - min) * (0.99 - 0.01) + 0.01; ListChuanHoa.Add(Math.Round(b,4));
}
//Load to ListView
for(int i=0;i< ListChuanHoa.Count; i++) {
ltmp = ListTrainingData1.Items.Add(k.ToString()); for (j = 0; j < numInput + numOutput; j++)
{ ltmp.SubItems.Add(ListChuanHoa.ElementAt(j + i).ToString ()); } ltmp.Checked = true; if (i + j >= ListChuanHoa.Count) break; k = k + 1; }
}
3. Kiểm tra mạng
public void Test(List<double> testDataSeries, double Max, double Min, int numInput) {
List<double> testDataOutput = new List<double>();
List<double> testDataSeriesProcessed = new List<double>(); List<double> testResultSeries = new List<double>();
double MSE_ERROR = 0;
double max = testDataSeries.Max(); double min = testDataSeries.Min(); int count = testDataSeries.Count; for (int i = 0; i < count; i++) {
double a = testDataSeries.ElementAt(i); double b = (a - min) / (max - min) * (0.99 - 0.01) + 0.01; testDataSeriesProcessed.Add(b);
}
for (int i = 0; i < numInput; i++) {
testResultSeries.Add(testDataSeries[i]); }
for (int i = numInput; i < testDataSeriesProcessed.Count; i++) {
double[] input = new double[numInput]; for (int j = numInput; j > 0; j--) {
input[numInput - j] = testDataSeriesProcessed[i - j]; }
s_Network.CalculateOutput(input);
double temp = s_Network.m_arOutputNodes[0].GetOutput(); temp = (temp - 0.01) / (0.99 - 0.01) * (max - min) + min;
testResultSeries.Add(temp);