Định nghĩa

Cây quyết định (Decision Tree) là một mô hình thuộc nhóm thuật toán Học có giám sát (Supervised Learning).
Tìm hiểu thêm về phân loại các thuật toán Machine Learning tại đây.

Cây quyết định là gì?

Cây quyết định (gọi tắt là DT) là mô hình đưa ra quyết định dựa trên các câu hỏi.
Dưới đây là mô hình DT về một ví dụ kinh điển.
Câu hỏi có chơi tennis hay không? Quyết định đưa ra dựa trên các yếu tố về thời tiết: outlook, humidity, wind.

DT được áp dụng vào cả 2 bài toán: Phân loại (Classification) và Hồi quy (Regression). Tuy nhiên bài toán phân loại được sử dụng nhiều hơn.

Có nhiều thuật toán để xây dựng DT, trong bài này ta tìm hiểu một thuật toán nổi tiếng và cơ bản nhất của DT là thuật toán ID3.

Thuật toán ID3

Iterative Dichotomiser 3 (ID3) là thuật toán nổi tiếng để xây dựng Decision Tree, áp dụng cho bài toán Phân loại (Classification) mà tất các các thuộc tính để ở dạng category.

Để dễ hiểu ta cùng tìm hiểu thuật toán này qua ví dụ.

Tìm hiểu qua ví dụ

Ta có tập Training Data như bảng dưới:

ID Engine Type Color 4WD Want?
1 2000cc SUV Silver Yes Yes
2 1000cc Sedan Silver Yes Yes
3 2000cc Sport Blue No No
4 1000cc SUV Blue No Yes
5 2000cc Sedan Silver Yes No
6 2000cc Sport Blue Yes Yes
7 1000cc Sedan Blue No Yes
8 1000cc SUV Silver No Yes

Data của ta có 4 thuộc tính: Engine, Type, Color, 4WD.
Để tính toán được DT, ta cần phân chia các thuộc tính vào các node đánh giá. Vậy làm sao để biết được thuộc tính nào quan trọng, nên đặt ở gốc, thuộc tính nào ở nhánh…

Trong thuật toán ID3, các thuộc tính được đánh giá dựa trên Hàm số Entropy, hàm số phổ biến trong toán học xác suất.

Hàm số Entropy

Cho một phân phối xác suất của một biến rời rạc $x$ có thể nhận $n$ giá trị khác nhau $x_1, x_2, \dots, x_n$. Giả sử rằng xác suất để $x$ nhận các giá trị này là $p_i = p(x = x_i)$

Ký hiệu phân phối này là $\mathbf{p} = (p_1, p_2, \dots, p_n)$.
Entropy của phân phối này là:

$$ H(\mathbf{p}) = -\sum_{i=1}^n p_i \log_2(p_i)\quad\quad $$

Hàm Entropy được biểu diễn dưới dạng đồ thị như sau:

Từ đồ thị ta thấy, hàm Entropy sẽ đạt giá trị nhỏ nhất nếu có một giá trị $p_i = 1$, đạt giá trị lớn nhất nếu tất cả các $p_i$ bằng nhau.
Hàm Entropy càng lớn thì độ ngẫu nhiên của các biến rời rạc càng cao (càng không tinh khiết).

Với cây quyết định, ta cần tạo cây như thế nào để cho ta nhiều thông tin nhất, tức là Entropy là cao nhất.

Information Gain

Bài toán của ta trở thành, tại mỗi tầng của cây, cần chọn thuộc tính nào để độ giảm Entropy là thấp nhất.
Người ta có khái niệm Information Gain được tính bằng $$ Gain(S,f) = H(S) - H(f,S) $$ trong đó:
$H({S})$ là Entropy tổng của toàn bộ tập data set $S$.
$H(f, S)$ là Entropy được tính trên thuộc tính $f$.

Do $H({S})$ là không đổi với mỗi tầng, ta chọn thuộc tính $f$ có Entropy nhỏ nhất để thu được $Gain(S,f)$ lớn nhất.

Tính Entropy của các thuộc tính

Xét thuộc tính Engine

Thuộc tính này có thể nhận 1 trong 2 giá trị 1000cc, 2000cc, tương ứng với 2 child node.
Gọi tập hợp các điểm trong mỗi child node này lần lượt là $S_1$, $S_2$.

Sắp xếp lại theo thuộc tính Engine ta có 2 bảng nhỏ.

Engine 1000cc ($S_1$)

ID Engine Type Color 4WD Want?
2 1000cc Sedan Silver Yes Yes
4 1000cc SUV Blue No Yes
7 1000cc Sedan Blue No Yes
8 1000cc SUV Silver No Yes

Engine 2000cc ($S_2$)

