CHƯƠNG 3: ĐỀ XUẤT MÔ HÌNH KHAI PHÁ DỮ LIỆU TRONG BÀI TOÁN GIAO DỊCH TỶ GIÁ
3.3. Kết quả thực nghiệm
3.3.3. Sử dụng phương pháp Cây quyết định J48
Mã Pseudo code để xây dựng cây quyết định như sau:
1. Kiểm tra các trường hợp đặc biệt.
2. For each attribute a,
36
2.1. Tính các tỉ lệ thông tin chuẩn hóa (normalized information gain ratio) từ các nhánh trên a.
2.2. Sắp xếp các tỉ lệ nói trên
3. Lấy ra thuộc tính a_best tốt nhất (có tỉ lệ thông tin chuẩn hóa cao nhất).
4. Tạo nút quyết định mà có thể phân chia trên a_best.
5. Lặp trên các danh sách nhánh đƣợc chia ra từ a_best và thêm những nút con (children).
Chi tiết Pseudo code để xây dựng tập luật và cây
J48 (Examples, Target_Attribute, Attributes) Create a root node for the tree
If all examples are positive, Return the single-node tree Root, with label = +.
If all examples are negative, Return the single-node tree Root, with label = -.
If number of predicting attributes is empty, then Return the single node tree Root,
with label = most common value of the target attribute in the examples.
Otherwise Begin
A ← The Attribute that best classifies examples.
Decision Tree attribute for Root = A.
For each possible value, vi, of A,
Add a new tree branch below Root, corresponding to the test A = vi.
Let Examples(vi) be the subset of examples that have the value vi for A
If Examples(vi) is empty
Then below this new branch add a leaf node with label = most common target value in the examples
Else below this new branch add the subtree ID3 (Examples(vi), Target_Attribute, Attributes – {A})
End
Return Root
Cải tiến của J48 (hay C.4.5) so với ID3 nhƣ sau:
Điều khiển đƣợc cả hai loại thuộc tính continuous và discrete. Điều khiển bằng cách tạo ra một ngƣỡng và chia các giá trị của thuộc tính theo ngƣỡng vừa tạo, thường ngưỡng là trung bình giá trị.
Điều khiển đƣợc với các thuộc tính mà có các missing attribute values . C4.5 cho phép các giá trị thuộc tính được gán là ? rồi sử dụng phương pháp tính giá
37
trị trung bình để điền, đồng thời những giá trị bị mất này sẽ không tham gia vào tính gain và entropy trong module chính.
Điều khiển đƣợc các thuộc tính với những cost khác nhau (weights).
Chặt cây sau khi tạo. C4.5 sẽ quay lại duyệt cây 1 lần khi tạo và sẽ loại bỏ các nhánh mà các nhánh đó không trợ giúp nhiều trong việc xây dựng tiếp. Thuật toán sẽ thay thế nó bằng các nút lá.
Việc sử dụng phương pháp cây quyết định được sử dụng với thuật toán J48 với các tham số cụ thể nhƣ sau:
Hệ số hỗ trợ: C=0.25
Số nhánh: 2
Kiểu Test: 10 fold validation Thuật toán J48
Bước 1: Kiểm tra các mẫu quan sát Bước 2: Với mỗi thuộc tính thực hiện:
Tìm các thông tin liên quan để có thể phân tách
Lấy ra thuộc tính tốt nhất (đƣợc hiểu là có độ liên quan thông tin lớn nhất) thành nút gốc.
Tạo một nút của cây với điểm phân tách chính là thuộc tính vừa tìm được ở bước trên
Bước 3: Lặp đối với các cây con để tạo ra các nhánh có độ liên quan tốt nhất, tốt hơn,… tạo thành các nút/nhánh cho cây.
Mô hình khung thực hiện đƣợc thể hiện nhƣ sau:
Hình 17: Mô hình khung công việc J48
38
Code
/* Initialise */
GetNames();
GetData(".data");
printf("\nRead %d cases (%d attributes) from %s.data\n", MaxItem+1, MaxAtt+1, FileName);
/* Build decision trees */
if ( BATCH ) {
TRIALS = 1;
OneTree();
Best = 0;
} else {
Best = BestTree();
}
/* Soften thresholds in best tree */
if ( PROBTHRESH ) {
printf("Softening thresholds");
if ( ! BATCH ) printf(" for best tree from trial %d", Best);
printf("\n");
SoftenThresh(Pruned[Best]);
printf("\n");
PrintTree(Pruned[Best]);
39 }
/* Save best tree */
if ( BATCH || TRIALS == 1 ) {
printf("\nTree saved\n");
} else {
printf("\nBest tree from trial %d saved\n", Best);
}
SaveTree(Pruned[Best], ".tree");
/* Evaluation */
printf("\n\nEvaluation on training data (%d items):\n", MaxItem+1);
Evaluate(false, Best);
if ( UNSEENS ) {
GetData(".test");
printf("\nEvaluation on test data (%d items):\n", MaxItem+1);
Evaluate(true, Best);
}
exit(0);
}
40 Thực nghiệm
=== Run information ===
Scheme:weka.classifiers.trees.J48 -C 0.25 -M 2 Relation: VND_Train
Instances: 255 Attributes: 7 Ngay Open High Low Close Output Output1
Test mode:10-fold cross-validation
=== Classifier model (full training set) ===
J48 pruned tree ---
Output <= -1: Down (167.0) Output > -1: Up (88.0)
Number of Leaves : 2 Size of the tree : 3
= Evaluation result ===
Scheme: J48
Options: -C 0.25 -M 2 Relation: VND_Train
Chi tiết kết quả thực nghiệm
41 Time taken to build model: 0.14 seconds
Correctly Classified Instances 255 100 %
Incorrectly Classified Instances 0 0 %
Kappa statistic 1
Mean absolute error 0
Root mean squared error 0
Relative absolute error 0 %
Root relative squared error 0 %
Total Number of Instances 255
Ignored Class Unknown Instances 2
=== Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure ROC Area Class 1 0 1 1 1 1 Down 1 0 1 1 1 1 Up
Weighted Avg. 1 0 1 1 1 1
=== Confusion Matrix ===
a b <-- classified as 167 0 | a = Down 0 88 | b = Up 3.3. Thảo luận
Việc so sánh kết quả thực nghiệm có thể xem ở Hình 16 dưới đây
Kết quả của thực nghiệm đƣợc chỉ ra ở Hình 7. Dễ dàng nhận thấy rằng cây quyết định đã cho kết quả dự báo là 100% so với SVM là 99.6%.
42
Hình 18: Độ chính xác của Kỹ thuật SVM và DT
Để chi tiết hóa kết quả thực nghiệm, các kết quả dự báo đƣợc thể hiện trên ma trận nhầm lẫn (Confusion Matrix) ở Bảng 3 dưới đây.
TP TN
SVM 166 1
0 88
DT (J48)
167 0
0 88
FP FN
Bảng 3: Kết quả bảng ma trận nhầm lẫn của SVM và DT
Rõ ràng từ Bảng 3 ta thấy kỹ thuật đã dự báo nhầm lẫn 1 trường hợp. Để tìm hiểu thực sự mẫu nhầm lẫn này có thể quay lại vị trí của bảng dữ liệu dựa trên cột thời gian và kết quả có thể được giải thích cho người dùng một cách thỏa đáng (ví dụ như ở thí nghiệm này, tỷ giá Low; High, Open đã bị thấp một cách bất thường 5VND thay vì khoảng 22735VND).