Tải bản đầy đủ
2 Các thuật toán KPDL bằng cây quyết định

2 Các thuật toán KPDL bằng cây quyết định

Tải bản đầy đủ

21

Từ rất lâu, người ta đã quan tâm đến việc phân loại dữ liệu bằng cây quyết
định. Mỗi cách phân loại được ghi chép lại và sau đó được công bố như là một kỹ
thuật KPDL. Mỗi kỹ thuật theo thời gian và theo nhu cầu cần sử dụng đã dần bộc lộ
những điểm mạnh và điểm yếu của mình, cũng như không ngừng được cải tiến để
phục vụ mục đích KPDL.
2.2.1 Thuật toán CLS
Xây dựng cây quyết định lần đầu tiên được Hoveland và Hint giới thiệu trong
Concept Learning System (CLS) vào cuối 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 và gồm các bước sau:
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 có thuộc tính quyết định mang giá trị "yes"

(hay thuộc cùng một lớp), 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á.
3)

Nếu tất cả các mẫu trong T có thuộc tính quyết định mang giá trị

"no" (hay thuộc cùng một lớp), 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á.
4) 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ì:
i. 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,v2, …vn.
ii. Chia tập mẫu trong T thành các tập con T 1, T2,….,Tn. chia theo
giá trị của X.
iii. Tạo n nút con Ti (i=1,2…n) với nút cha là nút T.
iv. Tạo các nhánh nối từ nút T đến các nút Ti (i=1,2…n)
5)

Thực hiện lặp cho các nút con Ti(i =1,2..n) và quay lại bước 2.

22

Ví dụ: Cho tập dữ liệu huấn luyện thể hiện trong bảng dữ liệu 2.2, xây dựng
cây quyết định đi chơi tennis.
Day

Outlook

Temparature

Humidity

Wind

Play tennis

D1

Sunny

Hot

High

Weak

No

D2

Sunny

Hot

High

Strong

No

D3

Overcast

Hot

High

Weak

Yes

D4

Rain

Mild

High

Weak

Yes

D5

Rain

Cool

Normal

Weak

Yes

D6

Rain

Cool

Normal

Strong

No

D7

Overcast

Cool

Normal

Strong

Yes

D8

Sunny

Mild

High

Weak

No

D9

Sunny

Cool

Normal

Weak

Yes

D10

Rain

Mild

Normal

Weak

Yes

D11

Sunny

Mild

Normal

Strong

Yes

D12

Overcast

Mild

High

Strong

Yes

D13

Overcast

Hot

Normal

Weak

Yes

D14

Rain

Mild

High

Strong

No

Bảng 2.2 tập dữ liệu huấn luyện quyết định chơi tennis
Bảng dữ liệu trên là một tập các mẫu mô tả quyết định đi chơi tennis. Trong
bảng, thuộc tính Day được dùng để định danh (chỉ số). Các thuộc tính outlook
(quang cảnh bầu trời), temperature (nhiệt độ), humidity (độ ẩm), wind (gió) là các
thuộc tính ứng cử viên được dùng để xét. Còn thuộc tính play tennis là thuộc tính
khẳng định được dùng để phân lớp các mẫu dữ liệu. Khi đó cây quyết định được
xây dựng theo thuật toán CLS đối với tập dữ liệu trong bảng 2.2 được xây dựng như
sau:
-

Chọn thuộc tính outlook = {sunny, overcast, rain} ta có cây như sau:

23

Outlook
[ D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14 ]

Sunny

[D1,D2,D8,D9,D11]

(Cần mở rộng)

Overcast

Rain

[ D3,D7,D12,D13]

yes

[D4,D5,D6,D10,D14]

(cần mở rộng)

Hình 2.2
Với giá trị thuộc tính Outlook ="overcast" các giá trị thuộc tính play tennis của
{D3,D7,D12,D13} đếu có giá trị là yes, chúng thuộc cùng một lớp "yes", đây là nút
lá có nhãn là "yes".
-

Tiếp theo chọn thuộc tính Humidity = {High, normal} để mở rộng cho nhánh
bên trái của cây, chúng ta được cây như hình bên dưới.

24

Outlook
[ D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14 ]

