Phân loại (classification) là một quá trình gồm hai bước, bước học tập và bước dự đoán, trong học máy. Trong bước học tập, mô hình được xây dựng dựa trên dữ liệu đào tạo (training data). Trong bước dự đoán, mô hình được sử dụng để dự đoán đáp ứng với dữ liệu đã cho. Cây quyết định (decision tree) là một trong những thuật toán phân loại phổ biến, dễ hiểu và dễ giải thích.

$\implies$ Trong bài này, chúng ta sẽ chỉ tập trung vào cây phân loại và các giải thích về CART
Là phương pháp hướng đến đo lường tần suất một đối tượng dữ liệu ngẫu nhiên trong tập dữ liệu ban đầu được phân loại không chính xác, trên cơ sở đối tượng dữ liệu đã nằm trong một tập con được phân ra từ tập dữ liệu ban đầu, có dán nhãn thể hiện thuộc tính chung bất kỳ của các đối tượng còn lại trong tập con này, giá trị phân loại chính là nhãn của tập con.
Gini impurity chính là chỉ số đo lường mức độ đồng nhất hay nhiễu loạn của thông tin, hay sự khác biệt về các giá trị mà mỗi điểm dữ liệu trong một tập con, hoặc một nhánh của cây quyết định. Công thức Gini có thể dùng cho cả dữ liệu rời rạc và liên tục. Nếu điểm dữ liệu thuộc về một node và có chung thuộc tính bất kỳ thì node này thể hiện sự đồng nhất lúc này $gini = 0$ và ngược lại gini sẽ lớn.
Công thức tổng quát của Gini:
$$G(p) = \sum_{i=1}^{n} p_i(1 - p_i) = 1 - \sum_{i=1}^{n} (p_i)^2$$Công thức trên để tính độ vẩn đục của một node, khi có nhiều cách phân nhánh mỗi cách có thể phân ra một số node nhất định. Cho nên, lúc này có thêm công thức thứ 2 để tìm ra các phân chia tối ưu nhất:
$$G_{split} = \sum_{i=1}^{k} \frac{N_i}{N} G(i)$$Trong đó:
Hệ số $G_{split}$ càng nhỏ thì cách phân nhánh đó càng tối ưu.
Gini của thuộc tính outlook = sunny:
$G(sunny) = 1 - (\frac{2}{5})^2 - (\frac{3}{5})^2 = 0.48$
$G(overcast) = 1 - (\frac{4}{4})^2 = 0$
$G(rainy) = 1 - (\frac{2}{5})^2 - (\frac{3}{5})^2 = 0.48$
Từ đó có được $Gini$ của thuộc tính outlook sẽ bằng:
$G_{split}(outlook) = \frac{5}{14}G(sunny) + \frac{4}{14}G(overcast) + \frac{5}{14}G(rainy) = \frac{5}{14}0.48 + \frac{4}{14}0 + \frac{5}{14}0.48 \approx 0.34$
Lần lượt, sẽ được giá trị $Gini$ của các thuộc tính còn lại:
$G_{split}(temperature) \approx 0.43$
$G_{split}(humidity) \approx 0.365$
$G_{split}(wind) \approx 0.43$
Như vậy, thấy rằng thuộc tính outlook sẽ có giá trị $Gini$ nhỏ nhất cho nên chọn làm root node. Sau khi chọn được root node, dữ liệu sẽ được rút gọn lại như sau:
Tiếp tục phân chia theo các thuộc tính còn lại:
$G_{split}(temperature) \approx 0.468$
$G_{split}(humidity) \approx 0.32$
$G_{split}(wind) \approx 0.414$
Như vậy thuộc tính tiếp theo được chọn là child node là humidity, tương tự các bước sau vẫn được làm như vậy.
Kết quả của $Gini$ cho ví dụ trên sẽ cho ra một cây như sau:

$\implies$ Để hạn chế vấn đề underfitting và overfitting, ta có một kỹ thuật gọi là Tiêu chuẩn dừng (Stop criterion)
Tiếp theo, ta sữ dụng thư viện sklearn để dào tạo mô hình cây quyết định dựa trên dữ liệu hoa Iris.
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
iris = datasets.load_iris()
#2: petal length
#3: petal width
X = iris.data[:, [2, 3]]
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=1, stratify=y)

$^{[1]}$ Towardsdatascience: DECISION TREES
$^{[2]}$ Towardsdatascience: Decision Tree Algorithm — Explained
$^{[3]}$ Vebuso: Decision Tree Intuition: From Concept to Application
$^{[4]}$ Digitalvidya: A Beginner’s Guide to Classification and Regression Trees
$^{[5]}$ Youtube: Decision Tree (CART) - Machine Learning Fun and Easy