Thuật tốn ID3 được dùng để xây dựng cây quyết định, cho một tập các thuộc tính khơng phân loại C1, C2, …, Cn, thuộc tính phân loại C và tập các bản ghi để huấn luyện T.
function ID3 (R: tập các thuộc tính khơng phân loại, C: thuộc tính phân loại,
S: tập huấn luyện) trả lại một cây quyết định; begin
Nếu S rỗng, trả về một node đơn lẻ với giá trị Failure; Nếu S chứa các bản ghi tất cả cĩ cùng giá trị cho thuộc tính phân loại, trả về một node đơn lẻ với giá trịđĩ.
Nếu R là trống, thì trả về một node đơn lẻ với giá trị cĩ tần suất lớn nhất trong các giá trị của thuộc tính
phân loại mà tìm thấy trong các bản ghi của S; [chú ý rằng sau đĩ sẽ cĩ các lỗi, đĩ là, các bản ghi mà sẽ bị phân lớp khơng rõ ràng];
Cho D là thuộc tính với Gain lớn nhất Gain(D,S) trong số các thuộc tính trong R;
Cho {dj | j=1,2, .., m} là các giá trị của thuộc tính D; Cho {Sj | j=1,2, .., m} là các tập con của S gồm thứ tự
các bản ghi với giá trị dj cho thuộc tính D;
Trả về cây với gốc gán nhãn D và các cung được gán nhãn d1, d2, .., dm lần lượt tới các cây
ID3(R-{D}, C, S1), ID3(R-{D}, C, S2), .., ID3(R-{D}, C, Sm); end ID3;
Dùng tỷ suất lợi ích (Gain Ratios)
Khái niệm lợi ích (Gain) cĩ xu hướng ưu tiên các thuộc tính cĩ số lượng lớn các giá trị. Ví dụ, nếu một thuộc tính D cĩ giá trị riêng biệt cho mỗi bản ghi, thì Info(D,T) là 0, như vậy Gain(D,T) là cực đại. ðể khắc phục, dùng tỷ lệ sau thay cho Gain:
GainRatio(D,T) = Gain(D,T) / SplitInfo(D,T)
Trong đĩ SplitInfo(D,T) là thơng tin do phân tách của T trên cơ sở giá trị của thuộc tính phân loại D. SplitInfo(D,T) là
I(|T1|/|T|, |T2|/|T|, .., |Tm|/|T|)
Trong đĩ {T1, T2, .. Tm} là sự phân hoạch T do giá trị của D.