Thuật toán C4.5

Một phần của tài liệu Ứng dụng khai phá dữ liệu để xây dựng hệ thống chẩn đoán bệnh trầm cảm cho học sinh phổ thông (Trang 30 - 39)

5. Bố cục của luận văn

1.2.6. Thuật toán C4.5

a.Giới thiệu

Thuật toán C4.5 được phát hiện và công bố bởi Quinlan vào năm 1996. Thuật toán C4.5 là thuật toán được cải tiến từ thuật toán ID3, C4.5 giải quyết được hầu hết hạn chế của ID3. C4.5 sử dụng độ đo là Gain Ratio 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 và được dùng rộng rãi trong các ứng dụng phân lớp với lượng dữ liệu cỡ vài trăm nghìn bản ghi.

Độ đo sử dụng để xác định điểm chia tốt nhất

RatioGain: Sự đánh giá thay đổi các giá trị của thuộc tính.

𝑅𝑎𝑡𝑖𝑜𝐺𝑎𝑖𝑛(𝑆, 𝐴)= 𝐺𝑎𝑖𝑛(𝑆,𝐴)

𝑆𝑝𝑙𝑖𝑡𝐼𝑛𝑓𝑜𝑚𝑎𝑡𝑖𝑜𝑛(𝑆,𝐴)

Trong đó:

 Cách tính Entropy và Gain như đã trình bày phần 1.2.5.b

 SplitInfomation: Thông tin tiềm ẩn được tạo ra bằng cách chia tập dữ liệu trong một số tập con nào đó.

𝑅𝑎𝑡𝑖𝑜𝐺𝑎𝑖𝑛(𝑆, 𝐴)=− ∑ |𝑆𝑖| |𝑆| 𝑐

𝑖=1 log2|𝑆𝑖|

|𝑆|

Với Si làtập con của S chứa các ví dụ có thuộc tính A mang giá trị Vi. Để ý rằng SplitInfomation thực sự chính là Entropy của S với sự liên quan trên những giá trị của thuộc tính A. Trong thuật toán C4.5 tất cả các thuộc tính sẽ được tính toán độ đo RatioGain, thuộc tính nào có độ đo RatioGain lớn nhất sẽ được chọn làm thuộc tính phân chia.

b.Thuật toán C4.5

Dữ liệu vào: Tập dữ liệu E, tập thuộc tính F, tập nhãn lớp

Dữ liệu ra: Mô hình DT

Thuật toán:

Tạo cây (Tập dữ liệu E, tập thuộc tính F, tập nhãn lớp) Nếu điều kiện dừng (E,F) = Đúng

Nutla = CreaNode()

nutla.nhanlop=phanlop(E) Return nutla

Ngược lại

Nutgoc= CreateNode()

Nutgoc.điều kiện kiểm tra = Tìm _điểm _Chia_tốt_nhất (E,F) Đặt F=F\{Nút chọn phân chia}

Đặt V={v|v thoả mãn điều kiện là phần phân chia xuất phát từ Nutgoc}

Lặp qua từng tập phân chia v ∈ V

Đặt Ev = {e| Nutgoc.điều kiện kiểm tra (e) = v và e ∈ E} Nutcon = Tạocây(Ev, F, Tập nhãn lớp)

Dừng lặp End if

Trả về Nút gốc

Gọi hàm Tạocây (E, tập thuộc tính F của E, tập nhãn lớp) Giải thích về thuật toán:

Đây là một thuật toán kiểu đệ qui tạo DT. Tại hàm chính, gọi hàm đệ quy TạoCây() với ba tham số vào là tập dữ liệu E, tập thuộc tính F của E và tập nhãn. Thuật toán làm việc bằng cách thực hiện đệ quy chọn giá trị thuộc tính tốt nhất để chia, lưu ý là chọn giá trị của thuộc tính sao cho điều kiện chia tốt nhất, tiếp tục tiến hành mở rộng nút con bằng cách gọi đệ qui cho đến khi điều kiện dừng được thoả mãn.

c.Mội số cải tiến so với ID3

 Thuộc tính liên tục:

Thuật toán ID3 bị giới hạn bởi việc liên quan đến tập những giá trị rời rạc. Trong thuật toán C4.5 chúng ta sẽ mở rộng phạm vị hoạt động của nó cho những thuộc tính có giá trị liên tục để phù hợp với thế giới thực.

