Sơ đồ tuần tự với hai ngƣỡng

Một phần của tài liệu Ứng dụng một số thuật toán phân cụm phân tích dữ liệu ngân hàng (Trang 42 - 46)

Nhƣ đã trình bày trên, kết quả của BSAS và MBSAS phụ thuộc mạnh vào thứ tự của các Véctơ khi thực hiện thuật toán, cũng nhƣ giá trị của . Nếu lựa chọn  không thích hợp, có thể dẫn tới một kết quả phân cụm không có ý nghĩa. Có một cách để vƣợt qua khó khăn này đó là định nghĩa một “vùng xám”. Điều này đạt đƣợc nhờ vào việc định nghĩa hai ngƣỡng 1 và 2 (>1). Nếu độ sai khác của d(x,C) của véctơ x với cụm C gần nhất nhỏ hơn 1 thì x sẽ đƣợc gán vào C. Nếu d(x,C)  2 , một cụm mới sẽ đƣợc tạo lập và x sẽ đƣợc đặt ở đó. Trƣờng hợp còn lại, 1 d(x,C)  2 , sẽ xuất hiện sự không chắc chắn và việc gán x cho cụm sẽ đƣợc thực hiện ở giai đoạn sau. Đặt class(x) nhƣ một cờ xác định x đã phân cụm (1) hay chƣa (0). Ngoài ra, chúng ta biểu thị m là số cụm đã đƣợc tạo lập cho đến thời điểm hiện tạ1. Trong phần sau, chúng ta giả thiết là không có giới hạn cho các cụm (ví dụ: q = N). Thuật toán đƣợc thực hiện nhƣ sau:

Thuật toán TTSAS (Two-Threshold Sequential Algorithm Scheme) m = 0

class(x)= 0, x X prev_change = 0 cur_change = 0 exist_change= 0

While (có ít nhất một véctơ đại diện x với clas(x) = 0) do

For I = 1 to N

If (clas(xi) = 0) AND (đây là vòng lặp đầu tiên của While .. Loop) AND (exist_change = 0) Then m = m + 1 Cm = {xi} Clas(xi) = 1 Cur_change = cur_change + 1 Else If clas(xi) = 0 then Find d(xi,Ck) = min 1<=j<=m d(xi,Cj) If d(xi,Ck) < 1 then Ck = Ck {xi} Clas(xi) = 1 cur_change = cur_change + 1 Else If d(xi,Ck) > 2 then m = m + 1 Cm = {xi} Clas(xi) = 1 cur_change = cur_change + 1 End {If} Else If clas(xi) = 1 then cur_change = cur_change + 1 End {If} End {For}

prev_change = cur_change cur_change = 0

End {while}

Biến exist_change kiểm tra liệu có ít nhất một véctơ đã đƣợc phân loại tại lần duyệt qua X hiện tại (chẳng hạn như vòng lặp hiện tại của while … loop). Điều này đạt đƣợc bằng cách so sánh số lƣợng véctơ đã đƣợc phân loại cho đến thời điểm duyệt qua X hiện tại, curr_change với số lƣợng véctơ đã đƣợc phân loại ở lần duyệt qua trƣớc của X, prev_change. Nếu exist_change = 0, khi đó, không có véctơ nào đã đƣợc phân loại cho cụm trong lần quyệt qua trƣớc của X, véctơ đầu tiên chƣa đƣợc phân loại đƣợc sử dụng để tạo một cụm mớ1.

Điều kiện If đầu tiên trong vòng lặp Loop đảm bảo rằng thuật toán sẽ dừng sau N bƣớc duyệt qua X (N lần thực hiện của vòng lặp While ... Loop) là nhiều nhất. Thực sự điều kiện này ép buộc véctơ đầu tiên mà chƣa phân loại tới một cụm mới nếu không có véctơ nào đã đƣợc gán cho tới lần duyệt qua trƣớc của X. Điều này tránh đƣợc trƣờng hợp không có véctơ nào đƣợc gán trong toàn vòng lặp.

