Ta thấy rằng việc xây dựng cây bằng cách phát triển nhánh đầy đủ theo chiều sâu để phân lớp hoàn toàn dữ liệu huấn luyện đôi khi gặp khó khăn trong các trƣờng hợp dữ liệu bị nhiễu (Noisy Data) hoặc bị thiếu (Missing Data), số lƣợng mẫu quá nhỏ không đủ để đại diện cho một quy luật; tức là tạo ra các nút có số mẫu rất nhỏ. Trong những trƣờng hợp này, nếu thuật toán vẫn cứ phát triển cây thì ta sẽ dẫn đến một tình huống mà ta gọi là tình trạng "Over fitting" trong cây quyết định.
Để giải quyết tình trạng Over fitting này ngƣời ta sử dụng phƣơng pháp cắt tỉa cây quyết định. Cắt tỉa cây chính là việc làm: tại một nút của cây, nếu sự chính xác của khi không chia tách cao hơn sự chính xác khi đƣợc chia tách, khi đó hãy thay thế cây con này bằng một nút lá tƣơng ứng, nhãn của nút lá này đƣợc gán là nhãn của lớp đa số (phổ biến) trong tập các mẫu tại nút đó. Có hai chiến lƣợc cắt tỉa cây quyết định.
a) Tiền cắt tỉa (Prepruning):
Tiền cắt tỉa nghĩa là sẽ dừng sớm việc phát triển cây trƣớc khi nó vƣơn đến điểm mà việc phân lớp các mẫu huấn luyện đƣợc hoàn thành. Nghĩa là trong quá
Age[1,2,3,4,5,6 ] ≤26.5 >26.5 B [2] Salary [1,3,4,5,6] (Age<=26.5) ≤50 >50 B [4] G [1,3,5,6] Salary<=50
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
trình xây dựng cây, một nút có thể sẽ không đƣợc tách thêm bƣớc nữa nếu nhƣ kết quả của phép tách đó rơi vào một ngƣỡng gần nhƣ chắc chắn. Nút đó trở thành nút lá và đƣợc gán nhãn là nhãn của lớp phổ biến nhất của tập các mẫu tại nút đó.
b) Hậu cắt tỉa (Postpruning):
Chiến thuật này ngƣợc với chiến thuật tiền cắt tỉa. Tức là, cây đƣợc phát triển đầy đủ sau đó mới thực hiện cắt tỉa (Trong quá trình xây dựng cây cho phép tình trạng Over fitting xẩy ra). Nó cho phép phát triển cây đầy đủ sau đó mới cắt tỉa bỏ các nhánh không hợp lý. Nếu một nút mà các cây con của nó bị cắt thì nó sẽ trở thành nút lá và nhãn của lá đƣợc gán là nhãn của lớp phổ biến nhất của các con trƣớc đó của nó.
Trong thực tế, hậu cắt tỉa là một phƣơng pháp khá thành công cho việc tìm ra các giả thuyết chính xác cao. Chiến thuật hậu cắt tỉa đƣợc tiến hành thông qua việc tính toán lỗi nhƣ sau:
Giả sử ta gọi: E(S) là lỗi tĩnh (Static error hay expected error) của một nút S; BackUpError(S) là lỗi từ các nút con của S (Back Up Error); Error(S) là lỗi của nút S. Các giá trị này đƣợc tính nhƣ sau :
Error(S) = Min(E(S), BackUpError(S)) E(S) = (N - n + 1) / (N + 2)
Trong đó: N là tổng số mẫu ở nút S, n là số mẫu của lớp phổ biến nhất trong S. Trong trƣờng hợp tổng quát, nếu thuộc tính lớp có K giá trị (K lớp) thì:
E(S) = (N-n+K-1) / (N+K)
i i
BackUpError(S) = Pi Error(S )
Trong đó: Si là nút con của S, Pi là tỷ lệ số mẫu trong Si trên số mẫu trong S.
Nhƣ vậy các nút lá sẽ có lỗi Error(Si) = E(Si) do nút lá không có nút con dẫn đến không có lỗi BackUpError. Nếu BackUpError(S) >= E(S) thì chiến thuật hậu cắt tỉa cây quyết định sẽ cắt tại nút S ( nghĩa là cắt bỏ các cây con của S).
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Ví dụ 1: Ta có cây trƣớc khi cắt tỉa nhƣ hình 2.17 sau:
Hình 2.17 Cây trƣớc khi cắt tỉa Tiến hành tính lỗi cho các nút trong ta có:
Xét nút B ta có: N= 6, n= 4
E(B) = (6-4+1 )/(6+2) = 0.375
BackUpError(B) = (5/6)* 0.429 + (1/6)* 0.333 = 0.413
Error(B) = Min(E(B), BackUpError(B)) = Min (0.375, 0.413) = 0.375 Do BackUpError(B) > E(B) nên cắt bỏ các cây con của nút B.
Xét tại nút D ta có: N= 3, n= 2
E(D) = (3-2+1) /(3+2)= 0.4
BackUpError(D) = (2/3)* 0.5 + (1/3)* 0.333 = 0.444
Error(D) = Min(E(D), BackUpError(D)) = Min (0.4, 0.444) = 0.4 Do BackUpError(D) > E(D) nên cắt bỏ cây con của nút B.
Xét tại nút C ta có: N=4, n=4 E(C) = (4-2+1) /(4+2)=0.5 A [6+, 4-] B [4+, 2-] C [2+, 2-] [3+, 2-] 0.429 [1+, 0-] 0.333 D [1+, 2-] [1+, 0-] 0.333 [1+, 1-] 0.5 [0+, 1-] 0.333
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
BackUpError(D) = (3/4)* 0.4 + (1/4)* 0.333 = 0.383
Error(C) = Min(E(C), BackUpError(C)) = Min (0.5, 0.383) = 0.383 Do BackUpError(C) < E(C) nên không cắt bỏ các cây con của nút C.
Xét tại nút A ta có: N=10, n=6
E(A) = (10-6+1) /(10+2)=0.417
BackUpError(A) = (6/10)* 0.375 + (4/10)* 0.383 = 0.378
Error(A) = Min(E(A), BackUpError(A)) = Min (0.417, 0.378) = 0.378 Do BackUpError(A) < E(A) nên không cắt bỏ các cây con của nút A Sau khi thực hiện cắt bỏ các cây con tại nút B và D ta thu đƣợc cây sau sau:
Hình 2.18 Cây sau khi cắt tỉa
Tóm lại, cắt tỉa cây nhằm tối ƣu hoá cây kết quả. Tối ƣu về kích cỡ cây và về độ chính xác của việc phân lớp bằng cách cắt bỏ các nhánh không phù hợp (over fitted branches). Để thực hiện việc cắt tỉa cây thì có một số thuật toán cơ bản sau đây:
Thuật toán CART, gọi tắt là cắt tỉa chi phí phức tạp (Cost - Complexity prunning). Thuật toán sử dụng tập hợp tách rời của các mẫu học để đánh giá tính hữu dụng của việc hậu cắt tỉa những nút trong cây.
A [6+, 4-] [4+, 2-] 0.375 C [2+, 2-] [1+, 2-] 0.4 [1+, 0-] 0.333
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Cắt tỉa bi quan (Pessimistic pruning). Kỹ thuật cắt tỉa này áp dụng phƣơng pháp thống kê để đánh giá việc mở rộng hoặc cắt tỉa một nút. Nó đƣợc dùng để cắt tỉa cây đƣợc xây dựng bằng thuật toán ID3, C4.5.
Kỹ thuật mô tả độ dài tối thiểu - MDL (Minimum Description Length). Kỹ thuật này không cần thiết phải kiểm tra các mẫu và nó thƣờng đƣợc sử dụng trong các thuật toán SLIQ, SPRINT.
Nguyên tắc cắt tỉa cây MDL:
Nguyên tắc cắt tỉa cây MDL còn gọi là nguyên tắc mô tả độ dài tối thiểu. Nguyên tắc này đƣợc phát biểu nhƣ sau: "Mẫu tốt đối với sự mô tả dữ liệu là mẫu mà sự miêu tả dữ liệu của nó có tổng chi phí mô tả dƣới dạng bit là tối thiểu". Tổng chi phí mã hoá đƣợc tính theo công thức:
cost(M,D) = cost(D|M)+cost(M) (5.4) Trong đó, cost(M) là chi phí mã hoá của mẫu M, cost(D|M) là chi phí mã hoá của dữ liệu đƣợc mô tả thông qua mẫu M. Các chi phí mã hoá gồm:
Chi phí mã hoá dữ liệu: đƣợc tính thông qua tổng số lỗi rút ra trong quá trình xây dựng cây.
Chi phí mã hoá mẫu: một nút trong cây quyết định có thể đƣợc mã hoá theo một trong 3 cách sau:
Với nút có 0 hoặc 2 con thì có chi phí là 1 bit.
Với nút có 0, 1 con (con trái hoặc con phải) hoặc có 2 con thì có chi phí là 2 bit. Với nút trong của cây, nút này có 1 hoặc 2 con thì chi phí là log23 bit.
Nhƣ vậy chi phí của một lần phân chia trong cây quyết định phụ thuộc vào kiểu thuộc tính đƣợc kiểm tra để phân chia. Sự phụ thuộc này thể hiện nhƣ sau:
Thuộc tính số: Mỗi lần phân chia tập mẫu luôn đƣợc chia thành 2 tập hoặc không chia nên chi phí mã hoá không thay đổi là 1 bit.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Thuộc tính phân loại rời rạc: Chi phí của những lần tách phụ thuộc vào số giá trị phân loại rời rạc của thuộc tính. Nếu A là tập hợp các giá trị khẳng định (yes, +) của thuộc tính thì CSplit = Ln|A|.
Nguyên tắc cắt tỉa cây MDL đánh giá độ dài của mã tại mỗi nút để quyết định có cắt tỉa hay không, có cắt thì cắt một cây con, hoặc cắt cả hai cây con, hoặc không cắt tỉa tại nút đó. Chi phí cắt tỉa đƣợc tính bằng các công thức sau:
eaf( ) ( ) ErrorSt L C t L t Split ( ) ( ) ( 1) ( 2). Both C t L t L C t C t ' eft( ) ( ) Split ( 1) ( 2). L C t L t L C t C t (5.5) ' Split ( ) ( ) ( 1) ( 2). Right C t L t L C t C t
Trong đó C' (ti) là chi phí mã hoá của nút cha, LSplit là độ dài điểm tách. MDL sử dụng 3 chiến lƣợc cắt tỉa sau:
Cắt tỉa hoàn toàn: Nếu CLeaf (t) < CBoth(t) thì cắt tỉa cả 2 nhánh của nút này và biến nút này trở thành nút lá.
Cắt tỉa thành phần: nếu CLeaf (t) < CLeft( )t hoặc CLeaf (t) < CRight( )t . Sử dụng tất cả các chi phí đƣợc tính trƣớc đó để chọn ra vị trí có độ dài ngắn nhất.
Cắt tỉa hỗn hợp: Trƣớc tiên sử dụng phƣơng pháp cắt tỉa toàn bộ để thu đƣợc cây nhỏ hơn, sau đó xem xét tiếp các giá trị CBoth, CLeft, CRight để quyết định cắt tỉa cây tiếp theo.