Bằng cách khởi tạo K cụm từ tập giống, thuật tốn Seed K-Means đã giúp cho người dùng có thể can thiệp và điều chỉnh quá trình phân cụm dữ liệu nhằm đạt được một kết quả phân cụm theo ý muốn của mình một cách nhanh nhất.
Thuật tốn dựa trên tập giống Seed K-Means do Basu đề xuất vào năm 2002 là thuật tốn điển hình hiện nay về phân cụm nửa giám sát. Các thông tin bổ trợ đều do người dùng cung cấp. Vậy phân cụm nửa giám sát thực chất là quá trình kết hợp giữa người và máy để làm tăng chất lượng phân cụm.
0 ; ,..., 1 : 1 ) 0 ( x h k t S x Sh h h ( 1) * * * 1 ) 1 ( 1 t h X x t h t h x S
Thuật toán Seed K–Means sử dụng tập giống nhằm vượt qua hạn chế của thuật toán K-Mean trong vấn đề lựa chọn các trọng tâm của các lớp. Các tập giống sẽ được sử dụng trong quá trình khởi tạo các trọng tâm. Vì vậy, thuật toán sẽ cho ra kết quả xác định sau duy nhất một lần thực hiện.
Trong Seed K-Means, việc chọn tâm do người dùng chỉ định có thể được thay đổi trong q trình thực hiện thuật tốn.
Thuật toán Seed K-Means đã đạt được những kết quả tốt hơn các thuật toán khác như COP-KMeans, và thuật toán K-Means truyền thống (xem hình 2.6 và 2.7). Hơn nữa khi sử dụng các dữ liệu gán nhãn trong quá trình khởi tạo các cụm, thuật toán chỉ cần thực hiện duy nhất một lần.
Hình 2.7. Kết quả phân cụm cho tập Yahoo[6]
2.3. Thuật toán phân cụm nửa giám sát dựa trên mật độ: SSDBSCAN
Như đã trình bày trong chương 1, thuật toán DBSCAN là thuật toán rất hiệu quả trong việc phát hiện các cụm có hình dạng bất kỳ, chất lượng phân cụm tốt và có nhiều người sử dụng[7]. Tuy nhiên hạn chế lớn nhất của thuật toán DBSCAN là khả năng làm việc với các tập dữ liệu có các mật độ khác nhau giữa các cụm. Hình 2.8 chỉ ra sự hạn chế của thuật tốn này, với 3 cụm có mật độ khác nhau như vậy, khơng có bất kỳ cặp giá trị MinPts và nào để DBSCAN có thể tìm ra 3 cụm này.
Thuật toán SSDBSCAN được giới thiệu năm 2009 là một semi- supervised DBSCAN nhằm cải tiến DBSCAN để có thể làm việc với các tập dự liệu có các cụm với mật độ khác nhau.
Hình 2.8. Dữ liệu với 3 cluster A, B, và C. Tuy nhiên khơng có giá trị phù hợp MinPts và để DBSCAN có thể phát hiện ra đúng cả ba cluster trên [7]
Bằng cách sử dụng một số điểm gán nhãn sẵn đại diện cho các cụm, với giả thiết cung cấp ít nhất mỗi cụm một điểm, SSDBSCAN cần duy nhất một tham số MinPts. Dữ liệu đầu vào sẽ được biểu diễn bởi một đồ thị vơ hướng
có trọng số trong đó mỗi đỉnh tương ứng cho một điểm dữ liệu, cạnh giữa hai đỉnh p và q của đồ thị được xác định bởi giá trị rDist() như sau: rDist() biểu thị cho giá trị nhỏ nhất của sao cho với hai đỉnh p và q thì p và q sẽ có ít
nhất MinPts điểm nằm trong siêu cầu bán kính , hơn nữa p và q có thể kết
nối trực tiếp được với nhau – tức là p nằm trong siêu cầu bán kính của q và ngược lại, rDist() được biểu diễn như sau:
p, q X:
rDist(p,q) = max(cDist(p),cDist(q) d(p,q)) (1)
trong đó d(p,q) là khoảng cách giữa p và q theo độ đo Ơcơlit, và
cDist(o) là khoảng cách nhỏ nhất tính từ o mà ở đó o vẫn chứa đủ MinPts
Sử dụng rDist(), chúng ta xây dựng lần lượt từng cụm C như sau: Sử dụng một seed đầu tiên p, tiếp đó cluster C sẽ được thêm các điểm thỏa mãn
rDist(), quá trình sẽ tiếp tục đến khi gặp một điểm q có nhãn khác với nhãn
của p. Khi đó thuật tốn sẽ tiến hành tìm kiếm ngược lại đến điểm o sao cho
giá trị rDist(o) là lớn nhất. Q trình xây dựng cluster C hồn thành. Nếu vẫn còn các seed chưa được xét chúng ta lại tiếp tục tiến hành xây dựng các cụm như trên.
Thuật tốn SSDBSCAN được trình bày như sau:
Thuật toán 1: SSDBSCAN(D, DL) Input: Data set D, a set of seeds DL Output: A partition of D Process: 1: for all pDL 2: for all qD 3: key q 4: key p 0 5: QD 6: while Q 7: qEXTRACT MIN Q( ) 8: list.insert(q)
9: if (qDL) and (q label. p label. ) then
10: WRITE-OBJECTS(p,list)
11: break 12: end if
13: for all oAdj q do
14: if (oQ) and (rDist q o( , )key o ) then 15: key o rDist q o( , ) 16: end if 17: end for 18: end while 19: end for 20: end for
Thuật toán 2: WRITE-OBJECTS(p,list) Process:
1: iarg max list xx ( )
2: for o=1 to i-1
3: list[o].label = p.label 4: write(list[o]) 5: list.clean()
Thuật toán bắt đầu xây dựng một MST theo thuật toán Prim từ một đỉnh bất kỳ pDL và quá trình dừng lại khi hoặc là tất cả các đối tượng được thêm vào MST hoặc khi một đối tượng với một nhãn khác với nhãn của p được thêm vào cây. Khi một đối tượng q với một nhãn khác được thêm vào cây thì thuật tốn sẽ tìm kiếm cạnh lớn nhất hiện tại kết nối p và q trong tập hợp các điểm đã được thêm vào trước q đến cụm MST hiện tại. Trong dịng 8 của thuật tốn chúng ta giữ một danh sách của tất cả các đối tượng đã được thêm vào MST, chúng được sắp xếp theo thứ tự. Danh sách này được đưa vào WRITE-OBJECTS theo nguyên mẫu cùng với thư mục gốc của MST (danh sách và p tương ứng). Hai đối tượng với nhãn khác nhau đã được thêm vào và đối tượng được thêm vào với cạnh của giá trị rDist cao nhất là giá trị nhỏ nhất mà hai đối tượng kết nối. Trong thủ tục WRITE-OBJECTS, chỉ mục (ký hiệu bởi i) của đối tượng trong danh sách có trật tự sẽ được trả về (đối tượng được biểu thị bởi x), và tất cả các đối tượng từ đầu danh sách đến x, trừ x, được ghi vào một tệp tin đầu ra, gán cùng nhãn với đối tượng gốc p. Sau khi ghi các đối tượng vào một tệp, các cấu trúc dữ liệu được khởi tạo lại và tồn bộ q trình được lặp lại cho một đối tượng khác trong DL. Cuối cùng, tất cả các đối tượng thuộc một cụm được ghi vào một tệp tin đầu ra, trong khi các
đối tượng chưa được phân cụm bị bỏ lại. SSDBSCAN có thể được xem như là một thủ tục gọi các thuật toán của Prim một số lần bằng với số lượng các đối tượng được dán nhãn. Khi tập dữ liệu có nhãn là hữu hạn, thuật toán cuối cùng sẽ dừng.
SSDBSCAN gọi thuật toán của Prim một số lần bằng với số đối tượng trong bộ dữ liệu được dán nhãn. Độ phức tạp của thuật toán Prim là O(E lgV), trong trường hợp của chúng ta tương ứng với O(N2lgN), đối với SSDBSCAN, độ phức tạp thời gian cuối cùng là O(nN2 lg N), trong đó n là số nhãn các đối tượng trong bộ dữ liệu có dán nhãn. Độ phức tạp thời gian này có thể được cải thiện bằng cách thay đổi việc thực hiện thuật toán của Prim. Nếu chúng ta sử dụng Fibonaci để thực hiện hàng đợi ưu tiên, thời gian chạy của chúng ta được cải thiện thành O(nN2 + nN lg N), tức là O (nN2). Trong thực tế chúng ta thấy n có giá trị nhỏ.
Thuật tốn SSDBSCAN có 4 đặc tính thú vị như sau:
- Thuật toán chỉ yêu cầu một tham số dữ liệu đầu vào duy nhất. - Không cần bất kỳ sự can thiệp nào của người dùng.
- Tự động tìm ra các đối tượng là nhiễu dựa theo mật độ.
- Có thể tự động tìm ra cấu trúc của các cụm ngay cả khi mật độ trong các cụm khác nhau.
Bằng việc sử dụng một số seed (để gán nhãn dữ liệu), với giả thiết cung cấp ít nhất cho mỗi cụm một seed, thuật toán phân cụm nửa giám sát dựa trên mật độ SSDBSCAN cần duy nhất một tham số MinPts để tiến hành phân cụm. Từ đó, thuật toán cho hiệu suất tốt hơn, khắc phục được các hạn chế của thuật toán DBSCAN đặc biệt là trong các trường hợp phân cụm trong các tập dữ liệu có mật độ khác nhau giữa các cụm.
2.4. Thuật toán phân cụm nửa giám sát dựa trên đồ thị (SSGC)
Thuật toán phân cụm nửa giám sát dựa trên đồ thị (SSGC) được giới thiệu năm 2017[8]. Với việc tích hợp các seed vào đồ thị, kết quả phân cụm đạt được tốt hơn khi so sánh với phương pháp SSDBSCAN. Ý tưởng cơ bản của phương pháp SSGC như sau:
Bước 1: Xây dựng đồ thị k-láng giềng gần nhất.
Bước 2: Phân rã đồ thị thành các thành phần liên thông sao cho trong mỗi thành phần liên thơng chỉ có nhiều nhất một loại seed.
Bước 3: Gán nhãn cho các điểm trong các thành phần liên thơng có các seed bằng nhãn của chính seed đó.
Bước 4: Các thành phần chưa có nhãn (hoặc các điểm đơn) tiếp tục được gán vào các cụm cơ bản.
Thuật toán SSGC chỉ sử dụng một tham số - k láng giềng gần nhất. Hơn nữa, các thí nghiệm cho thấy, bằng cách sử dụng các seed, SSGC không chỉ cho kết quả tốt mà còn cải thiện tốc độ tính tốn so với thuật toán SSDBSCAN.
Đầu tiên, chúng ta xác định đồ thị k-NNG được định nghĩa là một đồ thị vơ hướng có trọng số, trong đó mỗi đỉnh đại diện cho một điểm của tập dữ liệu và sở hữu tối đa k cạnh là k láng giềng gần nhất của nó. Một cạnh được tạo ra giữa một cặp điểm xi và xj khi và chỉ khi hai điểm có chung k láng giềng gần nhất. Trọng số ( ,x xi j) của cạnh nối 2 điểm xi và xj được định nghĩa là số láng giềng gần nhất của cả 2 điểm, được mô tả như sau:
( ,x xi j) |NN x( )i NN x( j) |
Trong đó NN(.) biểu thị tập hợp k láng giềng gần nhất của điểm xác định. Tính chất này được tích hợp tính tốn tự động, giúp thích nghi với việc xử lý tập dữ liệu với mật độ cụm khác nhau.
Dựa trên đồ thị k-NNG được định nghĩa ở trên, thuật toán phân cụm nửa giám sát dựa trên đồ thị được phát triển, gọi tắt là SSGC. Thuật tốn được mơ tả như sau:
Bước 1: Phân chia đồ thị k-NN. Mục đích của bước này là phân chia một đồ thị thành một số thành phần liên thông được kết nối theo điều kiện cắt sau:
- Điều kiện cắt: “Mỗi thành phần liên thơng có nhiều nhất một loại seed”. Để làm được điều này, một ngưỡng được thiết lập để phân chia đồ thị k-NN thành các thành phần liên thơng. Để tối đa hóa số điểm trong các thành phần liên thông, chúng ta chọn giá trị ban đầu càng nhỏ càng tốt: được khởi tạo là 0 và sau mỗi lần lặp, khi điều kiện khơng thỏa mãn thì
được tăng thêm 1.
Sau khi tìm ra các thành phần liên thơng, tất cả các điểm của mỗi thành phần có nhiều nhất một seed sẽ được nhân giống bởi các nhãn của seed. Bước này tạo ra các nhóm chính.
Bước 2: Phát hiện nhiễu và xây dựng các cụm cuối.
Các điểm cịn lại, khơng được gán nhãn sẽ được chia thành 2 loại: Các điểm có các cạnh liên kết đến một hoặc nhiều cụm và các điểm cơ lập.
- Đối với các điểm có các cạnh liên kết đến một hoặc nhiều cụm, điểm sẽ được gán cho nhóm chính với trọng số lớn nhất có liên quan. Q trình này giống như cơ chế mở rộng “Cây phân nhánh tối thiểu MST” trong thuật toán SSDBSCAN.
- Đối với các điểm cơ lập, có 2 lựa chọn tùy theo mục đích của q trình phân cụm: Loại bỏ những điểm đó như là nhiễu hoặc gán nhãn. Trong trường hợp gán nhãn, nhãn của điểm cô lập sẽ được gán nhãn bởi phần lớn các nhãn của k láng giềng gần nhất.
Do ngưỡng được tính tốn tự động ở mỗi lần lặp. Do đó thuật tốn SSGC có duy nhất một tham số k, là số điểm lân cận của đồ thị.
Thuật toán 3: SSGC
Input: Tập dữ liệu X, số lân cận k, một tập các seed S. Output: Phân cụm tập X.
Quá trình:
1: Xây dựng biểu đồ k-NN của X 2: 0
3: repeat
4: Xây dựng thành phần liên thông kết nối với ngưỡng 5: 1
6: until điều kiện cắt được thỏa mãn.
7: Lan truyền nhãn để hình thành các cụm chính. 8: Xây dựng các cụm cuối cùng.
Độ phức tạp của gian đoạn xây dựng đồ thị k-NN là O(n2) hoặc O(nlogn). Độ phức tạp của quá trình xây dựng các thành phần kết nối là O(nk)
trong đó k là số lân cận của đồ thị k-NN, sử dụng phương pháp tìm kiếm theo chiều rộng (BFS) hoặc tìm kiếm theo chiều sâu (DFS). Vì vậy, độ phức tạp của thuật toán SSGC là O(n2) hoặc O(nlogn).
Để đánh giá hiệu quả của thuật toán SSGC, người ta sử dụng kết quả thu được từ thuật toán phân cụm K-Means làm tham chiếu cơ sở. Sau đó so sánh thời gian tính tốn giữa thuật tốn SSGC và thuật tốn SSDBSCAN vì hai thuật tốn này hoạt động cùng mục đích phân cụm (phân cụm với kích thước và hình dạng khác nhau). Các kết quả thực nghiệm đã chứng minh thuật toán SSGC nhanh hơn thuật toán SSDBSCAN khoảng 20 lần.
Hình 2.10. So sánh tốc độ thực hiện giữa thuật toán SSGC và thuật toán SSDBSCAN[8]
Bằng các sử dụng k láng giềng gần nhất để xác định khoảng cách tương đối giữa các đối tượng, thuật tốn đã giải quyết được q trình phân cụm với hình dạng tùy ý và mật độ khác nhau. Hơn nữa, thời gian tính tốn thấp hơn đáng kể so với thuật toán SSDBSCAN.
Hình 2.11. Kết quả của thuật tốn SSGC khi so sánh với các thuật toán cùng loại[8]
2.5. Kết luận
Nội dung chương 2 nhằm mục đích nghiên cứu các thuật toán phân cụm nửa giám sát cơ bản bao gồm thuật toán phân cụm nửa giám sát K- Means, thuật toán SSDBSCAN và thuật toán SSGC. Đây là nghiên cứu tiền đề cho chương 3 để tiến hành thực nghiệm cài đặt phân cụm cho bài toán phân loại dữ liệu log web.
Chương 3. KẾT QUẢ THỰC NGHIỆM 3.1. Giới thiệu về dữ liệu web server logs 3.1. Giới thiệu về dữ liệu web server logs
3.1.1. Tiền xử lý dữ liệu
Dữ liệu server logs được lưu trữ tại máy chủ, các dữ liệu này lưu các vết truy xuất của người dùng khi truy cập vào website. Hình 3.1 minh họa một vài dòng dữ liệu log server lấy từ tập dữ liệu chúng tôi sử dụng cho website cụ thể (https://www.vnu.edu.vn). 4-03 04:02:34 W3SVC1 112.137.142.4 GET /home/Default.asp C1886/N971/Cac-luan-an-Nganh-Tieng-Anh.htm 443 - 14.239.244.221 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+( KHTML,+like+Gecko)+Chrome/65.0.3325.181+Safari/537.36 200 0 0 2018-04-03 04:02:57 W3SVC1 112.137.142.4 GET /ttsk/Default.asp C1654/N19949/Thu-tuong-Nguyen-Xuan-Phuc-tuyen-duong-hoc-sinh- gioi.htm 80 - 40.77.167.2 Mozilla/5.0+(compatible;+bingbot/2.0;++http://www.bing.com/bingbot.ht m) 200 0 0 2018-04-03 04:04:28 W3SVC1 112.137.142.4 GET /ttsk/Default.asp C1654/N19586/VNU-%E2%80%93-IS:-dao-tao-nguon-nhan-luc-dam- bao-chat-luong-quoc-te.htm 80 - 180.76.15.157 Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/s pider.html) 200 0 0 2018-04-03 04:03:27 W3SVC1 112.137.142.4 GET /ttsk/Default.asp C2095/N10239/Huong-dan-dich-quoc-hieu,-chuc-danh,-don-vi,-to-chuc...- sang-tieng-Anh.htm 443 - 171.253.181.118 Mozilla/5.0+(iPhone;+CPU+iPhone+OS+11_2_6+like+Mac+OS+X)+App leWebKit/604.5.6+(KHTML,+like+Gecko)+Version/11.0+Mobile/15D10 0+Safari/604.1 200 0 0
Để thực hiện được bài tốn phân cụm chúng ta phải có q trình tiền xử lý dữ liệu, chuyển đổi các dữ liệu trên về dạng vector. Trên thực tế có một số phương pháp để thực hiện. Trong luận văn của mình tơi chọn phương pháp thống kê các trang web theo lĩnh vực và xem xét các địa chỉ IP truy cập vào các trang đó, nếu có thì giá trị sẽ đặt là 1 và khơng thì giá trị của vector sẽ là 0.