Thuật toán ID3

Một phần của tài liệu Khai phá dữ liệu có canh tác dữ liệu và ứng dụng trong khai phá dữ liệu y khoa luận văn thạc sĩ (Trang 53)

3.2.1.1 Lịch sử phát triển

Thuật toán ID3 là một trong những thuật toán trong khai phá dữ liệu. Là một thuật toán học đơn giản nhưng tỏ ra thành công trong nhiều lĩnh vực. ID3 là một thuật toán hay vì cách biểu diễn tri thức học được của nó, tiếp cận của nó trong việc quản lý tính phức tạp, heuristic của nó dùng cho việc chọn lựa các khái niệm ứng viên, và tiềm năng của nó đối với việc xử lý dữ liệu nhiễu. ID3 biểu diễn các khái niệm ở dạng các cây quyết định. Biểu diễn này cho phép chúng ta xác định phân loại của một đối tượng bằng cách kiểm tra các giá trị của nó trên một số thuộc tính nào đó.

Thuật toán ID3 được phát biểu bởi 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 ID3 đượ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 thuật toán CLS(CLS được Hovland và Hint giới thiệu trong Concept learning System vào những năm 50 của thế kỷ 20) 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) [6].

3.2.1.2 Mã giã giải thuật ID3

Thuật toán được mô tả đơn giản như sau:

Function induce_tree (tập_ví dụ, tập thuộc tính) BEGIN

If mọi ví dụ trong tập_ví_vụ đều nằm cùng một lớp then

Return một nút lá được gán nhãn bởi lớp đó

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 tap_thuộc_tính;

Với mỗi giá trị V của P

Begin

Tạo một nhãn của cây gán nhãn V;

Đặt vào phan_vùngV các ví dụ trong tập_ví_dụ có giá trị V tại thuộc tính P;

Gọi induce_tree (phân_vùngV, tập thuộc tính), gắn kết quả vào nhánh V

End END END

3.2.1.4 Lựa chọn thuộc tính kiểm tra

Một vấn đề phát sinh là chúng ta xuất phát từ Root thì thuộc tính nào cần được xem xét để thêm các node tiếp theo? Để xem xét điều này người ta đưa ra hai thông số quan trọng sau [10]:

Entropy : Một đánh giá thường được sử dụng trong lĩnh vực lí thuyết thông

tin(Information Theory) nhằm đánh giá mức độ phức tạp ((im)purity/ inhomogeneity) của một tập S. Entropy của một tập S được tính theo công thức:

Entropy(S)= - P+ log2p+ - P- log2P - (3.1)

Trong trường hợp các mẫu dữ liệu có hai thuộc tính phân lớp "yes" (+), "no" (-). Ký hiệu p+ là để chỉ tỷ lệ các mẫu có giá trị của thuộc tính quyết định là "yes", và p- là tỷ lệ các mẫu có giá trị của thuộc tính quyết định là "no" trong tập S.

Trường hợp tổng quát, đối với tập con S có c phân lớp thì ta có công thức sau:

Trong đó pi là tỷ lệ các mẫu thuộc lớp i trên tập hợp S các mẫu kiểm tra. Các trường hợp đặc biệt:

- Nếu tất cả các mẫu thành viên trong tập S đều thuộc cùng một lớp thì Entropy(S) =0

- Nếu trong tập S có số mẫu phân bổ đều nhau vào các lớp thì Entropy(S) =1

- Các trường hợp còn lại 0 < Entropy(S) < 1 (adsbygoogle = window.adsbygoogle || []).push({});

Ý nghĩa của entropy trong lĩnh vực lí thuyết thông tin: Entropy của tập S chỉ ra số lượng bits cần thiết để mã hóa lớp của một phần tử được lấy ra ngẫu nhiên từ tập S.

b.Information Gain (viết tắt là Gain):

Information Gain của một thuộc tính đối với một tập các ví dụ là đại lượng dùng để đo mức độ giảm mong đợi của Entropy bằng việc phân chia (partitioning) các ví dụ theo các giá trị của thuộc tính đó.

Cho tập dữ liệu S gồm có n thuộc tính Ai (i=1, 2…n) giá trị Gain của thuộc tính A trong tập S ký hiệu là Gain(S, A) và được tính theo công thức sau:

Trong đó:

S là tập hợp ban đầu với thuộc tính A Các giá trị của v tương ứng là các giá trị của thuộc tính A.

Sv bằng tập hợp con của tập S mà có thuộc tính A mang giá trị v.

|Sv| là số phần tử của tập Sv.

|S| là số phần tử của tập S.

Trong công thức trên, thành phần thứ 2 thể hiện giá trị Entropy sau khi tập S được phân chia bởi các giá trị của thuộc tính A sau khi tập S được phân chia bởi các giá trị của thuộc tính A.

