Thuật toán SLIQ (Supervised Learning In Quest) ựược gọi là thuật toán phân lớp leo thang nhanh. Thuật toán này có thể áp dụng cho cả hai kiểu thuộc liên tục và thuộc tắnh rời rạc.
Thuật toán này có sử dụng kỹ thuật tiền xử lý phân loại(Pre sorting) trước khi xây dựng cây, do ựó giải quyết ựược vấn ựề bộ nhớ cho thuật toán ID3.
Thuật toán SLIQ có sử dụng giải thuật cắt tỉa cây hữu hiệu.
Thuật toán SLIQ có thể phân lớp rất hiệu quả ựối với các tập dữ liệu lớn và không phụ thuộc vào số lượng lớp, số lượng thuộc tắnh và số lượng mẫu trong tập dữ liệu.
Xây dựng cây quyết ựịnh theo thuật toán này chia ra làm 2 giai ựoạn:
1. Giai ựoạn tạo cây
Vào: tập dữ liệu học T
Ra: cây ựược phân loại trên tập T Hàm
MakeTree(TrainningData T) {partition (T) ;}
2. Giai ựoạn phân chia tập dữ liệu S
Function partition (Data S) {
If <tất cả các giá trị của tập S ựều thuộc cùng một lớp> Then <kết thúc>
Else {
<đánh giá mỗi thuộc tắnh A ựể phân chia>;
<Tách tập S thành 2 tập con S1 và S2 theo thuộc tắnh A mà có giá trị chia tách tốt nhất>;
<Gọi ựệ qui thủ tục Partition(S1)>; <Gọi ựệ qui thủ tục Partition(S2)>; }
}
Chỉ số chia tách (Spliting index):
Vấn ựề ựặt ra trong thủ tục Partition(S) trên là làm thế nào ựể ựánh giá thuộc tắnh tốt nhất cho việc lựa chọn thuộc tắnh ựể chia tách. để ựánh giá thuộc tắnh tốt nhất ựó, thuật toán SLIQ ựưa vào một ựại lượng, gọi là chỉ số hàm gini, chỉ số gini ựược ựịnh nghĩa như sau:
Nếu tập dữ liệu T gồm n lớp thì giá trị gini của tập T ký hiệu gini(T) ựược xác ựịnh bởi công thức:
2
( ) 1 j
gini T = −∑ p (3.14)
Trong ựó pj là tần suất xuất hiện của lớp j trong tập mẫu T.
Nếu tập T ựược tách ra làm 2 tập con T1 và T2 thì chỉ số gini của tập T khi ựược chia tách ký hiệu là gini(T)split ựược xác ựịnh bởi công thức sau:
1 2
1 2
( )split T ( ) T ( )
gini T gini T gini T
T T
= + (3.15)
Sau khi tắnh toán chỉ số gini cho các nút, thuộc tắnh nào có chỉ số gini nhỏ nhất sẽ ựược chọn ựể thực hiện tiếp việc triển khai cây.
Kỹ thuật tiền xử lý phân loại(Pre_sorting Technique)
Kỹ thuật này tạo ra một lược ựồ, lược ựồ này ựược tạo ra bằng cách sắp xếp dữ liệu tạo ra tại mỗi nút. Ứng với mỗi thuộc tắnh có một danh sách riêng tạo ra bởi tập giá trị của thuộc tắnh và ựịnh danh các mẫu dữ liệu. Mỗi danh sách riêng gọi là danh sách lớp (class list). Các danh sách riêng sẽ tạo ra tương ứng nhãn của cây gắn với các mẫu học.
Thuật toán SLIQ yêu cầu tại một thời ựiểm có một danh sách lớp và chỉ một danh sách thuộc tắnh ựược lưu trữ trong bộ nhớ của máy tắnh, các danh sách còn lại lưu trên ựĩa.
đánh giá sự phân chia:
Thuật toán ựánh giá phân chia: EvaluateSplits()
{
For <Với mỗi thuộc tắnh A> do {
<Duyệt danh sách các giá trị của thuộc tắnh A>; For <với mỗi giá trị v trong danh sách thuộc tắnh > do
<Tìm một mục tương ứng trong danh sách lớp, sau ựó hãy tìm lớp tương ứng với nút lá 1>;
<Cập nhật biểu ựồ lớp vào trong nút lá 1>;
If <A là thuộc tắnh số> Then for <với mỗi nút lá trong cây> do
<Tìm tập con của tập A mà có chỉ số tách là tốt nhất>
}
Cập nhật danh sách lớp:
Thuật toán cập nhật danh sách lớp: UpdateLabels()
{ for<Với mỗi thuộc tắnh A ựược sử dụng trong một phép tách> do
{ <Duyệt danh sách các thuộc tắnh của A>;
For <Với mỗi giá trị v trong danh sách các thuộc tắnh của A> do
{<Tìm một mục tương ứng với danh sách lớp e>;
<Tìm lớp c chứa giá trị v bằng cách áp dụng sự kiểm tra phân
chia tại nút c ựược tham chiếu từ e>;
<Cập nhật nhãn của lớp cho lớp e vào lớp mới c>;
<Cập nhật nút ựược tham chiếu trong e vào nút con tương ứng
cho lớp c>;
}
}
}