Thuật toán C4.5 đưa ra định nghĩa những giá trị rời rạc mới để phân những giá trị liên tục thành những thuộc tính tượng trưng một lần nữa theo nguyên tắc sau:

 Dựa trên một giá trị nếu muốn phân chia nhị phân

 Với mỗi giá trị tính các mẫu thuộc một lớp theo dạng F<v và F>v

 Cách chọn giá trị v hiệu quả:

 Sắp xếp các giá trị tăng dần

 Chọn giá trị trung bình của từng cặp giá trị của thuộc tính để phân chia và tính chỉ số gia lượng thông tin.

 Chọn giá trị phân chia có chỉ số gia lượng thông tin cao nhất.  Thuộc tính nhiều giá trị

Thuật toán ID3 bị giới hạn bởi việc liên quan đến những thuộc tính có nhiều giá trị mà các giá trị này lại duy nhất như kiểu dữ liệu ngày – tháng – năm, kiểu dữ liệu như mã nhân viên, số chứng minh nhân dân sẽ hình thành một số lượng quá lớn các nhánh con làm kết quả của cây trở nên lớn và phức tạp nhưng lại vô nghĩa . Khi đó, việc chia một tập dữ liệu thành quá nhiều các tập con dẫn đến số lượng các lớp tại mỗi nút giảm và do đó Entropy trên thuộc tính đó cũng giảm theo, nên sự thu thập thông tin sẽ cao hơn các thuộc tính khác. Vì vậy thuộc tính này sẽ được lựa chọn thường xuyên để tách, dẫn đến độ phân nhánh lớn, cây sẽ rất lớn và phức tạp.

C4.5 giải quyết vấn đề này bằng cách lựa chọn thuộc tính để phân tách theo nguyên tắc:

 Thuộc tính có tỉ lệ gia lượng thông tin cao.

 Entropy của thuộc tính lớn hơn Entropy trung bình của tất cả các thuộc tính.

 Thuộc tính thiếu giá trị

 Nếu giá trị của thuộc tính F bị mất trên một số bộ dữ liệu, hướng giải quyết sẽ thế nào? Giả sử rằng (x,C(x)) là một trong những tập huấn luyện trong S và giá trị F(x) là không được biết đến.

 Thay bằng giá trị xuất hiện nhiều nhất của thuộc tính A mà có cùng giá trị hàm mục tiêu.

 Tính lại các công thức dựa trên những giá trị đã có của thuộc tính F.

d. Ví dụ thuật toán C4.5

Bảng 1.2. Ví dụ thuật toán C4.5 dữ liệu chơi golf

Day Outlook Temp Humidity Wind Play?

1 Sunny Hot 85 Weak No 2 Sunny Hot 90 Strong No 3 Overcast Hot 78 Weak Yes 4 Rain Mild 96 Weak Yes 5 Rain Cool 80 Weak Yes 6 Rain Cool 70 Strong No 7 Overcast Cool 65 Weak Yes 8 Sunny Mild 95 Weak No 9 Sunny Cold 70 Weak Yes 10 Rain Mild 80 Strong Yes 11 Sunny Mild 70 Strong Yes 12 Overcast Mild 90 Strong Yes 13 Overcast Hot 75 Weak Yes 14 Rain Mild 80 Strong No

 Dữ liệu vào:

Tập dữ liệu thời tiết

Tập thuộc tính: Day, Outlook, Temp, Humidity, Wind

Tập nhãn lớp: Yes – No

 Dữ liệu ra: Mô hình quyết định chơi golf.

Lần tạo cây đầu tiên:

 Tìm điểm chia tốt nhất (E,F)

E: Tập dữ liệu thời tiết.

F: Day, Outlook, Temp, Humidity, Wind. Ta có: S[9Yes, 5No]

Ngày Yes: D3, D4, D5, D7, D9, D10, D11, D12, D13 Ngày No: D1, D2, D6, D8, D14

Entropy(S) = - 9

14log2149 −145 log2145 = 0.940

Tính độ đo tỉ lệ Gain cho thuộc tính “Outlook”

