CHƯƠNG 5 XÂY DỰNG ỨNG DỤNG THỰC NGHIỆM
5.4. Quá trình thực nghiệm
5.4.1. Các hàm chức năng chính
Dựa trên cơ sở lý thuyết đã đề xuất tại Chương 4 và mô hình thực nghiệm tại Chương 5, luận văn thực hiện thiết kế các hàm chức năng chính dựa trên ngôn ngữ Matlab như sau:
Dữ liệu huấn luyện được lưu trữ dưới dạng tập tin .csv để dễ dàng ứng dụng trong nhiều dạng thiết bị khác nhau, do đó cần thiết kế một hàm đọc dữ liệu từ file này như sau:
Function [{Mi}, Reali] = ReadFileList(filename)
Để thực hiện mờ hóa theo phương pháp mờ Gaussian cần phải tính kỳ vọng và độ lệch chuẩn. Vì vậy, cần thiết kế một hàm tính kỳ vọng và độ lệch chuẩn ứng với từng cột của ma trận đầu vào Mi như sau:
Function [Mediani, Stdevi] = MedianStdev(Mi)
Để thực hiện mờ hóa ma trận dữ liệu đầu vào bằng phương pháp Gaussian cần phải tính giá trị hàm Gaussian và ứng dụng để mờ hóa các giá trị ma trận đầu vào Mi. Vì vậy, cần có các hàm như sau:
Function fuzzynumber = Gaussian(x, median, stdev) Function Mfuzzyi = FuzzyMatrix(Mi)
Mạng neuro-fuzzy ANFIS đã đề xuất cần phải tính trọng số mờ tại tầng 2 và chuẩn hóa trọng số mờ tại tầng 3. Do đó, cần thiết kế hàm tính trọng số mờ cũng như hàm chuẩn hóa trọng số mờ như sau:
Function {Mieszkowicz-Rolka, #28} = FuzzyWeight(Mfuzzyi)
Function {nWi} = FuzzyNormalization(Wi)
Để tìm ra được giá trị kết quả dự báo, cần phải tính được ma trận suy luận Fk cũng như chuẩn hóa ma trận này. Vì vậy, cần phải thiết kế hàm tính ma trận suy luận, hàm chuẩn hóa ma trận suy luận và hàm tổng hợp suy luận như sau:
Function {Fk} = ReasoningMatrix(Mk, Rk) Function {nFk} = NormalizationF(Fk, nWk) Function {fk} = Reasoning(nFk, Rk)
Hàm sau cùng cần phải thiết kế đó là tính sai số bằng trung bình độ lệch. Do đó, hàm tính độ lệch trung bình được thiết kế như sau:
Function [MeanErrk , ErrArrk] = DoLech(fk, Realk);
5.4.2. Thực nghiệm pha huấn luyện
Trên cơ sở đã thiết kế các hàm như trên và thuật toán huấn luyện đã đề xuất tại Chương 4, trong phần này mô tả việc cài đặt thuật toán huấn luyện như sau:
Đầu vào: Dãy ma trận dữ liệu {Mi} mô tả tương ứng các chỉ số cổ phiếu Đầu ra: Dãy ma trận hệ số suy luận {Ri}
Bắt đầu
Bước 1: Khởi tạo
- Khởi tạo dãy ma trận {Mi}:
Lưu file dữ liệu: huanluyen.csv gồm các số liệu cổ phiếu Đọc dữ liệu từ file huanluyen.csv
Function [{Mi}, Reali] = ReadFileList(filename)
- Tính kỳ vọng và độ lệch chuẩn từng cột/ mỗi ma trận Mi
Function [Mediani, Stdevi] = MedianStdev(Mi) - Mờ hóa dãy ma trận {Mi} bằng hàm Gaussian:
Function fuzzynumber = Gaussian(x, median, stdev) Function Mfuzzyi = FuzzyMatrix(Mi)
- Tính trọng số mờ:
Function {Mieszkowicz-Rolka, #28} = FuzzyWeight(Mfuzzyi) - Chuẩn hóa tập trọng số mờ:
Function {nWi} = FuzzyNormalization(Wi)
- Phát sinh ngẫu nhiên dãy ma trận hệ số suy luận: R1, R2,…, Rk
Do đó, phát sinh ngẫu nhiên ma trận Rnx(n+1)
Function {Ri} = RandomMatrix() - Khởi tạo sai số {ERRORi};
ERRORi , flagi = 1;
Bước 2: Huấn luyện
While (Kiemtra(flagi) = 1) do For k = 1: K
If flagi = 1 then
Tính Ma trận suy luận {Fk}
Function {Fk} = ReasoningMatrix(Mk, Rk) Chuẩn hóa ma trận suy luận Fk
Function {nFk} = NormalizationF(Fk, nWk) Tổng hợp suy luận
Function {fk} = Reasoning(nFk, Rk) Tính độ lệch
Function [MeanErrk , ErrArrk,] = DoLech(fk, Realk);
If MeanErrk < ERRORk then ERRORi = MeanErri; Lưu ma trận hệ số Rk;
Lưu kết quả dự báo và sai số;
Ck = 0;
Else
Ck = Ck + 1;
End End
If Ck > 1000 then flagk = 0;
End //For
Nếu có thay đổi: Lưu ma trận {Aras, #17}
Phát sinh ma trận mới: Function {Aras, #17} = ViPhan();
End //While Return;
Kết thúc
5.4.3. Thực nghiệm pha kiểm thử
Trên cơ sở thuật toán kiểm thử đã đề xuất và dựa trên mô hình mạng neuro- fuzzy ANFIS, trong phần này cài đặt cụ thể thuật toán kiểm thử như sau:
Đầu vào: Dãy dữ liệu kiểm thử {Ti}, Dãy {Ri}, Dãy {reali} Đầu ra: Dãy dự báo {fi}, Sai số {Erri}
Bắt đầu:
Bước 1:
- Đọc dãy ma trận {Ti}:
Lưu file dữ liệu: kiemthu.csv gồm các số liệu cổ phiếu Đọc dữ liệu từ file kiemthu.csv
Function [Ti, Reali] = ReadFile(filename)
- Tính kỳ vọng và độ lệch chuẩn từng cột/ mỗi ma trận Mi
Function [Mediani, Stdevi] = MedianStdev(Ti) - Mờ hóa dãy ma trận {Ti} bằng hàm Gaussian:
Function fuzzynumber = Gaussian(x, median, stdev) Function Tfuzzyi = FuzzyMatrix(Ti)
- Tính trọng số mờ:
Function {Mieszkowicz-Rolka, #28} = FuzzyWeight(Tfuzzyi) - Chuẩn hóa tập trọng số mờ:
Function {nWi} = FuzzyNormalization(Wi) Bước 2:
For i = 1: m
Tính ma trận suy luận {Fi}
Function {Fi} = ReasoningMatrix(Ti, Ri) Chuẩn hóa ma trận suy luận Fi
Function {nFi} = NormalizationF(Fi, nWi) Tổng hợp suy luận
Function {fi} = Reasoning(nFi, Ri) Tính độ lệch
Function [ErrArri, MeanErri] = DoLech(fi, Reali);
End//For Kết thúc