Ý nghĩa của Gain(S, A): Số lượng bits giảm được (reduced) đối với việc mã hóa lớp của một phần tử được lấy ra ngẫu nhiên từ tập S, khi biết giá trị của thuộc tính A.

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 triển khai 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.

Ví dụ minh họa: [10]

Xét ví dụ quyết định chơi hay không chơi Tennis. Các thuộc tính được mô tả như bảng 3.1

Day Outlook Temperature Humidity Wind Play Tennis

D1 Sunny Hot High Weak No

D2 Sunny Hot High Strong No

D3 Overcast Hot High Weak Yes

D4 Rain Mid High Weak Yes

D5 Rain Cool Normal Weak Yes

D6 Rain Cool Normal Strong No

D7 Overcast Cool Normal Strong Yes

D8 Sunny Mid High Weak No

D9 Sunny Cool Normal Weak Yes

D10 Rain Mid Normal Weak Yes

D11 Sunny Mid Normal Strong Yes

D12 Overcast Mid High Strong Yes

D13 Overcast Hot Normal Weak Yes

D14 Rain Mid High Strong No

Chúng ta sẽ thử tính giá trị Information Gain của thuộc tính Wind đối với tập học S – Gain(S, Wind): (adsbygoogle = window.adsbygoogle || []).push({});

Thuộc tính Wind có 2 giá trị có thể: Weak và Strong; S = {9 ví dụ lớp Yes và 5 ví dụ lớp No}; Sweak = {6 ví dụ lớp Yes và 2 ví dụ lớp No có giá trị Wind=Weak}; Sstrong= {3 ví dụ lớp Yes và 3 ví dụ lớp No có giá trị Wind=Strong}

Tính : Entropy(S)=Entropy([9+,5-])= -9/14log29/14-5/14log25/14=0.94

Gain(S,A)=Entropy(S) -

= Entropy(S)- (8/14).Entropy(Sweak) – (6/14).Entropy(Sstrong) = 0.94-(8/14).(0.81)-(6/14).(1)=0.048

Tại nút gốc, thuộc tính nào trong số {Outlook, Temperature, Humidity, Wind} nên được chọn là thuộc tính kiểm tra?

• Gain(S, Outlook) = ... = 0.246; Có giá trị Information Gain cao nhất • Gain(S, Temperature) = ... = 0.029

• Gain(S Humidity) = = 0.151 Gains(S, Humidity) = ... = 0.151 • Gain(S, Wind) = ... = 0.048

Vì vậy, Outlook được chọn là thuộc tính kiểm tra cho nút gốc như hình 3.3:

Kế đến, tại nút Node1, thuộc tính nào trong số {Temperature, Overcast, Sunny, Humidity, Wind} nên được chọn là thuộc tính kiểm tra?

Lưu ý! Thuộc tính Outlook bị loại ra bởi vì nó đã được sử dụng bởi cha của nút Node1 (là nút gốc)

• Gain(S Sunny, Temperature) =...= 0.57 • Gain(S Sunny, Humidity) = ... = 0.97 • Gain(S Sunny, Wind) = ... = 0.019

Vì vậy, Humidity được chọn là thuộc tính kiểm tra cho nút Node1 như hình 3.4:

.

Hình 3.3 Tạo Node gốc Outlook

3.2.1.5 Một vài ưu khuyết điểm của thuật toán ID3

Ưu điểm của thuật toán ID3:

- Sử dụng thuật tìm kiếm leo đồi (hill - climbing) dựa trên giá trị Gain để tìm kiếm các thuộc tính trong toàn bộ Cây quyết định.

- Đầu ra (Output) chỉ là một giả thuyết đơn (1 kết quả duy nhất). - Sử dụng dữ liệu huấn luyện ở từng bước, trái ngược với những thuật

giải phát triển mở rộng cây quyết định (có thể hạn chế được kích thước Cây không quá lớn).

- Sử dụng các thuộc tính tĩnh: hạn chế tối đa lỗi cho những bản ghi dữ liệu riêng lẻ, có thể ảnh hưởng tới toàn bộ dự án.

- Kiểm soát được dữ liệu rác, dữ liệu tạp bên ngoài bằng cách giảm bớt yêu cầu tiêu chuẩn cho việc chấp nhận những dữ liệu chưa hoàn chỉnh.

Những khuyết điểm của thuật toán ID3 :

- Không Xử lý các thuộc tính có kiểu giá trị liên tục (kiểu số thực). - Không thích ứng được với những tập dữ liệu tạp (dễ phát sinh lỗi). - Không hiệu quả khi xuất hiện những dữ liệu không mong muốn. - Cây quyết định khi sinh ra lớn, rườm rà, chưa được tối ưu ở mức tối

