Thuật toán K-Means phân cấp

Một phần của tài liệu Đồ án tốt nghiệp Đại học hệ chính quy - Thuật toán Phân cụm dữ liệu nửa giám sát (Trang 34)

Ba thuật toán phân cụm nửa giám sát: Seeded-KMeans, Constrained-Kmeans, COP-KMeans đạt hiệu quả kém trước bài toán phân cụm mà số lượng cụm chưa được xác định một cách chính xác. Chúng ta có thể gặp vấn đề này rất nhiều trong thực tế, ví dụ: bài toán phân cụm một dữ liệu gồm các đối tượng sinh viên trong một lớp: nếu ta phân loại sinh viên theo giới tính thì số cụm cần phân K = 2 là một giá trị chắc chắn, tuy nhiên nếu ta phân loại sinh viên theo quê quán thì số cụm K cần phân là mập mờ. Sau đây em xin trình bày bài toán K-Means phân cấp, một thuật toán được nêu ra nhằm giải quyết vấn đề trên.

Thuật toán K-Means phân cấp do hai tác giả: Hoàng Xuân Huấn và Nguyễn Trung Thông nghiên cứu và đề xuất. Đây có thể nói là một thuật toán cải tiến của Seeded-Kmeans bằng cách kết hợp thuật toán Seeded-Kmeans với phương pháp phân cụm phân cấp. Một tập dữ liệu { 1,..., }, d

N i

X = x x x ∈ℜ và tập giống SX , trong đó số lượng cụm K được đặt ra cho bài toán phân cụm là một giá trị không được xác định chắc chắn. Thuật toán K-Means phân cấp có nhiệm vụ dự đoán một giá trị K hợp lý nhất mà không làm đỗ vỡ cấu trúc cụm. Số cụm K được tìm trong khoảng [Kmin, Kmax]. Để tìm K chúng ta dùng mô hình phân cấp (Top-down) để tiến hành tách cụm và dự đoán K. Mà không dùng phương pháp lặp lại nhiều lần thuật toán SeededK- Means vì nó sẽ làm cho cấu trúc cụm bị xáo trộn và ta không biết khi nào thì giá trị K là tốt nhất. Qua các thí nghiệm hai tác giả đã chứng minh được rằng phương pháp K- Means phân cấp có chất lượng tốt hơn phương pháp SeededK-Means cả về phương diện tìm số cụm K, cả về cấu trúc cụm.

Thuật toán K-Means phân cấp lấy Kmin bằng số cụm giống (số loại nhãn lớp của tập giống) bởi vì trong phân cụm nửa giám sát dựa trên tập giống thì tập giống đó chỉ là một phần thông tin nhỏ nằm trong tập dữ liệu lớn X cần phân cụm, do vậy số

cụm giống luôn là giá trị nhỏ nhất trong các giá trị có thể có của số cụm K cần phân hoạch từ X. Kmax được cung cấp bởi người dùng và làm ngưỡng của điều kiện dừng cho thuật toán K-Means phân cấp.Và qua thí nghiệm hai tác giả đã chứng minh được rằng việc xác định Kmax không ảnh hưởng nhiều đến chất lượng của thuật toán K- Means phân cấp, và khi Kmax đạt đến một giá trị nhất định thì số cụm K dự đoán không thay đổi nữa.

Bước1 : Chạy thuật toán Seeded-KMeans để khởi ra Kmin cụm ban đầu (Kmin là số cụm giống)

Bước 2: Với mỗi cụm trong tập cụm hiện thời tiến hành tách đôi thông qua mô

hình phân cấp top-down và tiêu chuẩn BIC.

Bước 3: Lặp lại bước 2 cho đến khi BIC tổng thể (Total_BIC) không đổi

hoặc số cụm hiện tại lớn hơn hoặc bằng Kmax.

Hình 7: Seeded-KMeans khởi tạo 3

cụm ban đầu Hình 8: Dùng 2-KMeans để chia các cụm cha thành hai cụm con

Hình 9: Áp dụng tiêu chuẩn BIC Hình 10: Kết quả có 4 cụm

Thuật toán: K-Means phân cấp

Input: - Tập các đối tượng dữ liệu { 1,..., }, d

N i

X = x x x ∈ℜ

- Số lượng cụm tối đa Kmax - Tập giống min

1

K

h h

S=U = S

Output: K phân hoạch tách rời: { } 1

K h h

X = của X sao cho hàm mục tiêu được tối ưu.

Các bước: 1. Khởi tạo các cụm: h(0) 1 x Sh h x S µ ¬ ∑ ∈ , với h = 1,...Kmin; t←0. 2. Lặp cho tới khi hoàn thành