Sunny

Overcast

[ D3,D7,D12,D13]

humidity

yes

Rain
[D4,D5,D6,D10,D14]

(cần mở rộng)

[D1,D2,D8,D9,D11]

High

normal

no

yes

Hình 2.3
-

Chọn thuộc tính wind ={weak, strong} để mở rộng cho nhánh bên phải, chúng ta
được cây con sau:

25

Outlook
[ D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14 ]

Sunny

Overcast

Rain
Wind

[ D3,D7,D12,D13]

Hhumidity

[D4,D5,D6,D10,D14]

yes

[D1,D2,D8,D9,D11]

Stron
High

Normal

no
no

Weak

g
no

yes

yes

Hình 2.4
Hình 2.4 là cây kết quả thu được khi áp dụng thuật toán CLS cho tập dữ liệu huấn
luyện trong bảng 2.2 với thứ tự các thuộc tính outlook, humidity, wind. Nếu áp
dụng thuật toán CLS với thứ tự khác của các thuộc tính ta sẽ thu được cây kết quả
có hình dạng khác.
Ví dụ: khi ta áp dụng thuật toán CLS để xây dựng cây với thứ tự các thuộc tính
được chọn là: Outlook, temperature, wind, humarity thì cây kết quả sẽ có hình dạng
như sau:

26

Outlook
[ D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14 ]

Sunny

Overcast

Rain

[ D3,D7,D12,D13]

Temperature

wind

yes

[D4,D5,D6,D10,D14]

[D1,D2,D8,D9,D11]

mild

hot
[D1,D2]

Humidity

no

[D9]

[D6,D14]

yes

[ D8,D11]
High

strong

cool

no

weak

[D4,D5,D10]
yes

normal

no

yes

Hình 2.5
Hai cây quyết định trong hình 2.4 và 2.5 là khác nhau. Điều đó nói lên rằng
khi áp dụng thuật toán CLS để xây dựng cây trên cùng một tập mẫu huấn luyện, cây
quyết định thu được phù thuộc vào việc chọn thuộc tính mở rộng cây ở bước 4).
Việc chọn thứ tụ thuộc tính mở rộng cây ảnh hưởng lớn đến hình dạng cây như độ
rộng, độ sâu hay nói cách khác là ảnh hưởng đến độ phức tạp của cây. Vậy một câu
hỏi đặt ra là thứ tự thuộc tính nào được chọn là tốt nhất để mở rộng cây sao cho độ
phức tạp của cây là nhỏ nhất và độ chính xác của việc phân lớp là tốt nhất. Vấn đề
này sẽ được giải quyết trong thuật toán ID3 dưới đây.
2.2.2. Thuật toán ID3
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

27

learning năm 1986. ID3 là một thuật toán đơn giản nhưng tỏ ra thành công trong
nhiều lĩnh vực. ID3 biểu diễn các khái niệm (concept) ở dạng 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 đối tượng bằng cách kiểm tra giá
trị của nó trên một số thuộc tính nào đó. Nhiệm vụ của thuật toán ID3 là học cây
quyết định từ một tập dữ liệu rèn luyện. Nói cách khác giải thuật có:
Đầu vào: Một tập hợp các mẫu dữ liệu. Mỗi mẫu bao gồm các thuộc tính mô tả một
tình huống hoặc một đối tượng nào đó và một giá trị phân loại của nó.
Đầu ra: Cây quyết định có khả năng phân loại đúng đắn các ví dụ trong tập dữ liệu
rèn luyện, và hy vọng là phân loại đúng cho cả các ví dụ chưa gặp trong tương lai.
Thuật toán ID3 xây dựng cây quyết định dựa vào sự phân lớp các đối tượng (mẫu
huấn luyện) bằng cách kiểm tra giá trị các thuộc tính. ID3 xây dựng cây quyết định
từ trên xuống (top -down) bắt đầu từ một tập các đối tượng và các thuộc tính của nó.
Tại mỗi nút của cây, tiến hành việc kiểm tra các thuộc tính để tìm ra thuộc tính tốt
nhất được sử dụng để phân chia tập các đối tượng mẫu, theo các giá trị của thuộc
tính được chọn để mở rộng. Quá trình này được thực hiện một cách đệ quy cho đến
khi mọi đối tượng của phân vùng đều thuộc cùng một lớp; lớp đó trở thành nút lá
của cây. Để làm được việc này thuật toán ID3 có sử dụng tới hai hàm Entropy và
Gian
Hàm Entropy
Hàm Entropy dùng để đo tính thuần nhất của một tập mẫu dữ liệu. Khái niệm
Entropy của một tập S được định nghĩa trong Lý thuyết thông tin là số lượng mong
đợi các bít cần thiết để mã hoá thông tin về lớp của một thành viên rút ra một cách
ngẫu nhiên từ tập hợp dữ liệu S. Trong trường hợp tối ưu mã có độ dài ngắn nhất.
Theo lý thuyết thông tin, mã có độ dài tối ưu là mã gán -log2p bits cho thông điệp có
xác xuất là p.
Trong trường hợp S là một tập mẫu rèn luyện thì mỗi thành viên của S là một mẫu.
Mỗi mẫu thuộc một lớp hay có một giá trị phân loại.