ID Engine Type Color 4WD Want?
1 2000cc SUV Silver Yes Yes
3 2000cc Sport Blue No No
5 2000cc Sedan Silver Yes No
6 2000cc Sport Blue Yes Yes

Child node ứng với Engine 1000cc sẽ có Entropy = 0 do tất cả các giá trị đều là Yes.
Ta chỉ việc tính Entropy với Engine 2000cc. Sau đó tính Entropy trung bình.
Cụ thể như sau:

$$ \begin{aligned} H(S_1) &=& 0 \cr H(S_2) &=& -\frac{2}{4}\mathcal{log}_2\left(\frac{2}{4}\right) - \frac{2}{4}\mathcal{log}_2\left(\frac{2}{4}\right) = 1 \cr H({engine}, S) &=& \frac{4}{8}H(S_1) + \frac{4}{8}H(S_2) = 0.5 \end{aligned} $$

Xét thuộc tính Type

Thuộc tính này có thể nhận 1 trong 3 giá trị SUV, Senda, Sport tương ứng với 3 child node.
Gọi tập hợp các điểm trong mỗi child node này lần lượt là $S_u$, $S_e$, $S_p$.

Sắp xếp lại theo thuộc tính Type ta có 3 bảng nhỏ.

Type SUV ($S_u$)

ID Engine Type Color 4WD Want?
1 2000cc SUV Silver Yes Yes
4 1000cc SUV Blue No Yes
8 1000cc SUV Silver No Yes

Type Sedan ($S_e$)

ID Engine Type Color 4WD Want?
2 1000cc Sedan Silver Yes Yes
5 2000cc Sedan Silver Yes No
7 1000cc Sedan Blue No Yes

Type Sport ($S_p$)

ID Engine Type Color 4WD Want?
3 2000cc Sport Blue No No
6 2000cc Sport Blue Yes Yes

Tương tự, ta lần lượt tính Entropy như bên dưới:

$$ \begin{aligned} H(S_u) &=& 0 \cr H(S_e) &=& -\frac{2}{3}\mathcal{log}_2\left(\frac{2}{3}\right) - \frac{1}{3}\mathcal{log}_2\left(\frac{1}{3}\right) \approx 0.918 \cr H(S_p) &=& -\frac{1}{2}\mathcal{log}_2\left(\frac{1}{2}\right) - \frac{1}{2}\mathcal{log}_2\left(\frac{1}{2}\right) = 1 \cr H({type}, S) &=& \frac{3}{8}H(S_u) + \frac{3}{8}H(S_e) + \frac{2}{8}H(S_p) \approx 0.594 \end{aligned} $$

Xét thuộc tính Color

Thuộc tính này có thể nhận 1 trong 2 giá trị Silver, Blue tương ứng với 2 child node.
Gọi tập hợp các điểm trong mỗi child node này lần lượt là $S_s$, $S_b$.

Sắp xếp lại theo thuộc tính Color ta có 2 bảng nhỏ.

Color Silver ($S_s$)

ID Engine Type Color 4WD Want?
1 2000cc SUV Silver Yes Yes
2 1000cc Sedan Silver Yes Yes
5 2000cc Sedan Silver Yes No
8 1000cc SUV Silver No Yes

Color Blue ($S_b$)

ID Engine Type Color 4WD Want?
3 2000cc Sport Blue No No
4 1000cc SUV Blue No Yes
6 2000cc Sport Blue Yes Yes
7 1000cc Sedan Blue No Yes

Dễ thấy, 2 giá trị Silver và Blue đều có tỉ lệ Yes, No như nhau là 3/4 và 1/4.
Do đó ta tính luôn Entropy trung bình:

$$ \begin{aligned} H({color}, S) &=& -\frac{3}{4}\mathcal{log}_2\left(\frac{3}{4}\right) - \frac{1}{4}\mathcal{log}_2\left(\frac{1}{4}\right) \approx 0.811 \end{aligned} $$

Xét thuộc tính 4WD

Thuộc tính này có thể nhận 1 trong 2 giá trị Yes, No tương ứng với 2 child node.
Gọi tập hợp các điểm trong mỗi child node này lần lượt là $S_y$, $S_n$.

Sắp xếp lại theo thuộc tính 4WD ta có 2 bảng nhỏ.

4WD Yes ($S_y$)

ID Engine Type Color 4WD Want?
1 2000cc SUV Silver Yes Yes
2 1000cc Sedan Silver Yes Yes
5 2000cc Sedan Silver Yes No
6 2000cc Sport Blue Yes Yes

4WD No ($S_n$)

ID Engine Type Color 4WD Want?
3 2000cc Sport Blue No No
4 1000cc SUV Blue No Yes
7 1000cc Sedan Blue No Yes
8 1000cc SUV Silver No Yes