đa có thể.

- Cây quyết định học được quá phù hợp (over-fit) với các ví dụ.

- Không có khả năng xử lý các ví dụ học thiếu giá trị thuộc tính (missing-value attributes).

3.2.2 Thuật toán C4.5 3.2.2.1 Lịch sử phát triển 3.2.2.1 Lịch sử phát triển

C4.5 là sự kế thừa của của thuật toán học máy bằng cây quyết định dựa trên nền tảng là kết quả nghiên cứu của HUNT và các cộng sự của ông trong nửa cuối thập kỷ 50 và nửa đầu những năm 60 (Hunt 1962). Phiên bản đầu tiên ra đời là ID3 (Quinlan, 1979) - 1 hệ thống đơn giản ban đầu chứa khoảng 600 dòng lệnh Pascal, và tiếp theo là C4 (Quinlan 1987). Năm 1993, J. Ross

Quinlan đã kế thừa các kết quả đó phát triển thành C4.5 với 9000 dòng lệnh C chứa trong một đĩa mềm. Mặc dù đã có phiên bản phát triển từ C4.5 là C5.0 - một hệ thống tạo ra lợi nhuận từ Rule Quest Research, nhưng nhiều tranh luận, nghiên cứu vẫn tập trung vào C4.5 vì mã nguồn của nó là sẵn dùng [10].

3.2.2.2 Mã giã của thuật toán C4.5 (adsbygoogle = window.adsbygoogle || []).push({});

Thuật toán C4.5 được cải tiến từ thuật toán ID3 với việc cho phép xử lý trên tập dữ liệu có các thuộc tính số (numeric atributes) và làm việc được với tập dữ liệu bị thiếu và bị nhiễu. 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ét tất cả các phép thử có thể để phân chia tập dữ liệu đã cho và chọn ra một phép thử có giá trị GainRatio tốt nhất. GainRatio là một đại lượng để đánh giá độ hiệu quả của thuộc tính dùng để thực hiện phép tách trong thuật toán để phát triển cây quyết định. GainRatio được tính dựa trên kết quả tính toán đại lượng Information Gain theo công thức sau:

( , ) ( , ) ( X , T ) G a i n X T G a i n R a t i o n X T S p l i t I n f o = (3.4) Với: i 2 i i Value(X) |T | |T | info(X,T) = - log | | | | Split T T ∉ ∑ (3.5) Trong đó:

Value(X) là tập các giá trị của thuộc tính X

Ti là tập con của tập T ứng với thuộc tính X = giá trị là vi.

Đối với các thuộc tính liên tục, chúng ta tiến hành phép thử nhị phân cho mọi giá trị của thuộc tính đó. Để thu thập được giá trị Entropy gain của tất cả các phép thử nhị phân một cách hữu hiệu ta tiến hành xắp xếp các dữ liệu theo giá trị của thuộc tính liên tục đó bằng thuật toán Quicksort

Mô tả thuật toán dưới dạng giả mã như sau [6]:

