Với những đặc điểm C4.5 là thuật toán phân lớp dữ liệu dựa trên cây quyết định hiệu quả và phổ biến trong những ứng dụng khai phá cơ sở dữ liệu có kích thước nhỏ. C4.5 sử dụng cơ chế lưu trữ dữ liệu thường trú trong bộ nhớ, chính đặc điểm này làm C4.5 chỉ thích hợp với những cơ sở dữ liệu nhỏ, và cơ chế sắp xếp lại dữ liệu tại
mỗi node trong quá trình phát triển cây quyết định. C4.5 còn chứa một kỹ thuật cho phép biểu diễn lại cây quyết định dưới dạng một danh sách sắp thứ tự các luật if-then (một dạng quy tắc phân lớp dễ hiểu). Kỹ thuật này cho phép làm giảm bớt kích thước tập luật và đơn giản hóa các luật mà độ chính xác so với nhánh tương ứng cây quyết định là tương đương.
Tư tưởng phát triển cây quyếtđịnh của C4.5 là phương pháp HUNT đã nghiên cứu ở trên. Chiến lược phát triển theo độ sâu (depth-first strategy) được áp dụng cho C4.5.
Mã giả của thuật toán C4.5:
Hình 10 - Mã giả thuật toán C4.5
Trong báo cáo này, chúng tôi tập trung phân tích những điểm khác biệt của C4.5 so với các thuật toán khác. Đó là cơ chế chọn thuộc tính để kiểm tra tại mỗi node, cơ chế xử lý với những giá trị thiếu, tránh việc “quá vừa” dữ liệu, ước lượng độ chính xác và cơ chế cắt tỉa cây. 2.2.1. C4.5 dùng Gain-entropy làm độđo lựa chọn thuộc tính “tốt nhất” Phần lớn các hệ thống học máy đều cố gắng để tạo ra 1 cây càng nhỏ càng tốt, (1) ComputerClassFrequency(T); (2) if OneClass or FewCases return a leaf;
Create a decision node N; (3) ForEach Attribute A ComputeGain(A);
(4) N.test=AttributeWithBestGain; (5) if N.test is continuous
find Threshold;
(6) ForEach T' in the splitting of T (7) if T' is Empty Child of N is a leaf else (8) Child of N=FormTree(T'); (9) ComputeErrors of N; return N
Do không thểđảm bảo được sự cực tiểu của cây quyết định, C4.5 dựa vào nghiên cứu tối ưu hóa, và sự lựa chọn cách phân chia mà có độ đo lựa chọn thuộc tính đạt giá trị cực đại.
Hai độđo được sử dụng trong C4.5 là information gain và gain ratio. RF(Cj, S) biểu diễn tần xuất (Relative Frequency) các case trong S thuộc về lớp Cj.
Với |Sj| là kích thước tập các case có giá trị phân lớp là Cj. |S| là kích thước tập dữ liệu đào tạo.
Chỉ số thông tin cần thiết cho sự phân lớp: I(S) với S là tập cần xét sự phân phối lớp được tính bằng:
Sau khi S được phân chia thành các tập con S1, S2,…, St bởi test B thì
information gain được tính bằng:
Test B sẽđược chọn nếu có G(S, B) đạt giá trị lớn nhất.
Tuy nhiên có một vấn đề khi sử dụng G(S, B) ưu tiên test có số lượng lớn kết quả, ví dụ G(S, B) đạt cực đại với test mà từng Si chỉ chứa một caseđơn. Tiêu chuẩn
gain ratio giải quyết được vấn đề này bằng việc đưa vào thông tin tiềm năng (potential information) của bản thân mỗi phân hoạch
Test B sẽ được chọn nếu có tỉ số giá trị gain ratio = G(S, B) / P(S, B) lớn nhất.
Trong mô hình phân lớp C4.5 release8, có thể dùng một trong hai loại chỉ số
Information Gain hay Gain ratiođể xác định thuộc tính tốt nhất. Trong đó Gain ratio
là lựa chọn mặc định.
Ví dụ mô tả cách tính information gain
• Với thuộc tính rời rạc
Bảng 1 - Bảng dữ liệu tập training với thuộc tính phân lớp là buys_computer
Trong tập dữ liệu trên: s1 là tập những bản ghi có giá trị phân lớp là yes, s2 là tập những bản ghi có giá trị phân lớp là no. Khi đó:
• I(S) = I(s1,s2) = I(9, 5) = -9/14*log29/14 – 5/14* log25/14 = 0.940 • Tính G(S, A) với A lần lượt là từng thuộc tính:
– A = age. Thuộc tính age đã được rời rạc hóa thành các giá trị <30, 30-40, và >40.
– Với age= “<30”: I (S1) = (s11,s21) = -2/5log22/5 –3/5log23/5 = 0,971
– Với age =“ 30-40”: I (S2) = I(s12,s22) = 0
– Với age =“ >40”: I (S3) = I(s13,s23) = 0.971
Σ |Si| / |S|* I(Si) = 5/14* I(S1) + 4/14 * I(S2) + 5/14 * I(S3) = 0.694
Gain (S, age) = I(s1,s2) – Σ |Si| / |S|* I(Si) = 0.246 Tính tương tự với các thuộc tính khác ta được:
– A = income: Gain (S, income) = 0.029
– A = student: Gain (S, student) = 0.151
– A = credit_rating: Gain (S, credit_rating) = 0.048
• Với thuộc tính liên tục
Xử lý thuộc tính liên tục đòi hỏi nhiều tài nguyên tính toán hơn thuộc tính rời rạc. Gồm các bước sau:
1. Kỹ thuật Quick sort được sử dụng để sắp xếp các case trong tập dữ liệu đào tạo theo thứ tự tăng dần hoặc giảm dần các giá trị của thuộc tính liên tục V đang xét. Được tập giá trị V = {v1, v2, …, vm}
2. Chia tập dữ liệu thành hai tập con theo ngưỡng θi = (vi + vi+1)/2 nằm giữa hai giá trị liền kề nhau vi và vi+1. Test để phân chia dữ liệu là test nhị phân dạng V <= θi hay V > θi. Thực thi test đó ta được hai tập dữ liệu con: V1 = {v1, v2, …, vi} và V2 = {vi+1, vi+2, …, vm}.
3. Xét (m-1) ngưỡng θi có thể có ứng với m giá trị của thuộc tính V bằng cách tính Information gain hay Gain ratio với từng ngưỡng đó. Ngưỡng có giá trị của Information gain hay Gain ratio lớn nhất sẽ được chọn làm ngưỡng phân chia của thuộc tính đó.
Việc tìm ngưỡng (theo cách tuyến tính như trên) và sắp xếp tập training theo thuộc tính liên tục đang xem xét đôi khi gây ra thắt cổ chai vì tốn nhiều tài nguyên tính toán.
2.2.2. C4.5 có cơ chế riêng trong xử lý những giá trị thiếu
Giá trị thiếu của thuộc tính là hiện tượng phổ biến trong dữ liệu, có thể do lỗi khi nhập các bản ghi vào cơ sở dữ liệu, cũng có thể do giá trị thuộc tính đó được đánh giá là không cần thiết đối với case cụ thể.
Trong quá trình xây dựng cây từ tập dữ liệu đào tạo S, B là test dựa trên thuộc tính Aa với các giá trị đầu ra là b1, b2, ..., bt. Tập S0 là tập con các case trong S mà có giá trị thuộc tính Aa không biết và Si biểu diễn các case với đầu ra là bi trong test B. Khi đó độ đo information gain của test B giảm vì chúng ta không học được gì từ các
case trong S0.
Hai thay đổi này làm giảm giá trị của test liên quan đến thuộc tính có tỉ lệ giá trị thiếu cao.
Nếu test B được chọn, C4.5 không tạo một nhánh riêng trên cây quyết định cho S0. Thay vào đó, thuật toán có cơ chế phân chia các case trong S0 về vác tập con Si là tập con mà có giá trị thuộc tính test xác định theo trong số |Si|/ |S – S0|.
2.2.3. Tránh “quá vừa” dữ liệu
“Quá vừa” dữ liệu là một khó khăn đáng kể đối với học bằng cây quyết định và những phương pháp học khác. Quá vừa dữ liệu là hiện tượng: nếu không có các case xung đột (là những case mà giá trị cho mọi thuộc tính là giống nhau nhưng giá trị của lớp lại khác nhau) thì cây quyết định sẽ phân lớp chính xác toàn bộ các case trong tập dữ liệu đào tạo. Đôi khi dữ liệu đào tạo lại chứa những đặc tính cụ thể, nên khi áp dụng cây quyết định đó cho những tập dữ liệu khác thì độ chính xác không còn cao như trước.
Có một số phương pháp tránh “quá vừa” dữ liệu trong cây quyết định:
• Dừng phát triển cây sớm hơn bình thường, trước khi đạt tới điểm phân lớp hoàn hảo tập dữ liệu đào tạo. Với phương pháp này, một thách thức đặt ra là phải ước lượng chính xác thời điểm dừng phát triển cây.
• Cho phép cây có thể “quá vừa” dữ liệu, sau đó sẽ cắt, tỉa cây
Mặc dù phương pháp thứ nhất có vẻ trực quan hơn, nhưng với phương pháp thứ hai thì cây quyết định được sinh ra được thử nghiệm chứng minh là thành công hơn trong thực tế, vì nó cho phép các tương tác tiềm năng giữa các thuộc tính được khám phá trước khi quyết định xem kết quả nào đáng giữ lại. C4.5 sử dụng kỹ thuật thứ hai để tránh “quá vừa” dữ liệu.
2.2.4. Chuyển đổi từ cây quyết định sang luật
Việc chuyển đổi từ cây quyết định sang luật sản xuất (production rules) dạng if-then tạo ra những quy tắc phân lớp dễ hiểu, dễ áp dụng. Các mô hình phân lớp biểu diễn các khái niệm dưới dạng các luật sản xuất đã được chứng minh là hữu ích trong nhiều lĩnh vực khác nhau, với các đòi hỏi về cảđộ chính xác và tính hiểu được của mô hình phân lớp. Dạng output tập luật sản xuất là sự lựa chọn “khôn ngoan”. Tuy nhiên, tài nguyên tính toán dùng cho việc tạo ra tập luật từ tập dữ liệu đào tạo có kích thước
Giai đoạn chuyển dổi từ cây quyết định sang luật bao gồm 4 bước: • Cắt tỉa:
Luật khởi tạo ban đầu là đường đi từ gốc đến lá của cây quyết định. Một cây quyết định có l lá thì tương ứng tập luật sản xuất sẽ có l luật khởi tạo. Từng điều kiện trong luật được xem xét và loại bỏ nếu không ảnh hưởng tới độ chính xác của luật đó. Sau đó, các luật đã cắt tỉa được thêm vào tập luật trung gian nếu nó không trùng với những luật đã có.
• Lựa chọn
Các luật đã cắt tỉa được nhóm lại theo giá trị phân lớp, tạo nên các tập con chứa các luật theo lớp. Sẽ có k tập luật con nếu tập training có k giá trị phân lớp. Từng tập con trên được xem xét để chọn ra một tập con các luật mà tối ưu hóa độ chính xác dựđoán của lớp gắn với tập luật đó.
• Sắp xếp
Sắp xếp K tập luật đã tạo ra từ trên bước theo tần số lỗi. Lớp mặc định được tạo ra bằng cách xác định các case trong tập training không chứa trong các luật hiện tại và chọn lớp phổ biến nhất trong các case đó làm lớp mặc định.
• Ước lượng, đánh giá:
Tập luật được đem ước lượng lại trên toàn bộ tập training, nhằm mục đích xác định xem liệu có luật nào làm giảm độ chính xác của sự phân lớp. Nếu có, luật đó bị loại bỏ và quá trình ước lượng được lặp cho đến khi không thể cải tiến thêm.
2.2.5. C4.5 là một thuật toán hiệu quả cho những tập dữ liệu vừa và nhỏ
C4.5 có cơ chế sinh cây quyết định hiệu quả và chặt chẽ bằng việc sử dụng độ đo lựa chọn thuộc tính tốt nhất là information-gain. Các cơ chế xử lý với giá trị lỗi, thiếu và chống “quá vừa” dữ liệu của C4.5 cùng với cơ chế cắt tỉa cây đã tạo nên sức mạnh của C4.5. Thêm vào đó, mô hình phân lớp C4.5 còn có phần chuyển đổi từ cây quyết định sang luật dạng if-then, làm tăng độ chính xác và tính dễ hiểu của kết quả phân lớp. Đây là tiện ích rất có ý nghĩa đối với người sử dụng.
2.3. Thuật toán SPRINT
Ngày nay dữ liệu cần khai phá có thể có tới hàng triệu bản ghi và khoảng 10 đến 10000 thuộc tính. Hàng Tetabyte (100 M bản ghi * 2000 trường * 5 bytes) dữ liệu cần được khai phá. Những thuật toán ra đời trước không thểđáp ứng được nhu cầu đó. Trước tình hình đó, SPRINT là sự cải tiến của thuật toán SLIQ (Mehta, 1996) ra đời. Các thuật toán SLIQ và SPRINT đều có những cải tiến để tăng khả năng mở rộng của thuật toán như:
• Khả năng xử lý tốt với những thuộc tính liên tục và thuộc tính rời rạc.
• Cả hai thuật toán này đều sử dụng kỹ thuật sắp xếp trước một lần dữ liệu, và
lưu trữ thường trú trên đĩa (disk – resident data) những dữ liệu quá lớn không thể chứa vừa trong bộ nhớ trong. Vì sắp xếp những dữ liệu lưu trữ trên đĩa là đắt [3], nên với cơ chế sắp xếp trước, dữ liệu phục vụ cho quá trình phát triển cây chỉ cần được sắp xếp một lần. Sau mỗi bước phân chia dữ liệu tại từng node, thứ tự của các bản ghi trong từng danh sách được duy trì, không cần phải sắp xếp lại như các thuật toán CART, và C4.5 [13][12]. Từ đó làm giảm tài nguyên tính toán khi sử dụng giải pháp lưu trữ dữ liệu thường trú trên đĩa. • Cả 2 thuật toán sử dụng những cấu trúc dữ liệu giúp cho việc xây dựng cây
quyết định dễ dàng hơn. Tuy nhiên cấu trúc dữ liệu lưu trữ của SLIQ và SPRINT khác nhau, dẫn đến những khả năng mở rộng, và song song hóa khác nhau giữa hai thuật toán này.
Mã giả của thuật toán SPRINT như sau:
Hình 11 - Mã giả thuật toán SPRINT
SPRINT algorithm: Partition(Data S) {
if (all points in S are of the same class) then
return;
for each attribute A do
evaluate splits on attribute A;
Use best split found to partition S into S1& S2 Partition(S1);
Partition(S2); }
2.3.1. Cấu trúc dữ liệu trong SPRINT
Kỹ thuật phân chia dữ liệu thành các danh sách thuộc tính riêng biệt lần đầu tiên được SLIQ (Supervised Learning In Quest) đề xuất. Dữ liệu sử dụng trong SLIQ gồm: nhiều danh sách thuộc tính lưu trữ thường trú trên đĩa (mỗi thuộc tính tương ứng với một danh sách), và một danh sách đơn chứa giá trị của class lưu trữ thường trú trong bộ nhớ chính. Các danh sách này liên kết với nhau bởi giá trị của thuộc tính rid
(chỉ số bản ghi được đánh thứ tự trong cơ sở dữ liệu) có trong mỗi danh sách.
SLIQ phân chia dữ liệu thành hai loại cấu trúc:[14][9]
Hình 12 - Cấu trúc dữ liệu trong SLIQ
• Danh sách thuộc tính (Attribute List) thường trú trên đĩa. Danh sách này gồm trường thuộc tính và rid (a record identifier).
• Danh sách lớp (Class List) chứa các giá trị của thuộc tính phân lớp tương ứng với từng bản ghi trong cơ sở dữ liệu. Danh sách này gồm các trường rid, thuộc tính phân lớp và node (liên kết với node có giá trị tương ứng trên cây quyết định). Việc tạo ra trường con trỏ trỏ tới node tương ứng trên cây quyết định giúp cho quá trình phân chia dữ liệu chỉ cần thay đổi giá trị của trường con trỏ, mà không cần thực sự phân chia dữ liệu giữa các node. Danh sách lớp được lưu trữ thường trú trong bộ nhớ trong vì nó thường xuyên được truy cập, sửa đổi cả trong giai đoạn xây dựng cây, và cả trong giai đoạn cắt, tỉa cây. Kích thước của danh sách lớp tỉ lệ thuận với số lượng các bản ghi đầu vào. Khi danh sách lớp không vừa trong bộ nhớ, hiệu năng của SLIQ sẽ giảm. Đó là hạn chế của thuật toán SLIQ. Việc sử dụng cấu trúc dữ liệu thường trú trong bộ nhớ làm giới hạn tính mở rộng được của thuật toán SLIQ.
SPRINT sử dụng danh sách thuộc tính cư trú trên đĩa
SPRINT khắc phục được hạn chế của SLIQ bằng cách không sử dụng danh sách lớp cư trú trong bộ nhớ, SPRINT chỉ sử dụng một loại danh sách là danh sách thuộc tính có cấu trúc như sau:
Hình 13 - Cấu trúc danh sách thuộc tính trong SPRINT – Danh sách thuộc tính liên tục được sắp xếp theo thứ tự ngay được tạo ra
Danh sách thuộc tính
SPRINT tạo danh sách thuộc tính cho từng thuộc tính trong tập dữ liệu. Danh sách này bao gồm thuộc tính, nhãn lớp (Class label hay thuộc tính phân lớp), và chỉ số của bản ghi rid (được đánh từ tập dữ liệu ban đầu). Danh sách thuộc tính liên tục được sắp xếpthứ tự theo giá trị của thuộc tính đó ngay khi được tạo ra. Nếu toàn bộ dữ liệu không chứa đủ trong bộ nhớ thì tất cả các danh sách thuộc tính được lưu trữ trên đĩa. Chính do đặc điểm lưu trữ này mà SPRINT đã loại bỏ mọi giới hạn về bộ nhớ, và có khả năng ứng dụng với những cơ sở dữ liệu thực tế với số lượng bản ghi có khi lên tới hàng tỉ.
Các danh sách thuộc tính ban đầu tạo ra từ tập dữ liệu đào tạo được gắn với gốc của cây quyết định. Khi cây phát triển, các node được phân chia thành các node con mới thì các dánh sách thuộc tính thuộc về node đó cũng được phân chia tương ứng và gắn vào các node con. Khi danh sách bị phân chia thì thứ tự của các bản ghi trong danh sách đó được giữ nguyên, vì thế các danh sách con được tạo ra không bao giờ phải sắp xếp lại. Đó là một ưu điểm của SPRINT so với các thuật toán trước đó.