Việc tìm kiếm luật kết hợp trong cơ sở dữ liệu được quy về 2 giai đoạn [7]: − Tìm tất cả các luật có độ hỗ trợ lớn hơn một minssup. Các tập mục
này chính những tập mục phổ biến. Các thuật toán Apriori và AprioriTid nhằm giải quyết vấn đề này.
− Từ các tập mục tìm được ở trên tiến hành sinh những luật có độ tin cậy lớn hơn một minconf nào đó.
Hai tham số minsupp và minconf được người sử dụng đưa vào khi hệ thống khai phá tri thức. Các giá trị này thường được đưa ra bởi các chuyên gia kinh tế hoặc những người có kinh nghiệm.
Ở trong giai đoạn nhất việc phát hiện những tập mục phổ biến tiến hành duyệt dữ liệu rất nhiều lần. Việc tìm các tập mục phổ biến thực hiện dựa trên hệ quả của định nghĩa 14 trình bày ở trên. Và thực hiện lần luợt các bước sau:
− Đầu tiên người ta khởi tạo một tập thật giống các tập mục phổ biến và sinh các tập mục phổ biến dựa trên tập mục hạt giống này.
− Từ các tập mục phổ biến người ta thực hiện ghép các tập mục phổ biến để được các tập mục lớn hơn, các tập mục này được gọi là tập ứng cử viên.
− Để tính được độ hỗ trợ của các tập mục phổ biến người ta phải thực hiện duyệt toàn bộ dữ liệu. Khi đó sẽ tìm được những tập mục ứng cử viên là tập mục phổ biến.
− Tập các tập mục ứng cử viên là phổ biến này được sử dụng là tập hạt giống cho bước tiếp theo.
Cụ thể các thuật toán Apriori và AprioriTid sinh ra các tập ứng cử viên đó được tính trong một lần duyệt bằng việc sử dụng các tập mục được coi là phổ biến trong lần duyệt trước mà không cần quan tâm tới các tác vụ trong cơ sở dữ liệu. Việc chỉ xét các tập mục là phổ biến trong lần trước để sinh các tập mục ứng cử viên dựa hệ quả rút ra từ định nghĩa 14 đã trình bày ở trên: “Bất kỳ tập con của một tập mục phổ biến nào cũng là tập mục phổ biến”. Vì vậy tập ứng cử viên có k mục có thể sinh ra bởi tập các tập mục phổ biến có k-1 mục. Điều này có thể dẫn đến việc giảm đáng kể các tập mục ứng cử viên, là giảm độ phức tạp trong tính toán.
Thuật toán Apriori: Đây là thuật toán dùng để phát sinh các tập mục phổ biến.
− Lk là tập các tập mục phổ biến có kích thước k.
− Ck là tập ứng cử viên, là các tập mục có tiềm năng trở thành tập mục phổ biến.
− Thuật toán được tiến hành cho đến khi không tìm được một tập mục phổ biến nào trong một lần duyệt.
Các bước của thuật toán được trình bày dưới đây:
Lần duyệt 1
1. Phát sinh các ứng cử viên C1. Thực chất tất cả các tập mục đơn của cơ sở dữ liệu.
2. Kiểm tra và ghi lại những tập mục thuộc C1 là tập mục phổ biến và L1.
Lần duyệt thứ k:
1. Phát sinh các tập ứng cử viên từ các tập mục phổ biến Lk-1. a. Kết hợp các Lk-1 để được tất cả các Ck.
b. Với mỗi ứng cử viên Ck phát sinh tất cả k-1 tập con của Ck. c. Tỉa tất cả các ứng cử viên từ Ck trong đó có tập con (k-1)
của nó không có trong tập mục phổ biến Lk-1.
2. Duyệt trong cơ sở dữ liệu để xác định độ hỗ trợ của các tập ứng cử viên Ck.
3. Ghi lại các tập mục phổ biến Lk.
Trong bước thứ 2 của mỗi lần duyệt, để có thể tính độ hỗ trợ của các tập ứng cử viên thì thuật toán phải tiến hành duyệt lại toàn bộ cớ sở dữ liệu. Quá trình này là thực sự đáng kể với những cơ sở dữ liệu lớn. Khắc phục hạn chế trên thuật toán ApriporiTid đã lưu lai thông tin về các tác vụ gắn liền với mỗi tập mục phổ biến. Điều này có thể giúp chúng ta khắc phục được hạn chế về việc phải đọc dữ liệu nhiều lần tuy nhiên lại gây khó khăn hơn cho chúng ta khi tổ chức bộ nhớ chương trình.
Ở giai đoạn 2, giai đoạn sinh luật với mỗi tập mục phổ biến l ta tiến hành xây dựng những luật dạng a→(l−a) ở đây a là tập con của l sao cho
( ) ( )a conf p l p min sup sup ≥
Ta có, với một tập a*⊂a thìsupp( )a* ≥supp( )a nên độ tin cây của luật dạng a*→(l−a*) không thể lớn hơn luật dạng a→(l−a). Do đó nếu luật
(l a)
a→ − không được chấp nhận thì luật dạng a*→(l−a*) cũng không thể chấp nhận được. Nhờ tính chất này mà ta có thể tiến hành xây dựng các luật chỉ có một tập mục ở phía phải sau đó kết hợp các luật thành dạng có 2 mục, 3 mục, ... ở phia phải
2.1.4. Kết luận.
Việc tìm kiếm các luật kết hợp trong cơ sở dữ liệu được thực hiện theo thuật toán nguyên thuỷ Apriori và AprioriTid. Tuy nhiên một thực tế là số tập mục phổ biến có thể là rất nhiều, khắc phục hạn chế này chúng ta có thể dùng thuật toán CHARM được Mohammed .J Zaki và Ching-jui Hsiao đưa ra trong năm 2000 [13]. Thuật toán CHARM không tiến hành tìm những tập mục phổ biến mà tiến hành tìm những tập mục phổ biến đóng. Điều này dẫn đến số tập mục phổ biến tìm được là giảm đi rất nhiều và tại các bước của thuật toán việc cắt nhánh trong quá trình thực hiện là rất hiệu quả.
Một hạn chế đáng kể của các thuật toán trình bày ở trên là chỉ làm việc với dữ liệu ở dạng nhị phân, tức là giá trị của các thuộc tính chỉ nhận 2 giá trị là 0 và 1. Điều đó dẫn đến việc thuật toán khó có thể áp dụng trực tiếp trên những cơ sở dữ liệu tự nhiên. Muốn thực hiện được thuật toán cần phải định lượng các thuộc tính thành dạng nhị phân. Quá trinh này làm giảm tính chính xác của kết quả thu được. Trong chương sau chúng tôi sẽ trình bày một thuật toán có thể làm việc được với dữ liệu là đa trị, dữ liêu là dạng số thực.