EntropyOutlook(S)= 145Entropy (Ssunny) + 144 𝑥 Entropy(SOvercast) + 145 x Entropy(Srain)= (5 14) (− (2 5) log22 5− (3 5) log23 5) + 4 14(0) + (5 14) (− (3 5) log23 5− (2 5) log22 5)=0.694

Gain(S,Outlook)= Entropy(S)–EntropyOutlook(S) = 0.940 – 0.694 = 0.246 SplitInfomation(S,Outlook) = - 5 14log2 5 14− 4 14log2 5 14− 5 14log2 5 14 = 1.577. GainRatio(S,Outlook) = 0.246/1.577 = 0.156

Tính độ đo tỉ lệ Gain cho thuộc tính “Wind”

EntropyWind(S) = 6 14Entropy (SStrong) + 8 14 𝑥 Entropy(SWeak) = 6 14(1) + (148 (−68) log268− (2 8) log228) = 0.892

Gain(S,Wind)= Entropy(S) – EntropyWind(S) = 0.940 – 0.892 = 0.048 SplitInfomation(S,Wind) = - 6 14log2 6 14− 8 14log2 8 14 = 0.985 GainRatio(S,Wind) = 0.048/0.985 = 0.049.

Tính độ đo tỉ lệ Gain cho thuộc tính “Humidity”

EntropyHumidity(S) = 4

14 Entropy (S72.5) + 10