Tương tự Color, ta tính Entropy trung bình:

$$ \begin{aligned} H({4wd}, S) &=& -\frac{3}{4}\mathcal{log}_2\left(\frac{3}{4}\right) - \frac{1}{4}\mathcal{log}_2\left(\frac{1}{4}\right) \approx 0.811 \end{aligned} $$

Chọn thuộc tính có Entropy nhỏ nhất

Sau khi tính Entropy trung bình của 4 thuộc tính ta thu được:
$H({engine}, S) = 0.5$
$H({type}, S) \approx 0.594$
$H({color}, S) \approx 0.811$
$H({4wd}, S) \approx 0.811$

Thuộc tính Engine có giá trị Entropy nhỏ nhất nên ta chọn là node đánh giá đầu tiên.
Với Engine 1000cc, tất cả các data đều có giá trị Yes, vì vậy ta thu được node là Yes ở nhánh 1000cc.
Ta tiếp tục tính cho nhánh Engine 2000cc với tập data nhỏ hơn là

ID Engine Type Color 4WD Want?
1 2000cc SUV Silver Yes Yes
3 2000cc Sport Blue No No
5 2000cc Sedan Silver Yes No
6 2000cc Sport Blue Yes Yes

Tương tự ta lần lượt tính Entropy cho 3 thuộc tính là: Type, Color, 4WD

Với thuộc tính Type:
$$ \begin{aligned} H(S_u) &=& 0 \cr H(S_e) &=& 0 \cr H(S_p) &=& -\frac{1}{2}\mathcal{log}_2\left(\frac{1}{2}\right) - \frac{1}{2}\mathcal{log}_2\left(\frac{1}{2}\right) = 1 \cr H({type}, S) &=& \frac{1}{4}H(S_u) + \frac{1}{4}H(S_e) + \frac{2}{4}H(S_p) = 0.5 \end{aligned} $$

Với thuộc tính Color:
Do 2 giá trị Silver và Blue có cùng tỉ lệ Yes, No là 1/2 và 1/2.
$$ \begin{aligned} H({color}, S) &=& -\frac{1}{2}\mathcal{log}_2\left(\frac{1}{2}\right) - \frac{1}{2}\mathcal{log}_2\left(\frac{1}{2}\right) = 1 \end{aligned} $$

Với thuộc tính 4WD:
$$ \begin{aligned} H(S_y) &=& -\frac{2}{3}\mathcal{log}_2\left(\frac{2}{3}\right) - \frac{1}{3}\mathcal{log}_2\left(\frac{1}{3}\right) \approx 0.918 \cr H(S_n) &=& 0 \cr H({4wd}, S) &=& \frac{3}{4}H(S_y) + \frac{1}{4}H(S_n) \approx 0.688 \end{aligned} $$

Vậy ta chọn Type là node đánh giá tiếp theo.

Với trường hợp Type là SUV hoặc Sedan, ta có ngay node lá vì chỉ có một kết quả.
Với trường hợp Type là Sport, do thuộc tính Color là giống nhau với tất cả data, ta chọn node đánh giá tiếp theo là 4WD.

Kết quả

Ta thu được Decision Tree như hình bên dưới.

Kiểm tra (Validation)

Ta sẽ tiến hành kiểm tra mô hình DT ta vừa tạo được bằng tập Test Data như bên dưới:

ID Engine Type Color 4WD Want?
9 2000cc Sedan Silver Yes Yes
10 2000cc Sport Silver No No
11 1000cc SUV Blue Yes Yes
12 2000cc Sedan Blue No Yes

Ta có bảng mapping đánh giá kết quả như sau:

Actual Result Estimate Result Validation
Yes Yes True Positive (TP)
No No True Negative (TN)
Yes No False Negative (FN)
No Yes False Positive (FP)

Dựa vào DT ta vừa tạo được, ta tiến hành đánh giá như sau:

ID Actual Result Estimate Result Validation
9 Yes No False Negative (FN)
10 No No True Negative (TN)
11 Yes Yes True Positive (TP)
12 Yes No False Negative (FN)

Các thông số áp dụng để đánh giá được tính như sau:
$$ \begin{aligned} Accuracy &=& \frac{TP+TN}{TP+FP+TN+FN} = 0.5 \cr Recall &=& \frac{TP}{TP+FN} = 0.5 \cr Precision &=& \frac{TP}{TP+FP} = 1 \cr F-Measure &=& \frac{2 \times Recall \times Precision}{Recall + Precision} \approx 0.667 \end{aligned} $$

Nhìn chung Decision Tree tìm được có độ chính xác không cao khi chạy thử với Test Data.
Nguyên nhân chính có lẽ là do tập Training Data quá ít.