{

1. <Tính toán tần xuất các giá trị trong các lớp của T>;

2. If <Kiểm tra các mẫu, nếu thuộc cùng một lớp hoặc có rất ít mẫu khác lớp>Then <Trả về 1 nút lá>

Else <Tạo một nút quyết định N>;

3. For <Với mỗi thuộc tính A> Do <Tính giá trị Gain(A)>;

4. <Tại nút N, thực hiện việc kiểm tra để chọn ra thuộc tính có giá trị Gain tốt nhất (lớn nhất). Gọi N.test là thuộc tính có Gain lớn nhất>;

5. If <Nếu N.test là thuộc tính liên tục> Then <Tìm ngưỡng cho phép tách của N.test>;

6. For <Với mỗi tập con T` được tách ra từ tập T> 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. )

7. { If <Kiểm tra, nếu T' rỗng>} Then <Gán nút con này của nút N là nút lá>; Else

8. <Gán nút con này là nút được trả về bằng cách gọi đệ qui lại đối với hàm xay_dung_cay(T'), với tập T'>;

}

9. <Tính toán các lỗi của nút N>; <Trả về nút N>; } Một số công thức được sử dụng n i x i i=1 T Info (T)=- * Info(T ) T ∑ (3.6) X ( ) Info(T)-Info ( ) Gain X = T (3.7)

(3.7) được sử dụng làm tiêu chuẩn để lựa chọn thuộc tính khi phân lớp. Thuộc tính được chọn là thuộc tính có giá trị Gain tính theo (3.7) đạt giá trị lớn nhất.

3.2.2.3 Một số cải tiến của thuật toán C4.5

-Mạnh mẽ khi gặp những dữ liệu tạp, có khả năng phòng tránh hiện tượng Overfitting : là hiện tượng lượng dữ liệu không cần thiết (hoàn toàn có thể loại bỏ) vẫn được đưa vào Cây khiến cho kết quả trả về không tối ưu, cây lớn và rườm rà. Ở các thuật toán tiên tiến hơn, vấn đề này đã được giải quyết, kết quả trả về cuối cùng sẽ được tối ưu hóa hơn.

-Thích hợp được với các dữ liệu liên tục

-Có thể chuyển đổi từ Cây quyết định thành các Luật

-Làm việc với thuộc tính đa trị : Tiêu chuẩn (2.7) có một khuyết điểm là không chấp nhận các thuộc tính đa trị. Vì vậy thuật toán C4.5 đã đưa ra các đại lượng GainRatio và SplitInfo (SplitInformation), chúng được xác định theo các công thức sau:

freq C T( j, ) P S = n i 2 i=1 T Info (X) =- log T i T Split T       ∑ (3.8) ( ) ( ) Info(X) Gain X GainRatio X Split = (3.9)

Giá trị SplitInfo là đại lượng đánh giá thông tin tiềm năng thu thập được khi

phân chia tập T thành n tập hợp con. (adsbygoogle = window.adsbygoogle || []).push({});

GainRatio là tiêu chuẩn để đánh giá việc lựa chọn thuộc tính phân loại.

- Làm việc với dữ liệu bị thiếu, bị nhiễu: Thuật toán vừa 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 đư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. Giả sử T là một tập hợp gồm các mẫu cần được phân loại, X là phép kiểm tra theo thuộc tính L, U là số lượng các giá trị bị thiếu của thuộc tính L. Khi đó ta có k j 2 j=1 freq(C ,T) ( , ) Info(T) = - *log |T|-U | | j freq C T T U    −    ∑ (3.10) x n 2 j=1 |T| Info (T) = - *log ( ) |T|-U Ti ∑ (3.11)

Trong trường hợp này, khi tính tần số freq (Ci, T) ta chỉ tính riêng các mẫu với giá trị trên thuộc tính L đã xác định. Khi đó tiêu chuẩn (2.11) được viết lại bằng công thức (3.12) như sau:

( ) | | (Info(T)-Info ( ))x | | T U Gain X T T − = (3.12)

Tương tự thay đổi tiêu chuẩn (3.12). Nếu phép kiểm tra có N giá trị đầu vào thì tiêu chuẩn (3.12) được tính như trong trường hợp chia N tập hợp ban đầu thành (N+1) tập hợp con.

Giả sử phép thử X có các giá trị O1, O2….On được lựa chọn theo tiểu chuẩn (3.12), ta cần xử lý như thế nào với các dữ liệu bị thiếu. Giả sử mẫu từ tập hợp T với đầu ra là Oi có liên quan đến tập hợp Ti thì khả năng mẫu đó thuộc tập hợp Ti là 1.

Giả sử mỗi mẫu trong Ti có một chỉ số xác định xác suất thuộc tập hợp Ti. Nếu mẫu có giá trị thuộc tính L thì có trọng số bằng 1. Nếu trong trường hợp ngược lại, thì mẫu này liên quan đến tập con T1,T2,…Tn với xác xuất tương ứng là :

1 , 2 ,...,

| | | | | |

n

T T T

TU TU TU

Ta có thể dễ dàng thấy được rằng tổng các xác xuất này bằng 1.

1 1 n i i T T U = = − ∑

Tóm lại giải pháp này được phát biểu như sau: xác suất xuất hiện của các giá trị bị thiếu tỷ lệ thuận với xác suất xuất hiện của các giá trị không thiếu.

Qua tìm hiểu trên ta thấy thuật toán C4.5 là cải tiến của thuật toán ID3 khắc phục những khiếm khuyết của thuật toán ID3.

3.2.3. Thuật toán SPRINT

3.2.3.1 Lịch sử phát triển

Năm 1996, 3 tác giả John Shafer, Rakesh Agrawal, Manish Mehta thuộc IBM Almaden Research Center đã đề xuất một thuật toán mới với tên gọi SPRINT (Scalable PaRallelization INduction of decision Trees). SPRINT ra đời đã loại bỏ tất cả các giới hạn về bộ nhớ, thực thi nhanh và có khả năng mở rộng. Thuật toán này được thiết kế để dễ dàng song song hóa, cho phép nhiều bộ vi xử lý cùng làm việc đồng thời để xây dựng một mô hình phân lớp đơn, đồng nhất. Hiện nay SPRINT đã được thương mại hóa, thuật toán này

Một phần của tài liệu Khai phá dữ liệu có canh tác dữ liệu và ứng dụng trong khai phá dữ liệu y khoa luận văn thạc sĩ (Trang 53)