28

Trong trường hợp đơn giản, giả sử các mẫu của S chỉ thuộc 2 lớp có giá trị "yes"
(hoặc "dương", "+", "true", "positive","High") và giá trị "no" (hoặc "âm", "-",
"false", "negitive", "Low"). Để đơn giản chúng ta thống nhất sử dụng hai giá trị
"yes" và "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. Khi đó ta
có:
Entropy(S)= - P + log 2 ( P + ) − P - log 2 ( P − )

(2.1)

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

Entropy(S)=

∑ (- P log
i

2

( Pi ))

(2.2)

i=1

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.
Ví dụ: Xét tập dữ liệu học S gồm có 14 mẫu dữ liệu về thời tiết cho trong
bảng 2.2 thì số mẫu có giá trị "yes" là 9, số mẫu có giá trị "no" là 5. Chúng ta ký
hiệu [9+, 5-]. Khi đó Entropy của tập S là:
Entropy(S) = Entropy([9+ ,5- ]) =-(9/14)*log 2 (9 /14) − (5 /14)*log 2 (5 /14) = 0.940

Các trường hợp đặc biệt:
Nếu tất cả các mẫu trong S đều thuộc cùng một lớp thì Entropy(S) =0. Chẳng hạn,
trong trường hợp có 2 lớp "yes" và "no", nếu tất cả các mẫu dữ liệu trong S đều
thuộc vào lớp "yes" thì P- = 0 Khi đó:
Entropy(S) =-1*log 2 (1) − 0*log 2 (0) = 0

(Quy ước 0*log2 (0) = 0)
Còn nếu tất cả các mẫu trong S đều thuộc vào lớp "no" thì P+=0 và P- =1

khi

đó: Entropy(S) =-0*log 2 (0) − 1*log 2 (1) = 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. Chẳng
hạn trong trường hợp có 2 lớp "yes" và "no", các mẫu thuộc lớp "yes" bằng với số

29

mẫu thuộc lớp "no" thì Entropy(S) =1. Thật vậy khi số mẫu thuộc lớp "yes" bằng số
mẫu thuộc lớp "no" thì P+ =1/2 và P-=1/2. Khi đó:
Entropy(S)=-(1/2)*log 2 (1/ 2) − (1/ 2) *log 2 (1/ 2) = 1/ 2 + 1/ 2 = 1

Các trường hợp còn lại, khi S có số mẫu thành viên thuộc hai lớp có số lượng khác
0 và khác nhau thì đại lượng Entropy được tính theo công thức (2.2) và nhận giá trị
nằm trong khoảng (0;1).
Information gain ( viết tắt là gain)
Gain là đại lượng dùng để đo tính hiệu quả của một thuộc tính được lựa chọn cho
việc phân lớp. Đại lượng này được tính thông qua hai giá trị Information và
Entropy.
Cho tập dữ liệu S gồm có n thuộc tính A i(i=1,2…n) giá trị Information của thuộc
tính Ai ký hiệu là Information(Ai) được xác định bởi công thức
n

Information(Ai ) = -∑ log 2 ( pi ) = Entropy(S)

