3.4.1. Thuật toán Apriori
Thuật toán do Agrawal đề nghị năm 1994, được Cheung đánh giá mang tính chất lịch sử trong lĩnh vực khai phá luật kết hợp, vì đã vượt xa tầm của các thuật toán quen thuộc trong lĩnh vực này. Thuật toán dựa trên một nhận xét khá đơn giản là bất kỳ tập hợp con nào của tập xuất hiện thường xuyên cũng là tập xuất hiện –thường xuyên. Do đó, trong quá trình đi tìm các tập ứng cử viên, nó chỉ cần dùng đến các tập ứng cử viên vừa xuất hiện ở bước ngay trước đó, chứ không cần dùng đến tất cả các tập ứng cử viên (cho đến thời điểm đó). Nhờ vậy, bộ nhớ được giải phóng đáng kể.
Bước 1: cho trước ngưỡng độ hỗ trợ 0 1. Tìm tất cả các mặt hàng xuất
hiện – thường xuyên.
Bước 2: Ta tiến hành ghép đôi các phần tử của L1 (không cần để ý đến thứ tự),
được tập C2, tạp gọi là tập các ứng cử viên có 2 phần tử. Sở dĩ chỉ gọi là “ứng
cử viên”, vì chưa chắc chúng đã là – thường xuyên. Sau khi kiểm tra (dùng
định nghĩa), ta lọc ra được các tập hợp – thường xuyên có 2 phần tử. Ký hiệu tập hợp này là L2.
Bước 3: Với chủ ý đã nêu (về tính chất tăng dần của các tập hợp – thường
xuyên), ta tiến hành tìm các ứng cử viên có 3 phần tử (lấy từ L1). Gọi nó là tập C3. Lưu ý là nếu {A, B, C} muốn là “ứng cử viên” thì các tập 2 phần tử {A,
B},{B,C},{C, A } đều phải là – thường xuyên, tức là chúng đều là phần tử
của tập L2. Ta đi “kiểm tra tư cách đại biểu” trong tập C3 và lọc ra được tập
các tập hợp – thường xuyên có 3 phần tử. Tập hợp này được ký hiệu là L3.
Bước 4: Ta tiến hành tìm các ứng cử viên có n phần tử. Gọi tập của chúng là
tập Cn và từ đây, lọc ra Ln là tập tập các tập hợp – thường xuyên có n phẩn
tử.
Thuật toán này có giúp ích được gì, ta cùng nhau xem xét ví dụ sau:
Câu lệnh SQL sau đây tạo cặp, xử lý 10 triệu giỏ mua hàng, mỗi giỏ mua hàng trung bình có 10 mặt hàng, với giả thiết siêu thị có khoảng 100.000 mặt hàng:
SELECT b1.item b2.item COUNT(*) FROM Baskets b1, Baskets b2
WHERE b1.BID = b2.BID AND b1.item <b2. item GROUP BY b1.item , b2. item
HAVING COUNT(*) >= s;
Câu lệnh WHERE đảm bảo các cặp ghép không bị đúp 2 lần (vì ta không cần để ý đến tứ tự các phần tử).
Câu lệnh HAVING đả bảo các tập hợp chọn ra là – thường xuyên.
Nhận xét: Khi ghép Baskets với chính nó, mỗi giỏ ta có 45 cách chế ra các cặp ứng viên [do (10*9)/2=45], và do có 10 triệu giỏ mua hàng, nên ta phải xét 45x107 trường hợp để lọc ra các cặp – thường xuyên.
Trong khi đó nếu sử dụng Thuật toán Apriori, trước hết ta giảm được đáng kể kích thước của Baskets, vì ở bước 1 ta đi tìm các phần tử (mặt hàng) xuất hiện – thường xuyên.
SELECT * FROM Baskets GROUP BY item
HAVING COUNT (*) >= s;
Sự giảm kích thước của Baskets chưa phải là điểm cốt yếu. Điểm cốt yếu là khi ta kết hợp để tìm cặp, ta sẽ giảm được bình phương lần.
Cốt lõi của thuật toán Apriori là hàm apriori_gen() do Agrawal đề nghị năm
1994. Hàm này hoạt động theo 2 bước, bước 1- tập hợp Lk-1 tự kết nối (join) với chính nó để tạo ra tập ứng cử viên Ck. Sau đó hàm apriori_gen() loại bỏ các tập hợp có một hợp con (k-1) phần tử không nằm trong Lk-1 (vì chúng không thể là tập hợp xuất hiện – thường xuyên, theo như nhận xét ban đầu).
Method: apriori_gen() [Agrwal1994]
Input: Lớp các tập hợp xuất hiện – thường xuyên có (k-1) phần tử, ký hiệu là Lk-1
Output: Lớp các tập hợp xuất hiện – thường xuyên có k phần tử, ký hiệu là Luật kết hợp
// Bước tự kết nối Ii = Items i
Insert into Ck
Select p.I1, p.I2,…, p.Ik-1, q.Ik-1 From Lk-1 is p, Lk-1 is q
Where p.I1 = q.I1 and….and p.Ik-2 = q.Ik-2 and p.Ik-1 < q.Ik-1 //Bước tỉa bớt
Forall itemsets c Ck do
If (s is not of Lk-1) then Delete c from Ck
Hàm sau đây có nhiệm vụ rà soát từng tính chất và đo đếm xem giá đỡ của nó bằng bao nhiêu. Nói cách khác, ở bước đầu tiên Agrawal dùng hàm count() để tìm ra các tập hợp xuất hiện – thường xuyên có 1 phần tử.
Function count(C:a set of itemsets, D: database) begin
for each transaction T D = Di do begin
forall subsets xT do if x C then x.count++; end
end
Dưới đây là toàn bộ Thuật toán Apriori:
Thuật toán 3- Apriori [Agrawal1994]
Input: I, D,
Output: L
Algorithm:
//Apriori Algorithm prposed by Agrawal R., Srikant, R. [Agrawal1994] //procedure LargeItemsets
1) C1: = I; // Tập ứng cử viên có 1 phần tử
2) Sinh ra L1 bằng cách tính tần số xuất hiện của mặt hàng trong các giao dịch; 3) for (k=2; Lk-1 ; k++) do begin
//Tạo ra các tập ứng cử viên
// Các tập ứng cử viên có k phần tử được sinh ra từ các tập (k-1)- phần tử xuất hiện
– thường xuyên. 4) Ck = apriori-gen( Lk-1 ); // Tính độ hỗ trợ cho Ck 5) Count (Ck, D) 6) Lk = {c Ck| c.count } 7) end 8) L:= k Lk
Bảng 3.4 minh họa áp dụng thuật toán cho ví dụ 2 (=40%)
C1 C1 L1 Tập 1 phần tử {Bánh mì} {Bơ} {Trứng} {Sữa} Quét toàn bộ CSDL để tính độ hỗ trợ Tập hợp {Bánh mì} {Bơ} {Trứng} {Sữa} Độ hỗ trợ 50% 100% 50% 25% Tập hợp {Bánh mì} {Bơ} {Trứng} Độ tin cậy 50% 100% 50% C2 C2 L2 Tập 2 phần tử {Bánh mì, Bơ} {Bánh mì, Trứng} {Bơ, Trứng} Tập hợp {Bánh mì, Bơ} {Bánh mì, Trứng} {Bơ, Trứng} Độ hỗ trợ 50% 25% 50% Tập hợp {Bánh mì, Bơ} {Bơ, Trứng} Độ tin cậy 50% 50% C3 Quét toàn bộ CSDL để tính độ hỗ trợ C3 L3 Tập 3 phần tử Tập hợp Độ hỗ trợ Tập hợp Độ tin cậy
Thuật toán Apriori cải tiến cũng giải quyết 2 tình huống “xấu”, đó là khi Ck hoặc Lk-1 to quá, không chứa đủ trong bộ nhớ tính toán. Khi đó, cần tu chỉnh lại hàm apriori_gen() một chút.
*Thuật toán Apriori nhị phân:
Thuật toán Apriori nhị phân sử dụng các vector bit cho các thuộc tính, vector nhị phân n chiều ứng với n giao tác trong cơ sở dữ liệu. Có thể biểu diễn cơ sở dữ liệu bằng một ma trận nhị phân trong đó dòng thứ I tương ứng với giao tác (bản ghi) ti và cột thứ j tương ứng với mục (thuộc tính ) ij.
Bảng 3.5. Ma trận biểu diễn cơ sở dữ liệu TID A B C D E 1 1 1 0 1 1 2 0 1 1 0 1 3 1 1 0 1 1 4 1 1 1 0 1 5 1 1 1 1 1 6 0 1 1 1 0
Các vector biểu diễn nhị phân cho các tập 1 thuộc tính có dạng như bảng 3.6 sau:
Bảng 3.6. Vector biểu diễn nhị phân cho tập 1 thuộc tính {A} Vector {B} Vector {C} Vector {D} Vector {E} Vector
1 1 0 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 0
Các vector biểu diễn nhị phân cho các tập 2 thuộc tính có dạng như bảng 3.7 sau:
Bảng 3.7. Vector biểu diễn nhị phân cho các tập 2 thuộc tính
{A,B} {A,C} {A,D} {A,E} {B,C} {B,D} {B,E} {C,D} {C,E} {D,E}
1 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 1 0 0 1 1 1 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 0 0
Các vector biểu diễn cho thấy {A,C}, {C,D} có độ hỗ trợ 33% nhỏ hơn độ hỗ trợ tối thiểu MinSupp=50% (cho trước) nên bị loại.
Bảng 3.8. Vector biểu diễn nhị phân cho các tập 3 thuộc tính
{A,B,D} {A,B,E} {B,C,E} {B,D,E}
1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 0 0 0
Các vector biểu diễn nhị phân cho các tập 4 thuộc tính có dạng:
Bảng 3.9. Vector biểu diễn nhị phân cho các tập 4 thuộc tính {A,B,C,D} {A,B,C,E} {A,C,D,E} {B,C,D,E}
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 0 0 0 0
3.4.2. Thuật toán Apriori-TID
Thuật toán Apriori-TID là phần mở rộng theo hướng tiếp cận cơ bản của thuật toán Apriori. Thay vì dựa vào cơ sở dữ liệu thô thuật toán Apriori- TID biểu diễn bên trong mỗi giao dịch bởi các ứng cử viên hiện hành.
Như ta đã thấy, thuật toán Apriori đòi hỏi phải quét toàn bộ cơ sở dữ liệu để tính độ hỗ trợ cho các tập hợp ứng cử viên ở mỗi bước. Đây là một sự lãng phí lớn. Dựa trên tư tưởng ước đoán và đánh giá độ hỗ trợ, Agrawal đề xuất cải tiến Apriori theo hướng chỉ phải quét cơ sở dữ liệu lần đầu tiên, sau đó tính độ hỗ trợ cho các tập hợp 1 phần tử. Từ bước thứ hai trở đi, Thuật toán Apriori-TID nhờ lưu trữ song song cả ID của giao dịch và các ứng cử viên, có thể đánh giá, ước lượng độ hỗ trợ mà khỏi phải quét lại toàn bộ cơ sở dữ liệu. [3]
Nội dung thuật toán Apriori-TID
Input: Tập các giao dịch D, minsup
Output: Tập Answer gồm các tập mục thường xuyên trên D
L1= {large 1 – itemset}; C1= database D;
for (k=2; Lk-1 ; k++) do begin
Ck;
For all entries t Ck-1do Begin
//Xác định các candidate itemset
//được chứa trong giao dịch với định danh t.TID
C1={cCk|(c-c[k])t.set_of_itemset(c-c[k-1])t.set_of_itemset}; For all candidates c Ct do
c.count++;
if (C1) then Ck Ck t.TID,Ct
end
Luật kết hợp= {c Ck | c.count minsup}; end
Answer = k Lk
Sự khác nhau giữa Apriori và AprioriTID là: cơ sở dữ liệu không được sử dụng để đếm các support sau lần đầu tiên quét qua cơ sở dữ liệu. Vì sau lần quét đầu tiên các 1-itemset đã được sinh (các L1), các L1 này được dùng để lọc ra các giao dịch của cơ sở dữ liệu bất kỳ item nào là không phổ biến và những giao dịch trong C1chỉ
chứa những item không phổ biến. Kết quả đó được đưa vào C2 và sử dụng lần quét
đó. Vì vậy kích thước của C2là khá nhỏ hơn so với C1.
Sự giống nhau của hai thuật toán này là đều sử dụng bước cắt tỉa trong hàm Apriori_gen().
3.4.3. Thuật toán Apriori-Hybrid
Thuật toán Apriori-Hybrid được coi như kết hợp giữa Thuật toán Apriori và thuật toán Apriori-TID.
Trong thuật toán Apriori-Hybrid, được sử dụng khi tổ chức lặp và chuyển sang
Apriori-TID khi đã chắc chắn rằng tập Ck đã vào bộ nhớ chính. Thuật toán Apriori-
Hybrid được coi là tốt hơn so với Apriori và AprioriTID.
Nhờ có nhận xét tinh tế là thuật toán Apriori chạy khá nhanh ở những bước đầu tiên, còn thuật toán Apriori-TID chạy nhanh ở những bước sau (và đáng buồn là chạy khá chậm ở những bước đầu tiên), Agrawal đề nghị phương án lai ghép: không nhất
thiết phải chạy tất cả các bước cùng một thuật toán giống nhau. Những bước đầu tiên, ông cho chạy thuật toán Apriori, sau đó khi tập các ứng cử viên khá lớn, sắp chứa đầy trong bộ nhớ tính toán, mới dùng thuật toán Apriori-TID.
Srikant đưa ra thêm một nhận xét: thời gian chuyển từ thuật toán Apriori sang thuật toán Apriori-TID tương đối tốn kém, và thuật toán lai ghép Apriori-Hybrid chỉ tỏ ra hiệu quả khi sự chuyển mạch này diễn ra ở gần cuối quá trình tìm kiếm tập xuất hiện
CHƢƠNG 4 – KHAI PHÁ LUẬT KẾT HỢP TRONG CƠ SỞ DỮ LIỆU HÌNH ẢNH
Chụp nhũ ảnh là một trong những phương pháp dùng để phát hiện bệnh Ung thư vú, nhưng trong một số trường hợp, bác sĩ X-quang không thể phát hiện các khối u dựa vào kinh nghiệm của họ. Trong trường hợp này, máy tính hỗ trợ phương pháp sử dụng luật kết hợp có thể giúp các nhân viên y tế phát hiện chính xác hơn. Đặc biệt, máy tính còn hỗ trợ các phương pháp dựa trên luật kết hợp một cách chính xác với tập dữ liệu lớn hơn.
Khai phá hình ảnh có liên quan tới phát hiện tri thức trong cơ sở dữ liệu hình ảnh. Chương này đề cập tới việc khai phá dữ liệu sử dụng luật kết hợp dựa trên nội dung hình ảnh. Quá trình khai phá dữ liệu gồm 4 bước: Tiền xử lý (Preprocessing), Trích chọn đặc trưng (Feature Extraction), chuẩn bị cơ sở dữ liệu trung gian và khai phá luật kết hợp. [7]
4.1. Dữ liệu hình ảnh
Ảnh số là hình ảnh được ghi nhận bởi bộ cảm biến điện tử và lưu lại dưới dạng dữ liệu trong bộ nhớ của máy (thẻ nhớ, đĩa, ....). Ảnh số được tạo nên từ hàng trăm ngàn cho đến hàng triệu ô vuông rất nhỏ- được coi là những thành tố của bức ảnh và thường được biết dưới tên gọi là pixels. Có hai dạng ảnh số: ảnh đa mức xám và ảnh màu. [1]
Thông thường ảnh số được thu nhận từ các phương pháp sau:
Ảnh chụp bằng máy ảnh số và ảnh in bằng scanner.
Các frame của video số.
Ảnh tạo ra từ các phần mềm đồ họa.
4.1.1 Biểu diễn ảnh số
Có hai dạng ảnh số: Ảnh đa mức xám và ảnh màu
Biểu diễn ảnh đa mức xám
Ảnh được hiển thị trên màn hình bởi các pixel. Các pixel có độ chói (cường độ) khác nhau. Dải cường độ từ đen đến trắng phụ thuộc vào chất lượng ảnh, hay tổng số bít sử dụng cho mỗi pixel. Thí dụ với 8 bit biểu diễn pixel thì có tới 255 mức cường độ khác nhau có thể biểu diễn.
Ảnh đa mức xám được biểu diễn bằng mảng 2 chiều. Mỗi phần tử của mảng tương ứng với 1 pixel. Việc sắp xếp các giá trị pixel này trong vùng nhớ liên tục được gọi là bitmap. Khái niệm này xuất phát từ ánh xạ (map) các pixel ảnh vật lý vào các địa chỉ
liên tục trong bộ nhớ. Bộ nhớ sử dụng để lưu trữ dữ liệu ảnh bitmap được gọi là “frame buffer”.[1]
Biểu diễn ảnh màu
Ảnh màu bao gồm trường chữ nhật các pixel. Ảnh màu cần 3 giá trị để biểu diễn ảnh. Mỗi giá trị biểu diễn một màu cơ sở. Cách biểu diễn này xuất phát từ lý thuyết rằng màu có thể hình thành từ trộn ba màu cơ sở. Các màu cơ sở sử dụng trong TV và màn hình máy tính là Red, Green và Blue.
Ảnh màu có thể biểu diễn bởi ba mảng hai chiều tương ứng với các màu cơ sở red, green và blue của ảnh.
4.1.2 Các tham số chính của ảnh số Kích thước ảnh: Kích thước ảnh:
Ta thường nói kích thước ảnh là x pixel và y dòng. Tổng số cột pixel và tổng số pixel trên hàng. Số lượng pixel có trong bức ảnh sẽ quyết định kích cỡ ảnh, ảnh hưởng đến độ lớn của các tệp ảnh. Chất lượng của bức ảnh khi được in hay hiển thị trên màn hình phụ thuộc một phần vào số lượng các pixels tạo nên bức ảnh (đôi khi được gọi là độ phân giải-resolution). Số lượng các pixels càng nhiều thì các chi tiết càng được hiển thị rõ, mức độ sắc nét càng tăng đồng nghĩa với việc độ phân giải cũng lớn hơn. Nếu như phóng đại bức ảnh số đủ lớn thì mắt người sẽ nhận ra được các pixels này.[1]
Tổng số bit biểu diễn từng pixel (pixel depth):
Với ảnh đa mức xám chất lượng chấp nhận được đòi hỏi 8 bit/pixel. Với ảnh màu, cần 24 bít/pixel (mỗi thành phần màu cần 8 bít). Dữ liệu của ảnh được tính như sau:
D= x.y.b
Trong đó: x - tổng số pixel/dòng ảnh
y - tổng số dòng ảnh và b – tổng số bit/pixel.
Thí dụ, ảnh 512 pixel x512 dòng và độ sâu pixel 24 bít, thì kích thước dữ liệu sẽ là: D=512x512x24 bit = 768 KB.
4.2. Trích chọn đặc trưng trong khai phá ảnh
Trích chọn đặc trưng ảnh là bước tiền xử lý trong khai phá ảnh. Đây là bước quyết định trong toàn bộ quá trình khai phá ảnh. Phương pháp trích chọn xuất phát từ hình ảnh - rút ra mẫu và nhận được tri thức từ các hình ảnh sưu tập, giải quyết phần lớn với việc nhận dạng và trích chọn những đặc trưng duy nhất của phạm vi cụ thể.
Có nhiều giá trị dặc trưng khác nhau, mục đich chính là nhận ra những đặc trưng tốt