Tuy nhiên, trong thực hành, số lƣợng vòng lặp cần thiết thƣờng nhỏ hơn N rất nhiều, điều đó chỉ ra rằng mô hình này hầu nhƣ thƣờng xuyên có độ tốn kém ít nhất là bằng hai mô hình trƣớc bởi vì về tổng thể nó cần ít nhất hai lần duyệt qua X. Thêm vào đó, sự ấn định của véctơ bị chối bỏ cho đến lúc có đƣợc thông tin đầy đủ, nó cho thấy rằng thuật toán này không nhạy cảm với thứ tự của dữ liệu thực th1.

Nhƣ đã trình bày ở phần trƣớc, với những sự lựa chọn khác nhau của độ khác biệt giữa véctơ và cụm sẽ cho kết quả khác nhau. Thuật toán này cũng thích hợp với những cụm chặt (compact) khi đƣợc sử dụng với việc chỉ ra cụm đại diện.

Chú ý rằng đối với tất cả các thuật toán sẽ không xuất hiện trạng thái deadlock. Điều đó cho thấy không có thuật toán nào đi vào trạng thái có tồn tại véctơ chưa được gán mà không thể gán cho một cụm đã tồn tại hoặc tạo cụm mới, bất chấp số lượng dữ liệu đưa vào thực hiện thuật toán. BSAS và MBSAS đảm bảo sẽ ngừng sau một hoặc hai vòng lặp qua X. Với TTSAS, tình trạng deadlock bị loại bỏ, như chúng ta gán tuỳ ý véctơ chưa được gán đầu tiên ở vòng lặp hiện tại cho cụm mới nếu không có véctơ nào được gán ở vòng lặp trước.

Ví dụ 3:

Giả sử chúng ta có các véctơ x1 = [2,5]T, x2 = [6,4]T, x3 = [5,3]T, x4 = [2,2]T, x5

= [1,4]T, x6 = [5,2]T, x7 = [3,3]T và x8 = [2,3]T. Khoảng cách từ véctơ x tới cụm C đƣợc tính bởi khoảng cách Ơclit giữa x với véctơ trung bình của C. Nếu chúng ta thực thi các véctơ trên theo đúng thứ tự nhƣ trên đối với thuật toán MBSAS và chúng ta đặt  = 2.5, chúng ta sẽ đƣợc ba cụm C1 = {x1, x5, x7, x8}, C2 = {x2, x3, x6} và C3 = {x4} (hình vẽ 3.a).

Mặt khác, nếu chúng ta thực thi các véctơ theo thứ tự trên bằng thuật toán TTSAS với 1 = 2.2 và 2 = 4, chúng ta đƣợc hai cụm C1 = {x1, x5, x7, x8, x4}, C2 = {x2, x3, x6} (hình 3.b). Trong trƣờng hợp này, tất cả các véctơ đƣợc gán cho các cụm ngay từ lần đầu tiên duyệt qua X trừ x4, nó đƣợc gán cho C1 khi

x1 x5 x8 x7 x2 x3 x6 x4 x1 x5 x8 x7 x4 x2 x3 x6

thực hiện lần duyệt thứ 2 qua X. Tại mỗi lần duyệt, chúng ta có ít nhất một véctơ gán cho mỗi cụm, vì vậy, không có véctơ nào bị ép tạo nên cụm mới một cách tuỳ ý.

Một điều rõ ràng là thuật toán này cho một kết quả hợp lý hơn MBAS, tuy nhiên điều cần chú ý đó là thuật toán MBAS cũng cho cùng kết quả nếu thứ tự các véctơ đầu vào theo thứ tự x1, x2, x5, x3, x8, x6, x7, x4.

Một phần của tài liệu Ứng dụng một số thuật toán phân cụm phân tích dữ liệu ngân hàng (Trang 42 - 46)