= 4 14(−3 4log23 4) − (1 4log21 4+ (10 14) (− 6 10log2 6 10− 4 10log2 4 10) = 0.925

Gain(S,Humidity)= Entropy(S)–EntropyHumidity (S) =0.940–0.925 = 0.015 SplitInfomation(S, Humidity) = - 144 log2144 −1014log21014 = 0.863

GainRatio(S, Humidity) = 0.015/0.863 = 0.017.

Tính độ đo tỉ lệ Gain cho thuộc tính “Temp”

EntropyTemp(S)= 4 14xEntropy(SHot)+ 6 14𝑥Entropy(SMild)4 14𝑥Entropy (SCool) = 4 14(1) + 6 14(−46log24 6− (2 6) (log226+ 4 14(−34) log234) −146 log21 4= 0.911

Gain(S,Temp)= Entropy(S) – EntropyTemp(S) = 0.940 – 0.911 = 0.029 SplitInfomation(S,Temp) = - 4 14log2 4 14− 6 14log2 6 14− 4 14log2 4 14 = 1.557 GainRatio(S,Temp) = 0.029/1.557 = 0.019.

Tính độ đo tỉ lệ Gain cho thuộc tính “Day”:

EntropyDay(S)= 4

14Entropy(SD1)+ ….+ 4

14Entropy(SD14) = 12 x 4

14 x0= 0 Gain(S,Day)= Entropy(S) – EntropyDay(S) = 0.940 – 0 = 0.940

SplitInfomation(S,Day) = 14x (−141) log2141 = 3.807

GainRatio(S,Day) = 0.940/3.807 = 0.246.  Lựa chọn thuộc tính tốt nhất để phân chia:

Entropy trung bình của các thuộc tính = (0.694+ 0.892 + 0.925 + 0.911 + 0)/5= 0.684

Ta có: GainRatio(S,Outlook) = 0.156 EntropyOutlook(S)= 0.694>0.684

Thuộc tính được chọn để phân chia: Outlook

Tương tự như lần tạo cây thứ 1 ta tiếp tục tạo cây thứ 2: Nhánh “Sunny”

Entropy(SSunny) = (− 3

5) log2(3

5) − (2

5) log2(2

5) = 0.971

EntropyTemp(SSunny)=(2

5)Entropy(SHot)+(2 5)Entropy(SMild)(1 5)Entropy(SCool )= (2 5) (0) + (2 5) (1) + (1 5) 𝑥0 = 0.4

Gain(SSunny,Temp)= 0.971 – 0.400 = 0.571

SplitInfomation(SSunny,Temp) = - (25) log2(52) − (25) log2(25) − (15) log2(25) = 1.522

GainRatio(Ssunny,Temp) = 0.571/1.522 = 0.375.

Tính độ đo tỉ lệ Gian cho thuộc tính “Humidity”:

Chọn giá trị phân chia tốt nhất: Entropy(SHumidity) = (− 2

5) log2(2

5) − (3

5) log2(3

5) = 0.971

EntropyHumidity(SSunny) = 2

5 Entropy (S77.5) + 3

5𝑥Entropy(S>77.5) = 2

5𝑥(0) + (35) 𝑥 0 = 0

Gain(SSunny,Humidity)= EntropyHumidity (S) - EntropyHumidity(SSunny) = 0.971– 0 = 0.971

SplitInfomation(SSunny, Humidity) = - 2

5log225−35log235 = 0.971

GainRatio(SSunny, Humidity) = 0.971/0.971 = 1.

Tính độ đo tỉ lệ Gian cho thuộc tính “Wind”:

EntropyWind(SSunny)= 2

5xEntropy (SWeak) + 3

5𝑥 Entropy(SStrong) = 25(1) + ((35) (−13) log2(13) − (23) log2(23)) = 0.951

Gain(SSunny,Wind)= 0.971– 0.951 = 0.020

SplitInfomation(SSunny,Wind) = - (25) log252−35log235= 0.971

Tính độ đo tỉ lệ Gain cho thuộc tính “Day”:

EntropyDay(SSunny)=1

5x Entropy(SD1)+1 5xEntropy(SD2)+1 5xEntropy(SD8) +1 5 x Entropy(SD9)+1 5 x Entropy(SD11)= 0 Gain(SSunny,Day)= 0.971 – 0 = 0.971 SplitInfomation(SSunny,Day) = 5 x (−1

5) log21

5= 2.322

GainRatio(SSunny,Day) = 0.971/2.322= 0.418. Thuộc tính được phân chia: “Humidity”:

Nhánh “Rain”

Tính độ đo tỉ lệ Gian cho thuộc tính “Humidity”

Entropy(Srain) = - 35log2(53) − (25) log2(25) = 0.971

Entropytemp(Srain)= (35) x Entropy (SMild) +25x Entropy (SCool) = (3 5) (−2 3log22 3− (1 3) (log21 3+) + (2 5) (1) = 0.951

Gain(Srain,Temp)= 0.971 – 0.951 = 0.020 SplitInfomation(Srain,Temp) = - (3

5) (log22

5− (2

5) log22

5) = 0.971

GainRatio(Srain,Temp) = 0.020/0.971 = 0.021.

Tính độ đo tỉ lệ Gain cho thuộc tính “Wind”:

EntropyWind(Srain)= 3

5xEntropy (SWeak) + 2

5𝑥 Entropy(SStrong) = (35) 𝑥(0) + (25) 𝑥(0) = 0

Gain(Srain,Wind)= 0.971– 0= 0.971

SplitInfomation(Srain,Wind) = - (35) log253−25log225= 0.971

GainRatio(Srain,Wind) = 0.971/0.971 = 1 Độ đo tỉ lệ Gain cho thuộc tính “Day”

EntropyDay(Srain)= 1 14xEntropy(SD4)+1 14xEntropy(SD5)+ 1 14 x Entropy(SD6) + 1 14 x Entropy(SD10)+ 1 14 x Entropy(SD14)= 0 Gain(Srain,Day)= 0.971 – 0 = 0.971

SplitInfomation(Srain, Day) = 5 x (−15) log215= 2.322

GainRatio(Srainm,Day) = 0.971/2.322= 0.418. Thuộc tính được chọn để phân chia: “Wind”

Hình 1.4. Cây quyết định chơi golf từ thuật toán C4.5

Luật rút ra từ cây quyết định:

Luật 1: if (Outlook = Sunny) and (Humidity >77.5) then Play= No Luật 2: if (Outlook = Sunny) and (Humidity 77.5) then Play= Yes Luật 3: if (Outlook = Overcast) then Play= Yes

Luật 4: if (Outlook = Rain) and (Wind= Weak) then Play= Yes Luật 5: if (Outlook = Rain) and (Wind= Strong) then Play= No

Một phần của tài liệu Ứng dụng khai phá dữ liệu để xây dựng hệ thống chẩn đoán bệnh trầm cảm cho học sinh phổ thông (Trang 30 - 39)

Tải bản đầy đủ (PDF)

(96 trang)