Đồ án Mô hình cây quyết định (Decision tree)

pdf 70 trang yendo 14/05/2021 4670
Bạn đang xem 20 trang mẫu của tài liệu "Đồ án Mô hình cây quyết định (Decision tree)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfdo_an_mo_hinh_cay_quyet_dinh_decision_tree.pdf

Nội dung text: Đồ án Mô hình cây quyết định (Decision tree)

  1. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN MÔN HỌC MÁY HỌC Lớp Cao Học - Chuyên Ngành KHMT & HTTT MÔ HÌNH CÂY QUYẾT ĐỊNH DECISION TREE GVHD: TS. Trần Thái Sơn Thành viên nhóm: 1112016 – Hồ Sơn Lâm 1112023 – Bùi Tuấn Phụng 1112042 – Đỗ Minh Tuấn 1112044 – Trần Thị Tuyết Vân 1112046 – Phan Hoàn Vũ TP.HCM – 4-5-6/2012 Decision Tree 1
  2. MỤC LỤC 1. Gi i thi u ( Minh Tu n) 4 1.1 Mô hình cây quyết định 4 1.2 Chiến lược cơ bản để xây dựng cây quyết định 5 1.3 Thuận lợi và hạn chế của mô hình cây quyết định 6 2. Các tiêu chu n t o cây quy t nh ( Minh Tu n) 8 2.1 Tiêu chuẩn tách 1 chiều (Univariate Splitting Criteria): 8 2.1.1 Impurity-based Criteria: 8 2.1.2 Normalized impurity based criteria: 13 2.1.3 Binary criteria 13 2.2 Tiêu chuẩn tách đa chiều: 14 2.3 Tiêu chuẩn dừng (Stopping Criteria): 14 3. Mt s thu t toán (Tr n Th Tuy t Vân) 15 3.1 Thuật toán CLS 15 3.2 Thuật toán ID3 18 3.3 Thuật toán C4.5 22 3.4 Một số cài tiến của thuật toán C4.5 so với thuật toán ID3 23 3.4.1 Chọn độ đo Gain Ratio 23 3.4.2 Xử lý các thuộc tính có kiểu giá trị liên tục 24 3.4.3 Làm việc với thuộc tính thiếu giá trị 26 3.4.4 Xử lý các thuộc tính có giá trị chi phí 28 3.5 Thuật toán SPRINT 29 3.5.1 SPRINT sử dụng độ đo Gini-index 30 3.5.2 Cấu trúc dữ liệu trong SPRINT 30 3.5.3 Danh sách thuộc tính 31 3.5.4 Thực thi sự phân chia 34 4. Vn Overfitting và các gi i pháp gi m Overfitting (H Sơn Lâm) 37 Decision Tree 2
  3. 4.1 Quá khớp dữ liệu (Overfitting) 37 4.1.1 Định nghĩa: 37 4.1.2 Nguyên nhân quá khớp dữ liệu 38 4.2 Phương pháp tránh quá khớp dữ liệu 39 4.2.1 Cắt tỉa để giảm lỗi (Reduced error pruning) 40 4.2.2 Luật hậu cắt tỉa (Rule Post-Pruning) 46 5. Cây quy t nh m rng (Bùi Tu n Ph ng) 48 5.1 Oblivious Decision Trees Error! Bookmark not defined. 5.2 Fuzzy decision trees Error! Bookmark not defined. 5.3 Decision Trees Inducers for Large Datasets Error! Bookmark not defined. 5.4 Incremental Induction: Error! Bookmark not defined. 6. Demo (Phan Hoàn V ) 53 Tài liệu tham khảo 68 Decision Tree 3
  4. 1. Giới thiệu (Đỗ Minh Tuấn) 1.1 Mô hình cây quyết định Cây quyết định (decision tree) là một trong những hình thức mô tả dữ liệu trực quan nhất, dễ hiểu nhất đối với người dùng. Cấu trúc của một cây quyết định bao gồm các nút và các nhánh. Nút dưới cùng được gọi là nút lá, trong mô hình phân lớp dữ liệu chính là các giá trị của các nhãn lớp (gọi tắt là nhãn). Các nút khác nút lá được gọi là các nút con, đây còn là các thuộc tính của tập dữ liệu, hiển nhiên các thuộc tính này phải khác thuộc tính phân lớp. Mỗi một nhánh của cây xuất phát từ một nút p nào đó ứng với một phép so sánh dựa trên miền giá trị của nút đó. Nút đầu tiên được gọi là nút gốc của cây. Xem xét một ví dụ về một cây quyết định như sau[1]: Từ bảng dữ liệu trên, ta xây dựng được cây quyết định như sau: Decision Tree 4
  5. Cây quyết định của ví dụ trên có thể được giải thích như sau: các nút lá chứa các giá trị của thuộc tính phân lớp (thuộc tính “Play”). Các nút con tương ứng với các thuộc tính khác thuộc tính phân lớp; nút gốc cũng được xem như một nút con đặc biệt, ở đây chính là thuộc tính “Outlook”. Các nhánh của cây từ một nút bất kỳ tương đương một phép so sánh có thể là so sánh bằng, so sánh khác, lớn hơn nhỏ hơn nhưng kết quả các phép so sánh này bắt buộc phải thể hiện một giá trị logic (Đúng hoặc Sai) dựa trên một giá trị nào đó của thuộc tính của nút. Lưu ý cây quyết định trên không có sự tham gia của thuộc tính “thu nhập” trong thành phần cây, các thuộc tính như vậy được gọi chung là các thuộc tính dư thừa bởi vì các thuộc tính này không ảnh hưởng đến quá trình xây dựng mô hình của cây. Các thuộc tính tham gia vào quá trình phân lớp thông thường có các giá trị liên tục hay còn gọi là kiểu số (ordered or numeric values) hoặc kiểu rời rạc hay còn gọi là kiểu dữ liệu phân loại (unordered or category values). Ví dụ kiểu dữ liệu lương biểu diễn bằng số thực là kiểu dữ liệu liên tục, kiểu dữ liệu giới tính là kiểu dữ liệu rời rạc (có thể rời rạc hóa thuộc tính giới tính một cách dễ dàng). 1.2 Chiến lược cơ bản để xây dựng cây quyết định • Bắt đầu từ nút đơn biểu diễn tất cả các mẫu • Nếu các mẫu thuộc về cùng một lớp, nút trở thành nút lá và được gán nhãn bằng lớp đó • Ngược lại, dùng độ đo thuộc tính để chọn thuộc tính sẽ phân tách tốt nhất các mẫu vào các lớp Decision Tree 5
  6. • Một nhánh đƣợc tạo cho từng giá trị của thuộc tính được chọn và các mẫu đƣợc phân hoạch theo • Dùng đệ quy cùng một quá trình để tạo cây quyết định • Tiến trình kết thúc chỉ khi bất kỳ điều kiện nào sau đây là đúng - Tất cả các mẫu cho một nút cho trƣớc đều thuộc về cùng một lớp. - Không còn thuộc tính nào mà mẫu có thể dựa vào để phân hoạch xa hơn. - Không còn mẫu nào cho nhánh test_attribute = a i Tuy nhiên, nếu không chọn được thuộc tính phân lớp hợp lý tại mỗi nút, ta sẽ tạo ca cây rất phức tạp, ví dụ như cây dưới đây: Như vậy, vấn đề đặt ra là phải chọn được thuộc tính phân lớp tốt nhất. Phần tiếp theo sẽ giới thiệu các tiêu chuẩn, dựa vào các tiêu chuẩn này, ta sẽ chọn ra thuộc tính phân lớp tốt nhất tại mỗi nút. 1.3 Thuận lợi và hạn chế của mô hình cây quyết định  Một số thuận lợi sau đây của cây quyết định được xem như là một công cụ phân loại mà đã chỉ ra trong tài liệu này: 1. Cây quyết định tự giải thích và khi được gắn kết lại, chúng có thể dễ dàng tự sinh ra. Nói cách khác, nếu cây quyết định mà có số lượng nút lá vừa phải thì người Decision Tree 6
  7. không chuyên cũng dễ dàng hiểu được nó. Hơn nữa, cây quyết định cũng có thể chuyển sang tập luật. Vì vậy, cây quyết định được xem như là dễ hiểu. 2. Cây quyết định có thể xử lý cả thuộc tính tên và số đầu vào. 3. Thể hiện của cây quyết định là đủ đa dạng để biểu diễn cho bất kỳ giá trị rời rạc nào. 4. Cây quyết định có khả năng xử lý các bộ dữ liệu mà có thể gây ra lỗi. 5. Cây quyết định có khả năng xử lý các bộ dữ liệu mà có giá trị rỗng. 6. Cây quyết định được xem như là một phương pháp phi tham số. Điều này có nghĩa là cây quyết định không có giả định về sự phân chia bộ nhớ và cấu trúc phân lớp.  Bên cạnh đó, cây quyết định cũng có những bất lợi sau đây: 1. Hầu hết các thuật toán (như ID3 hoặc C4.5) bắt buộc các thuộc tính mục tiêu phải là các giá trị rời rạc. 2. Khi cây quyết định sử dụng phương pháp “chia để trị”, chúng có thể thực hiện tốt nếu tồn tại một số thuộc tính liên quan chặt chẽ với nhau, nhưng sẽ khó khăn nếu một số tương tác phức tạp xuất hiện. Một trong những nguyên nhân gây ra điều này là những sự phân lớp mà có mô tả rất mạch lạc về việc phân lớp cũng có thể gặp khó khăn trong việc biểu diễn bằng cây quyết định. Một minh họa đơn giản của hiện tượng này là vấn đề tái tạo cây quyết định (Pagallo và Huassler, 1990). Khi mà hầu hết các cây quyết định phân chia không gian thể hiện thành những khu vực loại trừ lẫn nhau để biểu diễn một khái niệm, trong một số trường hợp, cây nên chứa một vài cây con giống nhau trong thứ tự thể hiện của việc phân lớp. Ví dụ, nếu khái niệm sau mà thể hiện theo hàm nhị phân: y = (A 1 ∩ A2) ∪ (A 3 ∩ A4) thì cây quyết định đơn biến tối tiểu mà biểu diễn hàm này đã được biểu diễn trong phần 9.3. Lưu ý là cây có chứa 2 bản sao của cùng một cây con. 3. Các đặc tính liên quan của cây quyết định dẫn đến những khó khăn khác như là độ nhạy với tập huấn luyện, các thuộc tính không phù hợp, nhiễu. (Quinlan, 1993). Decision Tree 7
  8. 2. Các tiêu chuẩn tạo cây quyết định (Đỗ Minh Tuấn) Việc tìm các tiêu chí để đánh giá tìm điểm chia là rất quan trọng, chúng được xem là một tiêu chuẩn “heuristic” để phân chia dữ liệu. Ý tưởng chính trong việc đưa ra các tiêu chí trên là làm sao cho các tập con được phân chia càng trở nên “trong suốt” (tất cả các bộ thuộc về cùng một nhãn) càng tốt. Cho một tập dữ liệu D, một tập các nhãn Ci (i>=1 và i<=m với m là số nhãn), định nghĩa các khái niệm sau: Ci,D : là tất cả các bộ dữ liệu có nhãn lớp C i trong D. |D| : là tổng số bộ dữ liệu của tập dữ liệu D. | Ci,D | : là tổng số bộ dữ liệu của tập dữ liệu D có nhãn lớp Ci.[1] 2.1 Tiêu chuẩn tách 1 chiều (Univariate Splitting Criteria): Nghĩa là tách chỉ dựa trên 1 thuộc tính. Xét theo cấu trúc của mẫu dữ liệu thì có 3 tiêu chuẩn 2.1.1 Impurity-based Criteria: Khi tất cả các mẫu dữ liệu thuộc về 1 phân lớp, ta gọi đó là Purity. Ngược lại, khi các mẫu dữ liệu tạo ra nhiều phân lớp thì đó gọi là Impurity. Xét theo tiêu chuẩn Impurity- based thì có các độ đo sau: 2.1.1.1 Information Gain Các thuật toán cũ trước đây thường dùng độ đo Gain để xác định điểm chia. Độ đo này dựa trên cơ sở lý thuyết thông tin của nhà toán học Claude Shannon, độ đo này xác định giá trị của nội dung mà các thông tin sở hữu trong một loạt các thông điệp. Giả sử tại nút hiện hành N, tập D là tập dữ liệu cần được xác định điểm chia, lặp qua tất cả các thuộc tính và chọn lựa thuộc tính nào có độ đo Gain lớn nhất làm ứng cử viên để phân chia. Công thức tính độ đo Gain như sau [1]: Với p i là xác suất của một bộ bất kỳ trên D thuộc về nhãn Ci. Có thể xem công thức Info(D) như một hàm tính giá trị trung bình trên lượng thông tin sử dụng nhằm xác định nhãn của một bộ bất kỳ trong tập D, Info(D) còn được gọi là độ đo sự hỗn loạn (entropy) của D. Giả sử phân chia các bộ trong D trên một thuộc tính A bất kỳ, để không mất tính tổng quát có thể xem như A có các giá trị phân biệt {a 1, a 2, a 3, .a v}. Nếu thuộc tính A được sử dụng để chia thành v tập con, Decision Tree 8
  9. những tập con này sẽ tương ứng với các nhánh con của nút hiện tại, độ đo thông tin có được sau khi phân lớp theo v tập con trên sẽ được tính như sau [1]: Với |Dj| là tống số bộ dữ liệu được phân chia vào tập con thứ j. Độ đo Gain được xác định là sự khác biệt giữa thông tin gốc (thông tin khi chưa phân lớp) và thông tin mới (thông tin sau khi đã phân lớp) và được tính theo công thức bên dưới như sau [1] : Nói một cách khác, độ đo Gain cho biết được lượng thông tin thu được khi phân lớp, thuộc tính nào có độ đo Gain lớn nhất sẽ được chọn làm ứng cử viên để phân chia. Việc chọn thuộc tính theo tiêu chí độ đo Gain lớn nhất tương đương với việc muốn tìm được một phân hoạch sao cho việc phân lớp là tốt nhất hay nói cách khác lượng thông tin cần thiết để hoàn thành việc phân lớp (thể hiện qua giá trị Info A(D)) là nhỏ nhất [1]. Decision Tree 9
  10. Giải thích cơ sở dữ liệu ở bảng dữ liệu trên: để tiện lợi ta xem tất cả các thuộc tính đều có kiểu dữ liệu rời rạc. Thuôc tính nhãn lớp tức thuộc tính “buys_computer” chỉ có hai giá trị là C1=“yes” và C2=“no”, như vậy có chín bộ dữ liệu có nhãn lớp là giá trị C1 và năm bộ giá trị C2. Để tìm điểm chia tốt nhất, phải tính toán chỉ số Gain của tất cả các thuộc tính trên. Đầu tiên sẽ tính cho toàn bộ tập huấn luyện D [1]: Kế tiếp tính cho từng thuộc tính, bắt đầu với thuộc tính “Age”. Thuộc tính này có ba giá trị là “youth”, “middle_aged” và “senior”. Nhìn vào bảng dữ liệu, với giá trị “youth” có hai bộ có giá trị thuộc tính nhãn là “yes” và ba bộ giá trị thuộc tính nhãn là “no”. Tương tự giá trị “middle_aged” có bốn bộ có nhãn lớp là “yes” và không có bộ nào có nhãn lớp là “no”; với giá trị “senior” có ba bộ nhãn lớp “yes” và hai bộ có nhãn lớp “no”. Theo công thức trên, độ đo của thuộc tính A xét trên tập huấn luyện D là [1]: Vậy theo công thức tính chỉ số Gain: Theo cách tính tương tự như trên, tính chỉ số Gain cho lần lượt các thuộc tính “income”, “student” và “credit_rating”. Kết quả sẽ là Gain(“income”) = 0.029; Gain(“student”) = 0.151 và Gain(“credit_rating”) = 0.048. Như vậy, thuộc tính “Age” là thuộc tính có chỉ số Gain lớn nhất nên sẽ được chọn là thuộc tính phân chia. Kết quả phân chia sẽ là cây quyết định như sau [1]: Decision Tree 10
  11. 2.1.1.2 Gini index Chỉ số Gini (Gini index): Chỉ số Gini được sử dụng trong thuật toán CART. Trái ngược với độ đo Gain, chỉ số Gini là độ đo về tính “không trong suốt” của tập dữ liệu. Chỉ số Gini của một tập dữ liệu D được định nghĩa như sau [1]: Với m là tổng số nhãn lớp, pi là xác suất để một bộ bất kỳ trong D thuộc về một nhãn Ci, được tính như sau: Chỉ số Gini thường sẽ được tính toán dựa trên giả định một tập dữ liệu D được phân chia nhị phân thành hai tập con. Đầu tiên xét trường hợp thuộc tính A bất kỳ trong D có kiểu dữ liệu rời rạc, khi dùng phép chiếu sẽ thu được v = {a 1,a 2 a v} giá trị khác nhau. Để xác định điểm chia tốt nhất của A, kiểm tra tất cả tập con có thể tạo được từ v giá trị phân biệt trên, mỗi tập con tạm gọi là S A là một điều kiện kiểm tra nhị v phân dạng A ∈ SA. Như vậy với v giá trị khác nhau ta sẽ có 2 - 2 tập con, trong đó tập rỗng và tập toàn phần v = {a 1,a 2 a v} sẽ không được xét đến. Như vậy tiến hành lặp qua tất cả các tập con này, mỗi lần lặp sẽ phân chia tập giá trị v thành hai tập con v 1 và v 2 riêng biệt thoả điều kiện rời rạc toàn phần (hội v 1 và v 2 chính là tập v và phần giao là tập rỗng). Với hai tập con v 1 và v 2 này tương ứng tập con D cũng được phân Decision Tree 11
  12. chia thành hai tập con D 1 (các bộ có giá trị thuộc tính A ∈ v1) và D 2 (các bộ có giá trị thuộc tính A ∈ v2) theo , Gini(D) sẽ được tính như sau [1]: Khác với độ đo Gain, người ta chọn chỉ số Gini nhỏ nhất với mong muốn sau khi phân chia dữ liệu sẽ làm giảm tính không trong suốt của tập D nhiều nhất. Đối với các giá trị liên tục có một lưu ý là đầu tiên phải sắp xếp các giá trị này, sau đó tất cả các giá trị cũng sẽ được tính toán chỉ số Gini và cũng chọn ra giá trị nào có thuộc tính Gini nhỏ nhất. Cũng giống như độ đo Gain, chỉ số Gini thông thường cũng được tính cho điểm giữa của hai giá trị liên tục nằm liền kề nhau. Lúc này tập D sẽ được chia làm hai tập D 1 là các bộ dữ liệu thoả điều kiện giá trị thuộc tính A nhỏ hơn hoặc bằng giá trị điểm giữa và D 2 thoả điều kiện giá trị thuộc tính A lớn hơn giá trị điểm giữa. Mục tiêu của chí số Gini là càng làm giảm tính không trong suốt của dữ liệu càng nhiều càng tốt, giá trị giảm trừ này thể hiện qua công thức [1]: Lưu ý Gini(D) là một con số cố định, chính vì mục đích chọn điểm chia sao cho Δgini(A) là lớn nhất nên bắt buộc chọn thuộc tính A sao cho GiniA(D) là nhỏ nhất. Ví dụ bên dưới sẽ tính chỉ số Gini cho tập dữ liệu từ bảng dữ liệu ở trên, lưu ý có chín bộ dữ liệu có nhãn lớp “buys_computer” = yes và năm bộ dữ liệu có nhãn lớp “buys_computer” = no [1]: Để tìm điểm chia tốt nhất, tiến hành lặp qua tất cả tập con (trừ tập rỗng và tập toàn bộ) của từng thuộc tính. Giả sử xét thuộc tính “income” bao gồm ba giá trị: {low, medium, high}. Xét tập con {low, medium}, như vậy có mười bộ dữ liệu thuộc tập con này, trong đó có bốn bộ có giá trị low và sáu bộ có giá trị medium: Tương tự, các tập con còn lại ({low, high} và {medium}) có Gini = 0.315 và ({medium, high} và {low}) có Gini = 0.3. Như vậy, nếu xét trên thuộc tính “income”, tập con ({medium, high} và {low}) có Gini = 0.3 sẽ được chọn (lưu ý chỉ xét riêng trên thuộc tính này). Lần lượt thực hiện cho các thuộc tính còn lại và chọn ra thụôc tính nào có Gini nhỏ nhất, đó chính là thuộc tính sẽ được chọn để phân chia. [1] Decision Tree 12
  13. 2.1.2 Normalized impurity based criteria: Ta dùng các tiêu chuẩn này khi thuộc tính có nhiều giá trị. Các tiêu chuẩn thuộc loại này là Gain Ratio, Distance Measure. Phần dưới đây sẽ giới thiệu về tiêu chuẩn Gain Ratio. Theo các nghiên cứu thì độ đo Gain thích hợp trong trường hợp các thuộc tính có nhiều giá trị hiện hành (dĩ nhiên các giá trị này phải thuộc miền giá trị, ví dụ với 100 mẫu tin có 80 giá trị khác nhau của thuộc tính khi sử dụng phép chiếu lên thuộc tính). Xem xét trường hợp thuộc tính “Client_ID”, trong đó mỗi khách hàng sẽ có một mã số riêng biệt, như vậy khi áp dụng phép chia trên thuộc tính này sẽ có một số rất lớn các tập con phát sinh, thậm chí mỗi khách hàng thuộc một tập con. Điều trên xảy ra là do mỗi khách hàng khi xét trên duy nhất một thuộc tính “Client_ID” được xem như là “trong suốt” (InfoClient_ID(D)=0). Như vậy việc phân chia theo thuộc tính này được xem như vô ích. Thuật toán C4.5 (một thuật toán cải tiến từ ID3) sử dụng độ đo tỷ lệ Gain (Gain ratio) được mở rộng từ độ đo Gain, được định nghĩa như sau [1]: Công thức SplitInfo A(D) cho biết thông tin tiềm ẩn được tạo ra bằng cách chia tập D trong v tập con. Với mỗi tập con được tạo ra, tính toán tỷ lệ của số bộ trong tập con này so với tổng số bộ dữ liệu trong tập D. Khi đó, độ đo tỷ lệ Gain sẽ được tính toán theo công thức sau [1]: Tất cả thuộc tính sẽ được tính toán độ đo tỷ lệ Gain, thuộc tính nào có độ đo tỷ lệ Gain lớn nhất sẽ được chọn làm thuộc tính phân chia. Tuy nhiên, khi sử dụng độ đo tỷ lệ Gain, cần phải lưu ý một điều về mẫu số trong công thức SplitInfo(A) vì mẫu số này có thể đạt giá trị bằng 0. Xét vì dụ được nêu trong bảng dữ liệu trên, để tính độ đo tỷ lệ Gain cho thuộc tính “income”, lưu ý thuộc tính này khi chiếu lên có ba giá trị riêng biệt: “low” (bốn bộ dữ liệu), “medium” (sáu bộ dữ liệu) và “high” (bốn bộ dữ liệu). Theo công thức [1]: Xem lại ví dụ phần độ đo Gain, tính được Gain(“income”) = 0.029. Như vậy, tỷ lệ độ đo Gain của thuộc tính “income”: 2.1.3 Binary criteria Decision Tree 13
  14. Dùng để tạo cây quyết định nhị phân. Các tiêu chuẩn thường được sử dụng đối với tiêu chuẩn này là: • Twoing Criterion • Orthogonal (ORT) Criterion • Kolmogorov–Smirnov Criterion • AUC–Splitting Criteria 2.2 Tiêu chuẩn tách đa chiều: Khác với tách 1 chiều nghĩa là tách theo 1 thuộc tính, tiêu chuẩn tách đa chiều sử dụng kết hợp nhiều thuộc tính cùng lúc để phân tách. Tuy nhiên, điều này sẽ ảnh hưởng tới performance nên ít được sử dụng. 2.3 Tiêu chuẩn dừng (Stopping Criteria): Dưới đây là một số tiêu chuẩn dừng thường được sử dụng: • Từng thuộc tính đã được đưa vào dọc theo con đường trên cây • Các mẫu huấn luyện ứng với nút lá có cùng giá trị thuộc tính đích (chẳng hạn, chúng có entropy bằng 0) • Tất cả các mẫu dữ liệu E thuộc về cùng một lớp duy nhất • Tất cả các mẫu có cùng giá trị thuộc tính Decision Tree 14
  15. 3. Một số thuật toán (Trần Thị Tuyết Vân) Với tiêu chí xây dựng cây quyết định ngày càng đơn giản, cho độ chính xác phân lớp cao, chi phí thấp, có khả năng mở rộng, thì có rất nhiều tác giả đã cho ra đời các thuật toán ngày càng tối ưu hơn. Một số thuật toán tiêu biểu sau: Algorithms References CLS(Concept learning System) C. I. Hovland và E. B. Hunt CART(Classification And Regression Tree) Breiman et al.(1984) ID3(Interactive Dichotomizer 3) Quinlan(1986) C4.5 Quinlan(1993) CHAID (CHi -squared Automatic Interaction Detecor ) Kass(1980) QUEST LohandShih(1997) CAL5 Muller and Wysotzki(1994) FACT Loh and Vanichsetakul(1988) LMDT Brodley and Utgoff(1995) T1 Holte(1993) PUBLIC Rastogi and Shim(2000) MARS Friedman(1991) SLIQ (Supervised Learning in Quest) Mehta(1996) SPRINT(A Scalable Parallel Classifier for Shafer, Agrawal, Mehta DataMining) . . Trong phạm vi đồ án môn học này chúng tôi xin trình bày cụ thể 4 thuật toán gồm thuật toán CLS, ID3, C4.5, SPRINT. 3.1 Thuật toán CLS Thuật toán này được Hovland và Hint giới thiệu trong Concept learning System (CLS) vào những năm 50 của thế kỷ 20. Sau đó gọi tắt là thuật toán CLS. Thuật toán CLS được thiết kế theo chiến lược chia để trị từ trên xuống. Nó gồm các bước sau [2]: 1. Tạo một nút T, nút này gồm tất cả các mẫu của tập huấn luyện. 2. Nếu tất cả các mẫu trong T thuộc cùng một lớp và có thuộc tính quyết định mang giá trị : Decision Tree 15
  16. • “yes” thì gán nhãn cho nút T là "yes" và dừng lại. T lúc này là nút lá. • "no” thì gán nhãn cho nút T là "no" và dừng lại. T lúc này là nút lá. 3. Trường hợp ngược lại các mẫu của tập huấn luyện thuộc cả hai lớp "yes" và "no" thì: • Chọn một thuộc tính X trong tập thuộc tính của tập mẫu dữ liệu, X có các giá trị v1, v 2, v n. • Chia tập mẫu trong T thành các tập con T 1, T 2, .,T n. chia theo giá trị của X. • Tạo n nút con T i (i=1,2 n) với nút cha là nút T. • Tạo các nhánh nối từ nút T đến các nút T i (i=1,2 n) là các thuộc tính của X. 4. Thực hiện lặp cho các nút con T i(i =1,2 n) và quay lại bước 2. Ví dụ 3.1: Cho tập huấn luyện gồm 14 mẫu, dựa vào thời tiết để xác định người đó có đi chơi Tennis hay không? Ngày Quang Cảnh Nhiệt độ Độ ẩm Gió Chơi Tennis D1 Nắng Nóng Cao Nhẹ Không D2 Nắng Nóng Cao Mạnh Không D3 Âm u Nóng Cao Nhẹ Có D4 Mưa Ấm áp Cao Nhẹ Có D5 Mưa Mát TB Nhẹ Có D6 Mưa Mát TB Mạnh Không D7 Âm u Mát TB Mạnh Có D8 Nắng Ấm áp Cao Nhẹ Không D9 Nắng Mát TB Nhẹ Có D10 Mưa Ấm áp TB Nhẹ Có D11 Nắng Ấm áp TB Mạnh Có D12 Âm u Ấm áp Cao Mạnh Có D13 Âm u Nóng TB Nhẹ Có D14 Mưa Ấm áp Cao Mạnh Không Theo các bước của thuật toán ta có cây quyết định như sau: Decision Tree 16
  17. Quang Cảnh Nắng Âm u Mưa T1[D1, D2, D8, D9, D11] T2[D3, D7, D12, D13] T3[D4, D5, D6, D10, D14] Nhiệt độ Có Gi Mát Ấm áp Nóng Nh ẹ [D9] [D8, D11] [D1, D2] Có Có Độ ẩm kh ôn TB Cao Có kh ôn Ta nhận thấy trong bước 3 của thuật toán, thuộc tính được chọn để triển khai cây là tuỳ ý. Nếu ta chọn thuộc tính “Độ ẩm” làm thuộc tính để triển khai T1 thì ta có 1 cây khác: Decision Tree 17
  18. Do vậy cùng với một tập mẫu dữ liệu huấn luyện nếu áp dụng thuật toán CLS với thứ tự chọn thuộc tính triển khai cây khác nhau, sẽ cho ra các cây có hình dạng khác nhau. Việc lựa chọn thuộc tính sẽ ảnh hưởng tới độ rộng, độ sâu, độ phức tạp của cây. Vì vậy một câu hỏi đặt ra là thứ tự thuộc tính nào được chọn để triển khai cây sẽ là tốt nhất. Vấn đề này sẽ được giải quyết trong thuật toán ID3 dưới đây. 3.2 Thuật toán ID3 Thuật toán ID3 được phát biểu bởi tác giả Quinlan (trường đại học Syney, Australia) và được công bố vào cuối thập niên 70 của thế kỷ 20. Sau đó, thuật toán này được giới thiệu và trình bày trong mục Induction on decision trees, machine learning năm 1986. ID3 được xem như là một cải tiến của CLS với khả năng lựa chọn thuộc tính tốt nhất để tiếp tục triển khai cây tại mỗi bước. ID3 xây dựng cây quyết định từ trên- xuống (top - down). ID3 sử dụng độ đo Information Gain (trình bày ở 2.1.1.1)để đo tính hiệu quả của các thuộc tính phân lớp. Trong quá trình xây dựng cây quyết định theo thuật toán ID3 tại mỗi bước phát triển cây, thuộc tính được chọn để triển khai là thuộc tính có giá trị Gain lớn nhất. Hàm xây dựng cây quyết định trong thuật toán ID3 [2] Function induce_tree(tập_ví_dụ, tập_thuộc_tính) begin if mọi ví dụ trong tập_ví_dụ đều nằm trong cùng một lớp then return một nút lá được gán nhãn bởi lớp đó Decision Tree 18
  19. else if tập_thuộc_tính là rỗng then return nút lá được gán nhãn bởi tuyển của tất cả các lớp trong tập_ví_dụ else begin chọn một thuộc tính P, lấy nó làm gốc cho cây hiện tại; xóa P ra khỏi tập_thuộc_tính; với mỗi giá trị V của P begin tạo một nhánh của cây gán nhãn V; Đặt vào phân_vùng các ví dụ trong tập_ví_dụ có giá trị V V tại thuộc tính P; Gọi induce_tree(phân_vùng , tập_thuộc_tính), gắn kết quả V vào nhánh V end end end Xét ví dụ 3.1 cho thuật toán ID3: - Gọi tập huấn luyện là S, số mẫu thuộc lớp Có ký hiệu là (+) và số mẫu thuộc lớp Không ký hiệu là (-), ta có S[9+,5-] tức tập huấn luyện S có 14 mẫu trong đó có 9 mẫu thuộc lớp Có và 5 mẫu thuộc lớp Không . - Để xác định thuộc tính phân lớp ta cần tính Information Gain cho từng thuộc tính của mẫu huấn luyện: o Thuộc tính Quang Cảnh Value(QC)={Nắng, Mưa, Âm u} Gọi S Nắng là tập các mẫu có QC=Nắng ta có S Nắng =[2+,3-] Tương tự ta có S Mưa =[3+,2-], S Âm u =[4+,0-] , = − = − ắ − Â − ư = 0.94 − × 0.971 − × 0 − × 0.971 ≈ 0.246 Tư tượng đối với các thuộc tính Nhiệt độ, Độ ẩm, Gió ta có Gain tương ứng như sau: - Gain(S,ND)= 0.029 ecsree
  20. - Gain(S,DA)= 0.151 - Gain(S,G)= 0.048 Chọn Quang cảnh làm thuộc tính phân lớp vì có Gain lớn nhất - Vẽ cây quyết định: uang ảnh ng m u ưa D D2 D D D D D D2 D D D D D0 D ng 2- m u 0- ưa2 ó Do Quang cảnh=Nắng và Quang cảnh=Mưa chưa xác định được thuộc tính phân lớp nên ta chia tập huấn liệu thành 2 bảng như hình trên và tiếp tục tìm thuộc tính phân lớp cho 2 bảng mẫu huấn luyện. Kết quả cuối cùng ta có cây quyết định sau: Decision Tree 20
  21. uang Cảnh Nng m u ưa D, D, D, D, D D3, D, D, D3 D4, D, D, D, D4 S Nng ,3- S m u 4,- S ưa3, Độ m Có Gió T Cao Nh S cao ,3- S T ,- S Nh 3,- Có kh n Có Từ cây quyết định trên tạo ra các luật: – R1: IF QC=Âm u THEN Chơi Tennis=Có. – R2: IF QC=Nắng AND Độ ẩm=TB THEN Chơi Tennis=Có. – R3: IF QC=Nắng AND Độ ẩm=Cao THEN Chơi Tennis=Không. – R4: IF QC=Mưa AND Gió=Nhẹ THEN Chơi Tennis=Có – R5: IF QC=Mưa AND Gió=Mạnh THEN Chơi Tennis=Không Nhận xét: Với việc tính toán giá trị Gain để lựa chọn thuộc tính tối ưu cho việc triển khai cây, thuật toán ID3 được xem là một cải tiến của thuật toán CLS. Tuy nhiên thuật toán ID3 còn các vấn đề chưa được giải quyết như sau: o Vấn đề overfitting (sẽ trình bày kỹ ở mục 4) o Độ đo Information Gain chưa thật sự tốt vì còn thiên về các thuộc tính có nhiều giá trị. o Xử lý các thuộc tính có kiểu giá trị liên tục (ví dụ như kiểu số thực) o Xử lý các bộ học thiếu giá thuộc tính (missing-value attributes) Decision Tree 2
  22. o Xử lý các thuộc tính có chi phí (cost) khác nhau Vấn đề này sẽ được giải quyết trong thuật toán C4. sau đây. 3.3 Thuật toán C4.5 Thuật toán C4.5 cũng được tác giả Quinlan phát triển và công bố vào năm 1996. Thuật toán này là một thuật toán được cải tiến từ thuật toán ID3 và giải quyết hầu hết các vấn đề mà ID3 chưa giải quyết như đã nêu trên. Nó thực hiện phân lớp tập mẫu dữ liệu theo chiến lược ưu tiên theo chiều sâu ( Depth - First ). Thuật toán xây dựng cây quyết định C4.5 Mô tả thuật toán dưới dạng giả mã như sau [2]: Function xay_dung_cay(T) { ; If Then Else ; For Do ; ; If Then ; For Do ( T` được tách ra theo quy tắc: - Nếu N.test là thuộc tính liên tục tách theo ngưỡng ở bước 5 - Nếu N.test là thuộc tính phân loại rời rạc tách theo các giá trị của thuộc tính này. ) { If } Then ; Else ; } ; ; } Decision Tree
  23. 3.4 Một số cài tiến của thuật toán C4.5 so với thuật toán ID3 3.4.1 Chọn độ đo Gain Ratio Thuật toán ID3 sử dụng độ đo Information Gain để tìm thuộc tính phân lớp tốt nhất nhưng xu hướng của Information Gain là ưu tiên chọn thuộc tính có nhiều giá trị làm thuộc tính phân lớp. Thật vậy, ta xét ví dụ với tập huấn luyện sau: Outlook Temp Humidity Windy Play A Hot High Weak No A Hot High Strong No B Hot High Weak Yes E Mild High Weak Yes A Cool Normal Weak Yes B Cool Normal Strong No E Cool Normal Strong Yes A Mild High Weak No D Cool Normal Weak Yes E Mild Normal Weak Yes A Mild Normal Strong Yes B Mild High Strong Yes C Hot Normal Weak Yes D Mild High Strong No Test bằng Tool WEKA ta được kết quả sau: Decision Tree 23
  24. Test ng W Id3 C4.5 Outlook A Humidity High Humidity High: No Outlook A: No (3.0) Humidity Normal: Yes Outlook B: Yes (2.0) Outlook B Outlook E: Yes (1.0) Temp Hot: Yes Outlook D: No (1.0) Temp Mild: Yes Outlook C: No (0.0) Temp Cool: No Humidity Normal: Yes Outlook E: Yes (7.01.0) Outlook D Temp Hot: null Temp Mild: No Temp Cool: Yes Outlook C: Yes Rõ ràng Information Gain chọn thuộc tính có nhiều giá trị (Outlook) làm thuộc tính phân lớp. Kết quả cho cây quyết định phức tạp hơn, sinh ra nhiều luật hơn. Trong thuật toán C4.5, tác giả Quinlan đã giải quyết vấn đề này bằng cách sử dụng 1 độ đo khác là Gain Ratio, làm giảm ảnh hưởng của các thuộc tính có nhiều giá trị. 3.4.2 Xử lý các thuộc tính có kiểu giá trị liên tục Thuộc tính kiểu giá trị liên tục là Ngày Quang C ảnh Nhi ệt đ ộ Độ ẩm Gió Chơi Tennis D1 Nắng 85 85 Nh ẹ Không D2 Nắng 80 90 Mạnh Không D3 Âm u 83 78 Nh ẹ Có D4 Mưa 70 96 Nh ẹ Có D5 Mưa 68 80 Nh ẹ Có D6 Mưa 65 70 Mạnh Không D7 Âm u 64 65 Mạnh Có D8 Nắng 72 95 Nh ẹ Không D9 Nắng 69 70 Nh ẹ Có Decision Tree 24
  25. D10 Mưa 75 80 Nh ẹ Có D11 Nắng 75 70 Mạnh Có D12 Âm u 72 90 Mạnh Có D13 Âm u 81 75 Nh ẹ Có D14 Mưa 71 80 Mạnh Không Trong thuật toán ID3 không phân biệt thuộc tính kiểu giá trị liên tục và thuộc tính kiểu giá trị rời rạc, mà chỉ xem thuộc tính kiểu giá trị liên tục như một thuộc tính có nhiều giá trị, và phạm phải khuyết điểm trên là ưu tiên chọn thuộc tính này làm thuộc tính phân lớp. Giả sử thuộc tính A có các giá trị v1 ,v 2 , , v N, thuật toán C4.5 đã giải quyết vấn đề này như sau: - Trước tiên, sắp xếp các giá trị của thuộc tính A tăng dần ví dụ như từ v1 ,v 2 , , v N - Chia giá trị của thuộc tính A thành N-1 “ngưỡng”, giá trị “ngưỡng” - Tính Information Gain ứng với N-1 “ngưỡng”. - Chọn “ngưỡng” có Information Gain cao nhất làm “ngưỡng” tốt nhất của A, Gain(S,A) là giá trị Gain cao nhất của “ngưỡng” chọn. Xét ví dụ với tập huấn luyện trên, tìm ngưỡng và Gain của thuộc tính Độ Ẩm. Decision Tree 25
  26. nformation Gain .4 .1 . Sp xếp .15 tng dn .45 .9 .151 .1 .1 .51 .1 .4 Kết quả trên cho thấy ta có ngưỡng là Độ ẩm 80 vì có Gain lớn nhất. Gain(S,Độ ẩm)=0.2361 Nhận xét: Việc tìm ngưỡng theo thuật toán C4.5 rất tốn thời gian để tính Gain cho N-1 ngưỡng. Sau có nhiều tác giả đã nghiên cứu để tìm cách tìm ngưỡng nhanh hơn như Fayyad(1991), Utgoff, Brodley, Murthy et al. 3.4.3 Làm việc với thuộc tính thiếu giá trị Thuật toán xây dựng dựa vào giả thuyết tất cả các mẫu dữ liệu có đủ các thuộc tính. Nhưng trong thực tế, xảy ra hiện tượng dữ liệu bị thiếu, tức là ở một số mẫu dữ liệu có những thuộc tính không được xác định, hoặc mâu thuẫn, hoặc không bình thường. Ta xem xét kỹ hơn với trường hợp dữ liệu bị thiếu. Đơn giản nhất là không Decision Tree 26
  27. đưa các mẫu với các giá trị bị thiếu vào, nếu làm như vậy thì có thể dẫn đến tình trạng thiếu các mẫu học. Một số cách khác được đề xuất ở thuật toán C4.5 như sau: o Giả sử thuộc tính A là một ứng cử cho thuộc tính kiểm tra ở nút n o Xử lý thế nào với bộ X thiếu giá trị đối với thuộc tính A(tức là X A là không xác định)? o Gọi S n là tập các mẫu học gn với nút n có giá trị đối với thuộc tính A – Giải pháp 1: X A là giá trị phổ biến nhất đối với thuộc tính A trong số các bộ thuộc tập S n – Giải pháp : X A là giá trị phổ biến nhất đối với thuộc tính A trong số các bộ Sn có cùng phân lớp với X – Giải pháp : • Tính xác suất p v đối với mỗi giá trị có thể V của thuộc tính A • Gán phn p v của bộ X đối với nhánh tương ứng của nút n. • Giá trị pv này được dùng tính Gain và hơn nữa để chia nhỏ nhánh tiếp theo của cây nếu có thuộc tính thứ có lỗi(thiếu giá trị) Xét ví dụ sau: Ngày Quang C ảnh Nhi ệt đ ộ Độ ẩm Gió Chơi Tennis D1 Nng Nóng Cao Nh ẹ Không D Nng Nóng Cao Mạnh Không D Âm u Nóng Cao Nh ẹ Có D4 Mưa Ấm áp Cao Nh ẹ Có D5 Mưa Mát TB ??? Có D Mưa Mát TB Mạnh Không D Âm u Mát TB Mạnh Có D Nng Ấm áp Cao Nh ẹ Không D9 Nng Mát TB Nh ẹ Có D1 Mưa Ấm áp TB Nh ẹ Có Decision Tree
  28. D11 Nng Ấm áp TB Mạnh Có D1 Âm u Ấm áp Cao Mạnh Có D1 Âm u Nóng TB Nh ẹ Có D14 Mưa Ấm áp Cao Mạnh Không Tại mẫu huấn luyện D5 có thuộc tính không rõ giá trị là thuộc tính Gió, theo giải pháp trên ta tìm giá trị cho thuộc tính ở mẫu này như sau: - Giải pháp 1: Xét trên toàn tập S có 1 mẫu, trong đó số mẫu có Gió = Mạnh là và số mẫu có Gió = Nhẹ là . Vậy giá trị “Nhẹ” phổ biến hơn nên ta chọn “Nhẹ” điền vào giá trị thiếu ở mẫu D5. - Giải pháp : Chỉ xét trên lớp mà mẫu D5 thuộc, đó là lớp “Có”. Số mẫu thuộc lớp “Có” lúc này là , trong đó số mẫu có Gió = Mạnh là và số mẫu có Gió = Nhẹ là 5. Vậy giá trị “Nhẹ” phổ biến hơn nên ta chọn “Nhẹ” điền vào giá trị thiếu ở mẫu D5. - Giải pháp : Gió có giá trị là “Nhẹ” và “Mạnh”. Tính xác suất ứng với giá trị này: • P(Gió=Nhẹ )=/1 • P(Gió=Mạnh )=/1 Xác suất của Gió=Nhẹ cao hơn nên ta chọn “Nhẹ” điền vào giá trị thiếu ở mẫu D5. 3.4.4 Xử lý các thuộc tính có giá trị chi phí Trong việc học để phân lớp các bệnh y tế, BloodTest có chi phí $15 trong khi TemperatureTest có chi phí $1, ta nên chọn thuộc tính nào để chi phí trị bệnh là thấp nhất! Theo xu hướng học cây quyết định: – Sử dụng càng nhiều các thuộc tính có chi phí thấp càng tốt. – Chỉ sử dụng các thuộc tính có chi phí cao khi cn thiết (để giúp đạt được các phân loại đáng tin cậy) Làm sao để học một cây quyết định với chi phí thấp? Vấn đề này đã được tác giả Tan và Schimmer (199) giải quyết bằng cách sử dụng các đánh giá khác của nformation Gain cho việc xác định thuộc tính phân lớp theo công thức sau: , Decision Tree
  29. Đến năm 1991, tác giả Nunez đưa ra một cách công thức khác: 2, − 1 + 1 3.5 Thuật toán SPRINT [3] Ngày nay dữ liệu cần khai phá có thể có tới hàng triệu bản ghi và khoảng 10 đến 10000 thuộc tính. Hàng Tetabyte (100 M bản ghi * 2000 trường * 5 bytes) dữ liệu cần được khai phá. Những thuật toán ra đời trước không thể đáp ứng được nhu cầu đó. Trước tình hình đó, SPRINT là sự cải tiến của thuật toán SLIQ (Mehta, 1996) ra đời. Các thuật toán SLIQ và SPRINT đều có những cải tiến để tăng khả năng mở rộng của thuật toán như: • Khả năng xử lý tốt với những thuộc tính liên tục và thuộc tính rời rạc. • Cả hai thuật toán này đều sử dụng kỹ thuật sắp xếp trước một lần dữ liệu, và lưu trữ thường trú trên đĩa (disk – resident data) những dữ liệu quá lớn không thể chứa vừa trong bộ nhớ trong. Vì sắp xếp những dữ liệu lưu trữ trên đĩa là đắt, nên với cơ chế sắp xếp trước, dữ liệu phục vụ cho quá trình phát triển cây chỉ cần được sắp xếp một lần. Sau mỗi bước phân chia dữ liệu tại từng node, thứ tự của các bản ghi trong từng danh sách được duy trì, không cần phải sắp xếp lại như các thuật toán CART và C4.5. Từ đó làm giảm tài nguyên tính toán khi sử dụng giải pháp lưu trữ dữ liệu thường trú trên đĩa. • Cả 2 thuật toán sử dụng những cấu trúc dữ liệu giúp cho việc xây dựng cây quyết định dễ dàng hơn. Tuy nhiên cấu trúc dữ liệu lưu trữ của SLIQ và SPRINT khác nhau, dẫn đến những khả năng mở rộng, và song song hóa khác nhau giữa hai thuật toán này. Mã giả của thuật toán SPRINT như sau: SPRINT algorithm: Partition(Data S) { if (all points in S are of the same class) then return; for each attribute A do evaluate splits on attribute A; Use best split found to partition S into S1& S2 Partition(S1); Partition(S2); } Decision Tree 29
  30. Initial call: Partition(Training Data) 3.5.1 SPRINT sử dụng độ đo Gini-index SPRINT là một trong những thuật toán sử dụng độ đo Gini-index để tìm thuộc tính tốt nhất làm thuộc tính phân lớp tại mỗi node trên cây. Chỉ số này đã được trình bày chi tiết ở mục 2.1.1.2 Ưu điểm của loại chỉ số này là các tính toán trên nó chỉ dựa vào thông tin về sự phân phối các giá trị lớp trong từng phần phân chia mà không tính toán trên các giá trị của thuộc tính đang xem xét. Để tìm được điểm phân chia cho mỗi node, cần quét từng danh sách thuộc tính của node đó và ước lượng các phân chia dựa trên mỗi thuộc tính gắn với node đó. Thuộc tính được chọn để phân chia là thuộc tính có chỉ số ginisplit(S) nhỏ nhất. Điểm cần nhấn mạnh ở đây là khác với Information Gain chỉ số này được tính mà không cần đọc nội dung dữ liệu, chỉ cần biểu đồ biểu diễn sự phân phối các bản ghi theo các giá trị phân lớp. Đó là tiền đề cho cơ chế lưu trữ dữ liệu thường trú trên đĩa. 3.5.2 Cấu trúc dữ liệu trong SPRINT Kỹ thuật phân chia dữ liệu thành các danh sách thuộc tính riêng biệt lần đầu tiên được SLIQ (Supervised Learning In Quest) đề xuất. Dữ liệu sử dụng trong SLIQ gồm: nhiều danh sách thuộc tính lưu trữ thường trú trên đĩa (mỗi thuộc tính tương ứng với một danh sách), và một danh sách đơn chứa giá trị của class lưu trữ thường trú trong bộ nhớ chính. Các danh sách này liên kết với nhau bởi giá trị của thuộc tính rid (chỉ số bản ghi được đánh thứ tự trong cơ sở dữ liệu) có trong mỗi danh sách. SLIQ phân chia dữ liệu thành hai loại cấu trúc: Decision Tree 30
  31. Danh sách thuộc tính (Attribute List) thường trú trên đĩa. Danh sách này gồm trường thuộc tính và rid (a record identifier). Danh sách lớp (Class List) chứa các giá trị của thuộc tính phân lớp tương ứng với từng bản ghi trong cơ sở dữ liệu. Danh sách này gồm các trường rid, thuộc tính phân lớp và node (liên kết với node có giá trị tương ứng trên cây quyết định). Việc tạo ra trường con trỏ trỏ tới node tương ứng trên cây quyết định giúp cho quá trình phân chia dữ liệu chỉ cần thay đổi giá trị của trường con trỏ, mà không cần thực sự phân chia dữ liệu giữa các node. Danh sách lớp được lưu trữ thường trú trong bộ nhớ trong vì nó thường xuyên được truy cập, sửa đổi cả trong giai đoạn xây dựng cây, và cả trong giai đoạn cắt, tỉa cây. Kích thước của danh sách lớp tỉ lệ thuận với số lượng các bản ghi đầu vào. Khi danh sách lớp không vừa trong bộ nhớ, hiệu năng của SLIQ sẽ giảm. Đó là hạn chế của thuật toán SLIQ. Việc sử dụng cấu trúc dữ liệu thường trú trong bộ nhớ làm giới hạn tính mở rộng được của thuật toán SLIQ. SPRINT khắc phục được hạn chế của SLIQ bằng cách không sử dụng danh sách lớp cư trú trong bộ nhớ, SPRINT chỉ sử dụng một loại danh sách là danh sách thuộc tính có cấu trúc như sau: 3.5.3 Danh sách thuộc tính SPRINT tạo danh sách thuộc tính cho từng thuộc tính trong tập dữ liệu. Danh sách này bao gồm thuộc tính, nhãn lớp (Class label hay thuộc tính phân lớp), và chỉ số của bản ghi rid (được đánh từ tập dữ liệu ban đầu). Danh sách thuộc tính liên tục được sắp xếp thứ tự theo giá trị của thuộc tính đó ngay khi được tạo ra. Nếu toàn bộ dữ liệu không chứa đủ trong bộ nhớ thì tất cả các danh sách thuộc tính được lưu trữ trên đĩa. Decision Tree 31
  32. Chính do đặc điểm lưu trữ này mà SPRINT đã loại bỏ mọi giới hạn về bộ nhớ, và có khả năng ứng dụng với những cơ sở dữ liệu thực tế với số lượng bản ghi có khi lên tới hàng tỉ. Các danh sách thuộc tính ban đầu tạo ra từ tập dữ liệu đào tạo được gắn với gốc của cây quyết định. Khi cây phát triển, các node được phân chia thành các node con mới thì các dánh sách thuộc tính thuộc về node đó cũng được phân chia tương ứng và gắn vào các node con. Khi danh sách bị phân chia thì thứ tự của các bản ghi trong danh sách đó được giữ nguyên, vì thế các danh sách con được tạo ra không bao giờ phải sắp xếp lại. Đó là một ưu điểm của SPRINT so với các thuật toán trước đó. • Biểu đồ (Histogram) SPRINT sử dụng biểu đồ để lập bảng thống kê sự phân phối lớp của các bản ghi trong mỗi danh sách thuộc tính, từ đó dùng vào việc ước lượng điểm phân chia cho danh sách đó. Thuộc tính liên tục và thuộc tính rời rạc có hai dạng biểu đồ khác nhau. - Biểu đồ của thuộc tính liên tục SPRINT sử dụng 2 biểu đồ: C below và C above . C below chứa sự phân phối của những bản ghi đã được xử lý, C above chứa sự phân phối của những bản ghi chưa được xử lý trong danh sách thuộc tính. Với thuộc tính liên tục, các giá trị kiểm tra là các giá trị nằm giữa mọi cặp 2 giá trị liền kề của thuộc tính đó. Để tìm điểm phân chia cho thuộc tính đó tại một node nhất định, biểu đồ được khởi tạo với C below bằng 0 và C above là phân phối lớp của tất cả các bản ghi tại node đó. Hai biểu đồ trên được cập nhật lần lượt mỗi khi từng bản ghi được đọc. Mỗi khi con trỏ chạy gini-index được tính trên từng điểm phân chia nằm giữa giá trị vừa đọc và giá trị sắp đọc. Khi đọc hết danh sách thuộc tính (C above bằng 0 ở tất cả các cột) thì cũng là lúc tính được toàn bộ các gini-index của các điểm phân chia cần xem xét. Căn cứ vào kết quả đó có thể chọn ra gini-index thấp nhất và tương ứng là điểm phân chia của thuộc tính liên tục đang xem xét tại node đó. Việc tính gini-index hoàn toàn dựa vào biểu đồ. Nếu tìm ra điểm phân chia tốt nhất thì kết quả đó được lưu lại và biểu đồ vừa gắn danh sách thuộc tính đó được khởi tạo lại trước khi xử lý với thuộc tính tiếp theo. Decision Tree 32
  33. - Biểu đồ của thuộc tính rời rạc Thuộc tính rời rạc cũng có một biểu đồ gắn với từng node. Tuy nhiển SPRINT chỉ sử dụng một biểu đồ là count matrix chứa sự phân phối lớp ứng với từng giá trị của thuộc tính được xem xét. Với thuộc tính rời rạc, quá trình tìm điểm phân chia tốt nhất cũng được tính toán dựa trên biểu đồ của danh sách thuộc tính đó. Trước tiên cần quét toàn bộ danh sách thuộc tính để thu được số lượng phân lớp ứng với từng giá trị của thuộc tính rời rạc, kết quả này được lưu trong biểu đồ count matrix. Sau đó, cần tìm tất cả các tập con có thể có từ các giá trị của thuộc tính đang xét, coi đó là điểm phân chia và tính gini-index tương ứng. Các thông tin cần cho việc tính toán chỉ số gini-index của bất cứ tập con nào đều có trong count matrix . Bộ nhớ cung cấp cho count matrix được thu hồi sau khi tìm ra được điểm phân chia tốt nhất của thuộc tính đó. Decision Tree 33
  34. Các danh sách thuộc tính được xử lý cùng một lúc, do vậy thay vì đòi hỏi các danh sách thuộc tính trong bộ nhớ, với SPRINT bộ nhớ chỉ cần chứa tập các biểu đồ như trên trong quá trình phát triển cây. Ví dụ mô tả cách tính chỉ số Gini–index với mẫu huấn luyện như trên. Với Thuộc tính liên tục Age cần tính điểm phân chia trên lần lượt các so sánh sau Age 17) = 1- ((3/5) 2+(2/5) 2) = 12/25 – Gini SPLIT (Age 17)= (1/6) * 0 + (5/6) * (12/25) = 2/5 • G(Age 20) = 1- ((2/4) 2+(2/4) 2) = 1/2 – Gini SPLIT (Age 20)= (2/6) * 0 + (4/6) * (1/2) = 1/3 • Gini(Age 23) = 1- ((1/3) 2+(2/3) 2) = 4/9 – Gini SPLIT (Age 23)= (3/6) * 0 + (3/6) * (4/9) = 2/9 • Gini(Age 32) = 1- ((1/2) 2+(1/2) 2) = 1/2 – Gini SPLIT (Age 32)= (4/6) * 1/4 + (2/6) * (1/2) = 1/3 • Gini(Age 43) = 1- ((0) 2+(1) 2) = 0 – Gini SPLIT (Age 43)= (5/6) * 8/25 + (1/6) * 0= 4/15 So sánh các Gini SPLIT tìm được ứng với từng phân chia của các thuộc tính, Gini SPLIT ứng với Age <=23 có giá trị nhỏ nhất. Do vậy điểm phân chia là tại thuộc tính Age với giá trị ngưỡng phân chia = (23+32) / 2 = 27.5 và Gini(Age)=2/9. 3.5.4 Thực thi sự phân chia Decision Tree 34
  35. Sau khi tìm ra thuộc tính phân chia tốt nhất của node dựa trên so sánh gini-index của các thuộc tính có trên node đó, cần thực thi sự phân chia bằng cách tạo ra các node con và phân chia danh sách thuộc tính của node cha cho các node con. Với thuộc tính được chọn (Age như trên hình vẽ) làm thuộc tính phân chia tại node đó, việc phân chia danh sách thuộc tính này về các node con khá đơn giản. Nếu đó là thuộc tính liên tục, chỉ cần cắt danh sách thuộc tính theo điểm phân chia thành 2 phần và gán cho 2 node con tương ứng. Nếu đó là thuộc tính rời rạc thì cần quét toàn bộ danh sách và áp dụng test đã xác định để chuyển các bản ghi về 2 danh sách mới ứng với 2 node con. Nhưng vấn đề không đơn giản như vậy với những thuộc tính còn lại tại node đó (Car Type chẳng hạn), không có test trên thuộc tính này, nên không thể áp dụng các kiểm tra trên giá trị của thuộc tính để phân chia các bản ghi. Lúc này cần dùng đến một trường đặc biệt trong các danh sách thuộc tính đó là rids. Đây chính là trường kết nối các bản ghi trong các danh sách thuộc tính. Cụ thể như sau: trong khi phân chia danh sách của thuộc tính phân chia (Age) cần chèn giá trị trường rids của mỗi bản ghi vào một bảng băm (hash table) để đánh đấu node con mà các bản ghi tương ứng (có cùng rids) trong các danh sách thuộc tính khác được phân chia tới. Cấu trúc của bảng băm như sau: Phân chia xong danh sách của thuộc tính phân chia thì cũng là lúc xây dựng xong bảng băm. Danh sách các thuộc tính còn lại được phân chia tới các node con theo thông tin trên bảng băm bằng cách đọc trường rids trên từng bản ghi và trường Child node tương ứng trên bảng băm. Decision Tree 35
  36. Nếu bảng băm quá lớn so với bộ nhớ, quá trình phân chia được chia thành nhiều bước. Bảng băm được tách thành nhiều phần sao cho vừa với bộ nhớ, và các danh sách thuộc tính phân chia theo từng phần bảng băm. Quá trình lặp lại cho đến khi bảng băm nằm trong bộ nhớ. Decision Tree 36
  37. 4. Vấn đề Overfitting và các giải pháp giảm Overfitting (Hồ Sơn Lâm) 4.1 Quá khớp dữ liệu (Overfitting) Thế nào là “quá khớp” dữ liệu? Có thể hiểu đây là hiện tượng cây quyết định chứa một số đặc trưng riêng của tập dữ liệu đào tạo, nếu lấy chính tập traning data để test lại mô hình phân lớp thì độ chính xác sẽ rất cao, trong khi đối với những dữ liệu tương lai khác nếu sử dụng cây đó lại không đạt được độ chính xác như vậy. 4.1.1 Định nghĩa: Cho một không gian giả thuyết H, h Є H quá khớp với tập dữ liệu huấn luyện nếu tồn tại h’ Є H sao cho : - h có tỉ lệ lỗi thấp hơn h’ đối với tập dữ liệu huấn luyện. - nhưng h’ lại có tỉ lệ lỗi thấp hơn h đối với dữ liệu tổng quát. H1 Thống kê độ chính xác của cây quyết định Đây là một mô hình diễn tả quá trình quá khớp dữ liệu trong một ứng dụng điển hình của cây quyết định. Trong trường hợp này, cây quyết định này được xây dựng trên thuật toán ID3 về việc học chữa bệnh tiểu đường. Với đường chân trời Decision Tree 37
  38. thể hiện tổng số node ứng viên trên cây quyết định và đường thẳng đứng thể hiện độ chính xác của trên trên tập dữ liệu huấn luyện và trên tập dữ liệu kiểm tra (không nằm trong tập dữ liệu huấn luyện). Nếu đưa tập huấn luyện vào thì cây cho kết quả thì độ chính xác tăng (với số lượng node tăng) theo một đường thẳng gần như tuyến tính, nhưng ngược lại độ chính xác của dữ liệu test lại bị giảm xuống theo số lượng node tăng dần. Như ta có thể thấy rằng nếu cây vượt quá 25 nodes ứng viên thì độ chính xác sẽ bị giảm dần trên dữ liệu test và tăng dần trên dữ liệu huấn luyện. Tại sao độ chính xác của cây quyết định lại giảm xuống khi kiểm tra dữ liệu test. 4.1.2 Nguyên nhân quá khớp dữ liệu Nguyên nhân chính là do dữ liệu test có những bộ dự liệu bị nhiễu (noise data) hay bị lỗi và số lượng dữ liệu đem đi huấn luyện quá ít hay dữ liệu huấn luyện chỉ nghiêng về một đặc trưng nào đó thôi chứ không bao quát toàn bộ trường hợp. Để diễn ta điều này ta đi vào một bộ dữ liệu nhiễu như sau: H2 Dữ liệu đem đi huấn luyện Decision Tree 38
  39. H3 Cây quyết định từ bộ dữ liệu trên • Bộ dữ liệu nhiễu như sau: Outlook = Sunny, Temperature = Hot, Humidity = Normal, Wind = Strong,PlayTennis = No Bộ dữ liệu này sẽ không cho được kết quả dựa vào cây quyết định trên. Nếu như ta đêm bộ dữ liệu này vào tập huấn luyện và huấn luyện lại cây thì cây sẽ phức tạp, tăng độ chính xác của tập huấn luyện nhưng tập test thì giảm độ chính xác. 4.2 Phương pháp tránh quá khớp dữ liệu Decision Tree 39
  40. Quá khớp dữ liệu là một khó khăn đáng kể đối với học bằng cây quyết định và những phương pháp học khác. Đặc biệt khi số lượng ví dụ trong tập dữ liệu đào tạo quá ít, hay có noise trong d ữ liệu. Có hai phương pháp tránh “quá khớp” dữ liệu trong cây quyết định: • Dừng phát triển cây sớm hơn bình thường, trước khi đạt tới điểm phân lớp hoàn hảo tập dữ liệu đào tạo. Với phương pháp này, một thách thức đặt ra là phải ước lượng chính xác thờ i điểm dừng phát triển cây. • Cho phép cây có th ể “quá khớp” dữ liệu, sau đó sẽ cắt, tỉa cây. Mặc dù phương pháp thứ nhất có vẻ trực tiếp hơn, nhưng với phương pháp thứ hai thì cây quyế t định được sinh ra được thực nghiệm chứng minh là thành công hơn trong thực tế . Hơn nữa việc cắt tỉa cây quyết định còn giúp tổng quát hóa, và cải thiện độ chính xác của mô hình phân lớp. Dù thực hiện phương pháp nào thì vấn đề mấu chốt ở đây là tiêu chuẩn nào được sử dụng để xác định kích thước hợp lý của cây cuối cùng. Như vậy kích thước chính xác của cây được tìm thấy bằng việc dừng sớm hay trễ là một câu hỏi được đặt ra cho nhiều nhà khoa học để xác định kích thước cuối cùng của cây. Và có các phương pháp như sau: • Tập dữ liệu được chia ra làm các phần riêng biệt, từ tập huấn luyện, tập đánh giá cây sau khi cắt tỉa bằng phương pháp hậu cắt tỉa • Áp dụng một kiểm tra thống kê (Chi-square test) để đánh giá xem việc mở rộng (hay cắt tỉa) một nút có giúp cải thiện hiệu năng đối với tập huấn luyện. • Dùng độ đo bằng cách mã hóa tập huấn luyện và cây quyết định , ngừng phát triển cây nếu chiều dài của chuỗi mã hóa là nhỏ nhất. Phương pháp đầu tiên được dùng phổ biến và sử dụng tập dữ liệu huấn luyện để tạo cây, tập đánh giá để đánh giá node cần cắt tỉa. Và ta tiếp tục đi vào phương pháp thứ nhất để giảm lỗi cắt quá khớp dữ liệu. 4.2.1 Cắt tỉa để giảm lỗi (Reduced error pruning) Như ta biết rằng phương pháp thứ nhất, người ta chia tập dữ liệu ra làm 3 phần do Quinlan đề xuất 1987 như sau: • Tập huấn luyện để tạo cây(training examples). • Tập đánh giá dùng cho việc cắt tỉa (validation examples). • Tập kiểm tra dùng để đánh giá độ chính xác trong tương lai (test examples). 1. Phương pháp cắt tỉa như sau: • Mỗi node trong cây quyết định là một ứng viên (không tính node lá). Decision Tree 40
  41. • Node bị cắt đi nếu làm tăng độ chính xác của cây quyết định trên tập đánh giá. • Lặp cho tới khi độ chính xác của phần đánh giá giảm thì dừng. Sau đây là kết quả thống kê tính hiệu quả của việc cắt tỉa: H4 Độ chính xác của cây sau cắt tỉa Hiệu quả của việc cắt tỉa trên cây quyết định. Biểu đồ trên có đường cong trên và dưới giống như H3 thể hiện độ chính xác của tập huấn luyện và tập test. Thêm vào đó còn thể hiện hiệu quả độ chính xác của cây quyết định trên tập dữ liệu test sau khi cắt tỉa bằng thuật toán Reduced-error pruning. Sau khi cắt tỉa thì độ chính xác của tập test tăng lên theo số lượng node ứng viên nhưng khi đạt đến số lượng node tối đa thì độ chính xác của cây cắt tỉa giảm bằng với trước khi cắt tỉa (số lượng node nhiều nhất). Để thể hiện rõ điều này ta đi vào ví dụ cụ thể: Decision Tree 41
  42. H5 Cây dùng để cắt tỉa [4] • Đánh giá tỉ lệ lỗi trên một nút theo PP C4.5: • f =S/N: tỉ lệ lỗi trên tập huấn luyện • S: số mẫu lỗi tại một node • N: tổng số mẫu tại node • z : độ lệch chuẩn (standard deviation) • Phân bổ Gaussian (Normal Distribution) Decision Tree 42
  43. • Trung bình µ= 0 và phương sai δ2 =1 • c% : khoảng tin cậy của biến random X [–z ≤ X ≤ z] • Với phân bổ đối xứng: Xác xuất của một biến ngẫu nhiên bất kỳ [4] : Đánh giá việc cắt tỉa các node bằng cách dùng công thức đánh giá độ lỗi của một node cha so với độ lỗi trung bình ở một node con khi cho một bộ vào cây quyết định: Decision Tree 43
  44. H6 Đánh giá độ lỗi tại một node[4] Kết quả cây được cắt tỉa như sau: Decision Tree 44
  45. H7 Cây được cắt tỉa[4] Node cha bị cắt tỉa sẽ thay thế node con như sau: • Nâng cây: H8 Nâng cây[4] • Thay bằng node lá có tầng số xuất hiện nhiều nhất so với các node còn lại. Decision Tree 45
  46. 4.2.2 Luật hậu cắt tỉa (Rule Post-Pruning) 2. Phương pháp: • Phát triển cây quyết định hoàn toàn phù hợp với tập huấn luyện. • Chuyển biểu diễn cây quyết định học được thành một tập các luật tương ứng (tạo một luật cho mỗi đường đi từ nút gốc đến một nút lá) • Rút gọn mỗi luật bằng cách loại bỏ bất kỳ điều kiện nào giúp mang lại sự cải thiện về hiệu quả phân loại của luật đó. • Sắp xếp các luật đã rút gọn theo hiệu quả phân loại, và sử dụng thứ tự này cho việc phân loại các mẫu trong tương lai. 3. Ta có ví dụ cụ thể như sau: H10 Thí dụ hậu cắt tỉa Chuyển thành luật: 1.IF( Outlook=sunny ^ humidity=high) THEN (Play = No ) 2. IF(Outlook=sunny ^ humidity=normal ) THEN(Play= Yes) 3. IF( Outlook=overcast ) THEN (Play= Yes) 4. IF(Outlook=rain ^ wind=strong ) THEN(Play= No) 5. IF(Outlook=rain ^ wind=weak ) THEN (Play=Yes) Xét luật số 1: ta có thể chia ra thêm thành 2 luật mới: 1.IF( Outlook=sunny ^ humidity=high) THEN (Play = No ) 2.IF( Outlook=sunny) THEN (Play = No ) Decision Tree 46
  47. 3.IF( Humidity=high) THEN (Play = No ) Ta đánh giá độ chính xác từng luật nếu luật nào có độ chính xác cao trên tập đánh giá thì ta chọn và loại bỏ các luật còn lại. H11 Cách chọn luật mới từ luật ban đầu Ta chọn luật IF( Outlook=sunny) THEN (Play = No ) vì có độ chính xác cao hơn 2 luật còn lại. 4. Tại sao phải chuyển cây quyết định sang luật? • Phân biệt giữa những ngữ cảnh khác nhau ở những node của cây quyết định được dùng. • Loại bỏ đi điểm khác biệt giữa những thuộc tính kiểm tra xảy ra gần node gốc của cây và xảy ra gần node lá của cây. • Cải thiện tính dễ đọc. Decision Tree 47
  48. 5. Cây quyết định mở rộng (Bùi Tuấn Phụng) 5.1 Oblivious Decision Trees Cây quyết định oblivious là cây quyết định mà tất cả các nút tại cùng cấp thì cùng tính năng. Mặc dù có những hạn chế, song cây quyết định oblivious rất hiệu quả trong việc lựa chọn tính năng. [ Almuallim và Deitterich (1994)] cũng như [ Schlimmer (1993)] đã đề xuất một thủ tục lựa chọn tính năng trước đây bằng cách xây dựng cây quyết định oblivious, trong khi đó [ Langley và Sage (1994)] đã đề nghị lựa chọn ngược cũng sử dụng cây quyết định oblivious. [ Kohavi và Sommerfield (1998)] đã chỉ ra rằng cây quyết định oblivious có thể chuyển thành một bảng quyết định. Gần đây [ Maimon và Last (2000)] đã đề nghị thuật toán mới IFN (Information Fuzzy Network) để xây dựng cây quyết định oblivious. 5. Vì sao phải xây dựng thuật toán IFN? • Ưu điểm: - Xây dựng IFN tương tự xây dựng cây quyết định. - IFN là một đồ thị có hướng chứ không phải là cây. - IFN sử dụng thông tin chung có điều kiện trong quá trình xây dựng cây, trong khi đó cây quyết định sử dụng số liệu Entropy hoặc Gini. - Chiều cao của IFN không thể vượt quá số lượng đầu vào. - Các mô hình IFN thường ổn định hơn, điều đó có nghĩa rằng những thay đổi nhỏ trong tập huấn luyện sẽ ảnh hưởng đến nó ít hơn trong các mô hình khác. • Nhược điểm: - Tuy nhiên độ chính xác của IFN thấp của cây quyết định. 6. Thuật toán: 6.1 Input: 6.1.1 Một danh sách các biến 6.1.2 Một danh sách tập huấn luyện 6.1.3 Một ý nghĩa thống kê tối thiểu được dùng để quyết định có phân chia nút đó hay không? (mặc định: 0.1%). 6.2 Tạo nút gốc và một lớp của biến mục tiêu. 6.3 Lặp lại cho đến khi sử dụng hết các thuộc tính hoặc không thể cải thiện hơn các thông tin chung điều kiện. 6.3.1 Tìm thuộc tính với thông tin chung có điều kiện lớn nhất. 6.3.2 Xác nhận sự tham gia của các thuộc tính có ý nghĩa thống kê bằng cách sử dụng các bộ kiểm tra tỷ lệ khả năng xảy ra. Decision Tree 48
  49. 6.3.3 Phân chia bất kỳ nút nào trong lớp trước đó mà tham gia vào các thuộc tính hiện tại với ý nghĩa thống kê. Nếu không, tạo một nút nối nút đó đến một trong các nút giá trị của biến mục tiêu dựa vào luật đa số. 6.4 Liệt kê danh sách các biến đã được sử dụng trong mạng lưới đó. Ví dụ: (Hình bên dưới) Trong hình này, mạng lưới bao gồm 2 lớp, đại diện cho 2 thuộc tính đầu vào (lớp 1 và lớp 2). - Thuộc tính đầu vào đầu tiên có 3 giá trị, được thể hiện bỡi các nút 1, 2, 3 trong lớp thứ 1. - Các nút 1 và 3 được phân chia bỡi thủ tục xây dựng mạng này. - Thuộc tính đầu vào thứ 2 có 4 nút là sự kết hợp của 2 giá trị trong thuộc tính đầu vào mà đã phân chia trong lớp đầu. - Lớp mục tiêu thể hiện thuộc tính mục tiêu với 3 giá trị. Dựa trên thuyết thông tin, thuận lợi chính của IFN là tính chặt chẽ. Trong cây quyết định thông thường, như CART , chiều cao của một cây quyết định có thể vượt quá số lượng các thuộc tính đầu vào. Nhưng trong IFN , chiều cao của một cây quyết định sẽ không bao giờ vượt quá số lượng thuộc tính đầu vào. [Pruning Irrelevant Features from Oblivious Decision Trees ] Trong hình 6.2 minh họa cho một loại cây quyết định oblivious với 4 tính năng đầu vào: mức đường huyết ( G), Tuổi ( A), Huyết áp ( H) và Mang thai ( P), tính năng Đúng/Sai thể hiện rằng bệnh nhân đó có bị tiểu đường hay không. Mỗi lớp là một kết hợp duy nhất với tính năng đ ầu vào bằng cách thể hiện sự tương tác của tính năng đó Decision Tree 49
  50. với các tính năng đầu vào của lớp trước. Các con số xuất hiện trong các nút cuối cùng chỉ ra số trường hợp phù hợp với đường đi này. Ví dụ: (Hình 6.2) Khảo sát một số bệnh nhân có mức đường huyết nhỏ hơn 107 và tuổi lớn hơn 50 thì kết quả nhận thấy rằng: cứ 10 người được chuẩn đoán xem có bị tiểu đường hay không thì 2 người không cần chuẩn đoán bệnh này. Trường hợp khác, khảo sát một số bệnh nhân có đường huyết lớn hơn hoặc bằng 107, tuổi nhỏ hơn hoặc bằng 30, có bị bệnh huyết áp và đang mang thai thì phải làm xét nghiệm tiểu đường. Tương tự cho các đường đi còn lại. Sự khác biệt chính trong cấu trúc của cây quyết định oblivious và cây quyết định thông thường là thứ tự hằng số của thuộc tính đầu vào tại mỗi nút cuối cùng của cây quyết định oblivious. Thuộc tính thứ hai là cần thiết cho việc giảm thiểu toàn bộ tập con của thuộc tính đầu vào (kết quả là giảm kích thước). Các dây cung mà kết nối các nút cuối cùng với các nút của lớp mục tiêu thì được gán nhãn với số lượng mẫu tin phù hợp với đường đi này. Một cây quyết định oblivious được xây dựng thường xuyên bằng thuật toán tham lam, cái mà cố gắng tối đa hóa các biện pháp thông tin lẫn nhau trong mỗi lớp. Tìm kiếm đệ qui các thuộc tính minh họa, sẽ dừng khi không có thuộc tính nào mà giải thích mục tiêu này với ý nghĩa thống kê. [5] 5.2 Fuzzy decision trees Decision Tree 50
  51. Hầu hết các phương pháp cây quyết định trước đây sử dụng để trích lọc tri thức trong các vấn đề phân loại sự không chắc chắn, nhận thức mơ hồ và không rõ ràng liên quan đến tư duy và nhận thức của con người. Một phương pháp cây quyết định mờ đầu tiên, mà dựa trên việc giảm phân loại mơ hồ với dấu hiệu mờ được phát triển. Cây quyết định mờ thể hiện việc phân loại kiến thức tự nhiên hơn là cách thức tư duy của con người và mạnh mẽ hơn trong việc tiếp cận thông tin không chính xác, xung đột và thiếu thông tin. Trong cây quyết định cổ điển, một trường hợp có thể được kết hợp với chỉ một nhánh của cây. Cây quyết định mờ (FDT ) có thể kết hợp đồng thời nhiều nhánh đến cùng một trường hợp. FDTs bảo tồn cấu trúc biểu tượng của cây và có thể hiểu được. Tuy nhiên, FDT có thể biểu diễn các khái niệm với các đặc trưng được phân chia bỡi giá trị thực đầu ra với việc thay đổi phân chia Janikow (1998) đã biểu diễn một khung hoàn chỉnh cho việc xây dựng cây mờ gồm một số hàm suy luận dựa trên việc giải quyết xung đột trong các hệ thống dựa theo luật và các phương pháp suy luận gần đúng hiệu quả. Olaru và Wehenkel (2003) đã hiện thực một cây quyết định mờ mới được gọi là cây quyết định mềm. Cách tiếp cận này vừa kết hợp việc phát triển cây và tỉa cây, để xác định cấu trúc của cây quyết định mềm, với việc trang bị lại và thích hợp hơn, để cải thiện khả năng khái quát của nó. Họ chỉ ra trong thực nghiệm rằng cây quyết định mềm chính xác hơn một cách đáng kể so với cây quyết định tiêu chuẩn. Hơn nữa, một mô hình nghiên cứu toàn cầu hợp lý cho thấy cây quyết định mềm có phương sai thấp hơn cây tiêu chuẩn như một nguyên nhân trực tiếp của tính chính xác việc cải tiến. Peng (2004) đã sử dụng FDT để cải thiện hiệu suất của phương pháp học tập quy nạp cổ điển trong quá trình sản xuất. Peng đã đề nghị sử dụng rời rạc mềm của các thuộc tính giá trị liên tục. Nó đã được chỉ ra rằng FDT có thể đối phó với nhiễu hoặc không chắc tồn tại trong các dữ liệu thu thập được của hệ thống công nghiệp. [5] 5.3 Decision Trees Inducers for Large Datasets Với sự tăng trưởng gần đây về số lượng dữ liệu được thu thập bởi các hệ thống thông tin, có một nhu cầu cho cây quyết định mà có thể xử lý những tập dữ liệu lớn. [ Catlett (1991)] đã xem xét hai phương pháp cho cây quyết định tăng trưởng hiệu quả từ một cơ sở dữ liệu lớn bằng cách giảm các yêu cầu được tính toán phức tạp cho phương pháp quy nạp. Tuy nhiên, phương pháp Catlett yêu cầu rằng tất cả dữ liệu phải được đưa vào bộ nhớ chính trước khi được tính toán. Cụ thể, tập dữ liệu lớn nhất mà có thể được tính toán thì được giới hạn một kích thướt bộ nhớ. [ Fifield (1992)] đề nghị một sự bổ sung tương đương của thuật toán ID3. Tuy nhiên, cũng giống như Catlett, nó giả định rằng tất Decision Tree 51
  52. cả các tập dữ liệu có thể phù hợp với bộ nhớ chính. [ Chan và Stolfo (1997)] đề nghị phân chia các tập dữ liệu thành các tập dữ liệu rời rạc để mỗi tập dữ liệu được tải một cách riêng biệt vào bộ nhớ và được sử dụng để tạo ra cây quyết định. Cây quyết định sau đó được kết hợp để tạo ra một phân loại duy nhất. Tuy nhiên, các kết quả thử nghiệm cho thấy rằng việc phân chia có thể làm giảm hiệu suất phân loại. Điều này có nghĩa là tính chính xác phân loại của cây quyết định kết hợp là không tốt như trên cây quyết định đơn được xây dựng trên toàn tập dữ liệu. Thuật toán SLIQ (Mehta , 1996) không bắt buộc phải tải toàn bộ tập dữ liệu vào bộ nhớ chính, thay vào đó nó sử dụng bộ nhớ thứ cấp (bộ nhớ đĩa). Nói cách khác, một trường hợp nào đó không nhất thiết phải cư trú trong bộ nhớ chính tại mọi thời điểm. SLIQ tạo ra một cây quyết định duy nhất từ toàn bộ tập dữ liệu. Tuy nhiên, phương pháp này cũng có một giới hạn đối với tập dữ liệu lớn nhất mà có thể đã được xử lý, bởi vì nó sử dụng cấu trúc dữ liệu mà phân chia kích thướt tập dữ liệu và cấu trúc dữ liệu này luôn luôn phải được cư trú trong bộ nhớ chính.Thuật toán SPRINT sử dụng cách tiếp cận tương tự (Shafer , 1996). Thuật toán này xây dựng các cây quyết định tương đối nhanh và khắc phục các hạn chế về bộ nhớ của cây quyết định quy nạp. SPRINT đánh dấu bất kỳ nhiễu nào được chia nhỏ dựa trên các bộ dữ liệu lớn. ( Gehrke , 2000) đã giới thiệu RainForest; một khung đồng nhất cho các phân lớp cây quyết định mà có khả năng nhân rộng bất kỳ thuật toán cụ thể nào từ tài liệu này (gồm: C4 .5, CART và CHAID ). Hơn nữa để tổng quát, RainForest cải tiến SPRINT bằng một nhân tố của 3. Ngược lại với SPRINT , tuy nhiên, RainForest yêu cầu một số lượng nhỏ bộ nhớ chính, tương ứng với tập của các giá trị khác nhau trong một cột của mối quan hệ đầu vào. Tuy nhiên, yêu cầu này được coi là vừa phải và hợp lý.Cây quyết định kết luận cho các tập dữ liệu lớn có thể tìm thấy trong các tài liệu ( Alsabti , 1998; Freitas và Lavington , 1998; Gehrke, 1999). [5] 5.4 Incremental Induction: Hầu hết các cây quyết định kết luận đều yêu cầu xây dựng lại cây từ những cái linh tinh ứng với dữ liệu mới mà đã có sẵn. một số nghiên cứu đã giải quyết được các vấn đề về cập nhật các cây quyết định tăng trưởng. ( Utgoff , 1989b,1997) trình bày một số phương pháp để cập nhật cây quyết định tăng trưởng. Mở rộng của thuật toán CART là khả năng gây tăng trưởng được mô tả trong ( Crawford , 2002). [5] Decision Tree 52
  53. 6. Demo (Phan Hoàn Vũ) 6.1 WEKA 6.1.1 Sơ lược về weka Weka là một bộ công cụ phần mềm mã nguồn mở rất nổi tiếng trong lĩnh vực khai thác dữ liệu và máy học được phát triển bởi Đại học Waikato ở New Zealand. Nó là tập hợp của rất nhiều các thuật toán máy học phục vụ mục đích khai thác dữ liệu. Các thuật toán có thể được chạy trực tiếp trên các bộ dữ liệu đưa vào hoặc gọi từ ứng dụng của người dùng (viết bằng Java). Weka bao gồm các công cụ để tiền xử lý dữ liệu, phân loại, hồi qui, gom nhóm, khai thác luật kết hợp và một giao diện đồ họa để biểu diễn các kết quả. Ngoài ra, Weka còn hỗ trợ các nhà nghiên cứu một môi trường thực nghiệm tiện dụng để phát triển các mô hình, thuật toán máy học mới. Giao diện đồ họa của Weka. 6.1.2 Các chức năng chính Weka cung cấp 4 môi trường chính để thao tác với các thuật toán máy học. Các môi trường này bao gồm: console, explorer, experimenter, knowledage flow. Trong đó Explorer là môi trường thể hiện đầy đủ các phương tiện để thao tác với dữ liệu và các thuật toán máy học được cung cấp bởi Weka. Các thành phần còn lại là tương tự như explorer. Do đó, trong khuôn khổ của phần này nhóm sẽ tập trung giới thiệu chi tiết Explorer và đi sơ lược chức năng các phần còn lại của Weka. Decision Tree 53
  54. 6.1.2.1 Explorer Cung cấp một giao diện người dùng tiện dụng cho việc thực thi các thuật toán máy học trên bộ dữ liệu người dùng đưa vào. Giao diện đồ họa của explorer Các thành phần chính của môi trường này bao gồm:  Preprocess: Chứa các công cụ tiền xử lý dữ liệu  Classify: Môi trường thực thi các thuật toán thuộc nhóm phân lớp dữ liệu  Cluster: Môi trường thực thi các thuật toán thuộc lớp gom nhóm dữ liệu  Associate: Môi trường thực thi các thuật toán khai thác các luật kết hợp  Select attributes: Cung cấp khả năng tìm và chọn những attributes có hiệu năng sử dụng cao nhất  Visualize: Cung cấp môi trường hiển thị các thống kê dữ liệu đầu vào của người dùng trên giao diện đồ họa 2D Các thành phần này tương ứng với các tab trong màn hình ứng dụng. Decision Tree 54
  55. CHI TIẾT PREPROCESS : Giữ nhiệm vụ tiền xử lý dữ liệu cho các thuật toán máy học. Dữ liệu có thể được người dùng import từ nhiều nguồn khác nhau: ARFF file, URL hoặc database. Dữ liệu sau khi được load vào chương trình có thể được filter trước khi thực hiện các thuật toán. Weka cung cấp rất nhiều giải pháp filter dữ liệu, tùy nhu cầu khảo sát mà chọn các thuật toán thích hợp: discretization, normalization, resampling, attribute selection, transforming and combining attributes Giao diện chính của chức năng Pre-processing CLASSIFIER Classifier cung cấp các mô hình để dự đoán các phân lớp dựa trên các thuật toán phân loại máy học cơ bản: Decision trees và lists, instance-based classifiers, support vector machines, multi-layer perceptrons, logistic regression, Bayes’ nets Decision Tree 55
  56. Giao diện chính của chức năng classify CLUSTER Cung cấp khả năng gom nhóm dữ liệu liên quan với nhau thành các nhóm riêng biệt dựa vào các thuật toán máy học cơ bản hiện nay: k-Means, EM, Cobweb, X-means, FarthestFirst. Giao diện chính của chức năng clustering Decision Tree 56
  57. ASSOCIATE Chức năng này cho phép huấn luyện các luật kết hợp dựa trên việc chọn lựa các thuật toán máy học sẳn có: Apriori, FPGrowth Các thuật toán khai thác dữ liệu này cần phải được cung cấp các giá trị như min_sup (độ support tối tiểu), min_conf (độ tin cậy tối tiểu) để hoạt động. Điều đáng lưu ý là các thuật toán này chỉ hoạt động với dữ liệu rời rạc. Do đó nếu dữ liệu vào là liên tục, chương trình sẽ không cho phép thực thi chức năng này. Giao diện chính của chức năng associate SELECT ATTRIBUTES Cung cấp khả năng rút trích, chọn lọc các thuộc tính “tốt” nhất (theo ý nghĩa có khả năng phân loại, dự đoán tốt nhất). Các phương pháp chọn lọc attribute bao gồm 2 phần:  Search method: best-first, forward selection, random, exhaustive, genetic algorithm, ranking  Evaluation method: correlation-based, wrapper, information gain, chi- squared Decision Tree 57
  58. Giao diện chính chức năng select attributes VISUALIZE Visialization là một module đóng vai trò rất quan trọng trong thực nghiệm, giúp đánh giá được độ khó của việc học. Visualization thể hiện được mối liên hệ giữa các giá trị của 1attribute (1D) hoặc 2 attributes (2D) Giao diện chính chức năng visualize Decision Tree 58
  59. 6.1.2.2 Experimenter Cung cấp môi trường thuận tiện cho việc tạo và thực thi các thí nghiệm liên quan đến các thuật toán máy học. Ví dụ, người dùng có thể tạo ra 1 thử nghiệm để tiến hành chạy các thuật toán khác nhau trên cùng 1 bộ dữ liệu đầu vào, sau đó kiểm tra, so sánh kết quả đạt được để chọn ra thuật toán có kết quả tốt nhất. Thao tác trong môi trường này hoàn toàn tương tự như thao tác trong môi trường Explorer đã trình bày ở trên. Giao diện chính của môi trường Experimenter 6.1.2.3 KnowledgeFlow Là một thành phần mở rộng và nâng cao của Explorer. KnowledgeFlow cung cấp một môi trường lý tưởng để xây dựng một chuỗi các hoạt động liên quan đến việc thực nghiệm một hay nhiều thuật toán máy học. Người sử dụng có thể chọn các thành phần từ toolbar như datasource, data loader, classifier, Decision Tree 59
  60. cluster, sau đó đặt chúng lên màn hình giao diện, và kết nối chúng lại với nhau tạo thành một flow thống nhất để phân tích và xử lý dữ liệu. Dưới đây là hình ảnh minh họa cho việc xây dựng một chuỗi thao tác học máy trong môi trường knowledage flow của weka. Giao diện chính của môi trường Knowledage-Flow 6.1.2.4 Simple CLI Cung cấp khả năng thực thi các thuật toán máy học bằng các thao tác dòng lệnh command line. Dòng lệnh cơ bản để thao tác với các thuật toán máy học là: java [ > file] có nhiệm vụ gọi thực thi java class với các tham số nếu có Decision Tree 60
  61.  break : dừng thread hiện hành. Dùng để dừng các thao tác không mong muốn trước đó  kill : dừng lại và xóa thread hiện hành. Xóa các thao tác đang thực thi trước đó  capabilities : cho phép xem description của các java class trong hệ thống weka  cls : xóa màn hình hiện tại  history : xem lại lịch sử các lần chạy chương trình  exit : thoát khỏi weka simple CLI  help : cung cấp cái nhìn tổng quát cho tất cả các dòng lệnh ở chế độ simple CLI Ví dụ: Chạy dòng lệnh sau: java weka.classifiers.trees.J48 -t test.arff > j48.txt Kết quả thực thi được xuất ra file j48.txt Giao diện chính của môi trường console Decision Tree 61
  62. 6.1.3 Demo sử dụng Weka Explorer Trong phần này sẽ trình bày cách sử dụng Weka để xây dựng cây quyết định C4.5 sử dụng dữ liệu play tennis. Dữ liệu được nhập từ file tennis.arff . Các bước thực hiện huấn luyện như sau: a. Nhập dữ liệu Nhấn Open file để import file dữ liệu b. Hiệu chỉnh dữ liệu Hiệu chỉnh dữ liệu để đáp ứng yêu cầu của bài toán Decision Tree 62
  63. c. Chọn thuật toán huấn luyện Chú ý ở đây ta chọn J48 vì Weka implement một thuật toán dựa trên C4.5 gọi nó J48 để giải quyết một số vần đề implement của thuật toán C4.5 Decision Tree 63
  64. d. Cấu hình training set Chọn bộ dữ liệu test thích hợp để test cây sau khi huấn luyện và tính độ lỗi, tỉa cây e. Start training Nhấn Start để bắt đầu huấn luyện cây Decision Tree 64
  65. f. Xem kết quả Kết quả được hiển thị ở khung Classifier Output. Sử dụng scrollbar để xem kết quả đầy đủ. Cây quyết định kết quả có thể được view ở dạng Cây 1 cách trực quan bằng cách thực hiện như hình vẽ trên. Cây quyết định sau khi chạy có dạng như sau: Decision Tree 65
  66. 6.2 Ứng dụng xây dựng 6.2.1 Ứng dụng xây dựng cây quyết định đơn giản 6.2.1.1 Mô tả ứng dụng  Ứng dụng xây dựng cây quyết định dựa trên thuật toán ID3 và C4.5.  Dữ liệu training và testing được import từ file ARFF (theo chuẩn của WEKA).  Kết quả huấn luyện xuất ra màn hình console. 6.2.1.2 Công cụ sử dụng:  Ngôn ngữ lập trình sử dụng: JAVA.  Công cụ lập trình: Eclipse  Framework sử dụng: apache common-lang (để xử lý các thao tác cơ bản trên String) 6.2.1.3 Kết quả thực hiện: Đối với thuật toán ID3 chương trình cho kết quả tương tự như các cây quyết định xây dựng bằng WEKA phiên bản 3.7.5. Tuy nhiên đối với thuật toán C4.5 chỉ xử lý được trên dữ liệu rời rạc. Và không thể so sánh với WEKA vì WEKA không implement thuật toán C4.5 một cách thuần túy. Dưới đây là một số màn hình console thể hiện kết quả huấn luyện: Decision Tree 66
  67. Màn hình thể hiện kết quả huấn luyện cây dự đoán chơi tennis bằng thuật toán C4.5 Decision Tree 67
  68. Màn hình thể hiện kết quả huấn luyện cây dự đoán chơi tennis bằng thuật toán ID3 6.2.2 Ứng dụng lọc thư rác 6.2.2.1 Mô tả ứng dụng  Ứng dụng là một hệ thống web /webservice cung cấp khả năng phân biệt email rác với email thông thường.  Hệ thống có thể dễ dàng tích hợp với các hệ thống mail server, hoặc outlook thông qua cơ chế webservice. 6.2.2.2 Công cụ sử dụng:  Ngôn ngữ lập trình sử dụng: JAVA. Decision Tree 68
  69.  Framework sử dụng: - Apache common-lang : dùng để xử lý các thao tác cơ bản trên String - Grails: web framework dùng để xây dựng web/web service framework. - Weka core: dùng để tiền xử lý dữ liệu huấn luyện và cây quyết định - ExtJS: javascript framework dùng để vẽ giao diện màn hình web  Dữ liệu huấn luyện được lấy từ website .  Công cụ lập trình: Eclipse 6.2.2.3 Kết quả thực hiện: Kết quả thực hiện được demo ở dạng video được lưu trữ trên Mediafire server: Decision Tree 69
  70. Tài liệu tham khảo [1] [2] Nguyễn Thị Hạnh, T.S Hồ Cẩm Hà, “Khai phá dữ liệu bằng cây quyết định”, 2008 [3] Nguyễn Thị Thùy Linh, “Nghiên cứu các thuật toán phân lớp dữ liệu dựa trên cây quyết định” , 2005. [4] slide của Prof. Pier Luca Lanzi trong file DM2012-07-ClassificationTrees.pdf [5] Lior Rokach, Oded Maimon, “Decision Tree” , Data mining and knowlegde discovery handbook, 2010. [6] [7] tory.seasr.org/Datasets/UCI Decision Tree 70