(2.3)

i=1

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:
Gain( S , A) = Information(A) - Entropy(A)= Entropy(S)-



v∈value(A)

Sv
Entropy(Sv ) ( 2.4)
S

Trong đó :
S là tập hợp ban đầu các mẫu với thuộc tính A. Các giá trị 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.
Ví dụ: S là tập có 14 mẫu dữ liệu được cho trong bảng 2.2, trong đó có 9 mẫu có
giá trị "yes" và 5 mẫu có giá trị "no".

30

Xét thuộc tính wind của tập S. Thuộc tính wind nhận các giá trị = {weak, strong}.
Trong đó: có 8 trường hợp wind =weak, có 6 trường hợp wind = strong.
Trong 8 trường hợp ứng với thuộc tính wind =weak có 6 mẫu nhận giá trị "yes", 2
mẫu nhận giá trị "no".
Trong 6 trường hợp ứng với thuộc tính wind = strong có 3 mẫu nhận giá "yes" và
"3" mẫu nhận giá trị "no".
Vậy khi đó ta có:
Entropy(Sweak ) =- (6/8) log 2 (6 / 8) − (2 / 8) log 2 (2 / 8) = 0.811
Entropy(Sstrong ) =- (3/6) log 2 (3 / 6) − (3 / 6) log 2 (3 / 6) = 1.00
Gain( S , wind) = Entropy (S)-(8/14)*Entropy(Sweak )-(6/14)*Entropy(Sstrong )
= 0.940 - (8/14) * 0.811 -(6/14)* 1.00= 0.048

Chọn thuộc tính cho bước tiếp theo trong thuật toán ID3:
Để chọn được thuộc tính cho bước tiếp theo trong thuật toán ID3, ta cần tính giá trị
Gain của các thuộc tính. Thuộc tính nào có giá trị Gain lớn nhất được xem là thuộc
tính tốt nhất để lựa chọn cho việc triển khai cây.
Hàm xây dựng cây quyết định trong thuật toán ID3
Tên hàm: Generate_decision_tree
Vào: Tập dữ liệu học S có chứa các mẫu, tập thuộc tính A.
Ra: Một cây quyết định T.
Hàm Generate_decision_tree được mô tả dưới dạng mã giả như sau [3]:
Function Generate_decision_tree (S,A)
begin
if mọi mẫu trong tập S đề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 đó
else if tập_thuộc_tính A là rỗng then

31

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 S (Lớp phổ biến
nhất trong tập S).
else begin
Chọn một thuộc tính test_attribute là thuộc tính có giá trị Gain lớn nhất trong A
với tập mẫu S, lấy nó làm gốc cho cây hiện tại;
Xóa

test_attribute

ra

khỏi

tập_thuộc_tính

A

ta

được

tập

attribute_list_test_attribute ;
Với mỗi giá trị ai của test_attribute
begin
Tạo một nhánh của cây gán nhãn ai;
Đặt vào phân_vùng S

i

các mẫu trong tập mẫu S có giá trị ai tại thuộc tính

test_attribute;
Gọi Generate_decision_tree ( Si, attribute_list_test_attribute ), gắn kết quả vào
nhánh ai
end
end
end
Ví dụ: Để minh hoạ cho thuật toán ID3, chúng ta xét tập dữ liệu S được cho trong
bảng 2.2 làm ví dụ. Tập S gồm 14 mẫu dữ liệu, thuộc tính Day là thuộc tính định
danh. Các thuộc tính ứng viên, thuộc tính play tennis là thuộc tính phân lớp.Ta có: S
gồm 14 mẫu [9+,5-] .
Tính giá trị Gain cho từng thuộc tính ta có:
Với thuộc tính Outlook = {sunny, overcast, rain} ta có:
+ Outlook = sunny có 2 mẫu nhận giá trị "yes", 3 mẫu nhận giá trị "no" [2+,3-].
+ Outlook=overcast có 4 mẫu nhận giá trị "yes",0 mẫu nhận giá trị "no" [4+,0-].
+ Outlook = Rain có 3 mẫu giá trị "yes" và 2 mẫu nhận giá trị "no" [3+,2-].
Khi đó: S = [9+,5-].