2.1 Lặp cho tới khi hội tụ

2.1.1 Gán cụm: Gán mỗi đối tượng dữ liệu x vào cụm h* với h* = argmin ( ) 2

|| t ||

h (adsbygoogle = window.adsbygoogle || []).push({});

x−µ

2.1.2 Ước lượng tâm: ( 1)

( 1) ( 1) 1 | | t h t h t x X h x X µ + + + ∈ ¬ ∑ 2.1.3 t ¬ t+1

2.2 Cập nhật giá trị BIC tổng thể (tất cả các cụm): Total_BIC 2.3 Với mỗi cụm có tâm µh

2.3.1 Chạy thuật toán KMeans để tách cụm h thành 2 cụm con h1 và h2.

2.3.2 Nếu (BIC(h1,h2) > BIC (h)) và (Tổng số tâm mới < = Tổng số tâm hiện tại) → Quyết định tách + Cập nhật các tâm mới

New_centers.

2.4 Tính giá trị BIC tổng thể mới trên các cụm mới: New_Total_BIC 2.5 Nếu New_Total_BIC> Total_BIC → cập nhật các tâm cũ µ =

* Tiêu chuẩn BIC (Bayesian Information Criterion)

Cho một tập dữ liệu X ={x1,...,xN} và tập hợp các mô hình Mi khác nhau. Với thuật toán K-Means phân cấp thì mỗi Mi ứng với một số lượng cụm K khác nhau. Nhiệm vụ đặt ra là phải chọn mô hình tốt nhất trong các mô hình Mi đó. Để đánh giá mô hình Mi người ta dùng tiêu chuẩn BIC được xác đinh như sau :

Mi là mô hình thứ i cần tính giá trị BIC

pi là số lượng tham số trong mô hình Mi

N là cỡ của tập dữ liệu X (số đối tượng trong tập dữ liệu)

ˆ ( )i

l X là likelihood của tập dữ liệu X theo mô hình thứ i tại điểm cực đại

likelihood .

Công thức (2) cho thấy BIC gồm 2 thành phần: pi.logN và ln ( ( ))l Xˆi . Như chúng ta đã biết, sự phức tạp (complexity) của một mô hình càng lớn khi số lượng tham số của mô hình đó càng tăng. Do đó thành phần pi.logN phản ánh sự phức tạp của mô hình Mi và sự phức tạp đó tăng tuyến tính theo số lượng tham số pi (vì N là không đổi). Trong khi đó thành phần ln ( ( ))l Xˆi đánh giá chất lượng bố trí (phù hợp) của các đối tượng dữ liệu trong mô hình Mi. Như vậy BIC phản ánh tính đơn giản của một mô hình và sự bố trí phù hợp các đối tượng dữ liệu trong mô hình đó. Khi đó mô hình Mi được xem là tốt nhất nếu nó có giá trị BIC M( i) lớn nhất. Trong K-Means phân cấp, tiêu chuẩn BIC được dùng ở hai công đoạn:

• Chọn mô hình cha hoặc mô hình con;

• Chọn mô hình chứa các cụm cũ hay mô hình chứa các cụm mới (đây là một điều kiện dừng thuật toán).

Chương 5 : GIỚI THIỆU VỀ NGÔN NGỮ VB 6.0

Ngôn ngữ lập trình Visual Basic 6.0 là một công cụ phát triển phần mềm. Visual Basic gắn liền với khái niệm lập trình trực quan (Visual), có nghĩa là khi thiết kế chương trình, ta nhìn thấy ngay kết quả qua từng thao tác và giao diện khi chương trình thực hiện. Đây là thuận lợi lớn so với các ngôn ngữ lập trình khác, Visual Basic

cho phép ta chỉnh sửa đơn giản, nhanh chóng màu sắc, kích thước, hình dáng của các đối tượng có mặt trong ứng dụng.

Một khả năng khác của Visual Basic chính là khả năng kết hợp các thư viện liên kết động DLL (Dynamic Link Library). DLL chính là phần mở rộng cho Visual Basic tức là khi xây dựng một ứng dụng nào đó có một số yêu cầu mà Visual Basic chưa đáp ứng đủ, ta viết thêm DLL phụ trợ.

Khi viết chương trình bằng Visual Basic, chúng ta phải qua hai bước: - Thiết kế giao diện (Visual Programming)

- Viết lệnh (Code Programming)

Một phần của tài liệu Đồ án tốt nghiệp Đại học hệ chính quy - Thuật toán Phân cụm dữ liệu nửa giám sát (Trang 34)