Quá trình thực nghiệm

Một phần của tài liệu Dự báo dữ liệu chuỗi thời gian dựa trên hệ suy luận ANFIS (Trang 83 - 87)

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

Một phần của tài liệu Dự báo dữ liệu chuỗi thời gian dựa trên hệ suy luận ANFIS (Trang 83 - 87)

Tải bản đầy đủ (PDF)

(99 trang)