Hình 2.2: Phân cụm một tập các điểm dựa trên thuật toán K-Medoids

Một phần của tài liệu Thuật toán K-Prototypes trong phân loại bệnh nhân và đề xuất một cải tiến phân cụm (Trang 30)

trên các đối tượng trung tâm

Ví dụ: Giả sử có một tập đối tượng được định vị trong một hình chữ nhật được biểu diễn như Hình 2.2. Cho k = 3, tức là người dùng cần phân các đối tượng vào trong 3 cụm.

Theo thuật toán 2.2, ta chọn 3 đối tượng tùy ý (đánh dấu "+") với vai trò là 3 tâm cụm ban đầu. Sau đó mỗi đối tượng được phân bố vào các cụm

Đầu vào: Số cụm k và một cơ sở dữ liệu chứa n đối tượng.

Đầu ra: Một tập k cụm đã cực tiểu hóa tổng các độ đo không tương đồng của tất cả các đối tượng tới medoid gần nhất của chúng.

Thuật toán:

1) Chọn tùy ý k đối tượng giữ vai trò là các medoid ban đầu. 2) Repeat

3) Ấn định mỗi đối tượng vào cụm có medoid gần nó nhất.

4) Tính hàm mục tiêu – là tổng các độ đo không tương đồng của tất cả các đối tượng tới medoid gần nhất của chúng.

5) Đổi medoid x bằng một đối tượng y nếu như việc thay đổi này làm giảm hàm mục tiêu.

đã chọn dựa trên tâm cụm gần nó nhất. Một phân bố như vậy hình thành nên một hình chiếu được bao quanh bởi đường cong nét chấm, Hình 2.2a.

Kiểu nhóm này sẽ cập nhật các tâm cụm. Đó là medoid của mỗi cụm được tính lại dựa trên các đối tượng trong cụm. Với các tâm mới, các đối tượng được phân bố lại tới các cụm đã chọn dựa trên tâm cụm gần nhất. Sự phân bố lại này thiết lập một hình chiếu mới bởi đường cong nét đứt, Hình 2.2b.

Lặp lại việc xử lý này để dẫn tới Hình 2.2c. Cuối cùng, không xảy ra sự phân bố lại các đối tượng trong bất kỳ cụm nào và xử lý kết thúc. Các cụm cuối cùng là kết quả của xử lý phân cụm.

Khi có sự hiện diện của nhiễu và các outlier, phương pháp K-Medoids mạnh hơn K-Means bởi so với giá trị trung bình (mean), medoid ít bị ảnh hưởng hơn bởi các outlier hay các giá trị ở rất xa khác nữa. Tuy nhiên, xử lý của nó có chi phí tốn kém hơn phương pháp K-Means và nó cũng cần người dùng chỉ ra k – số cụm.

3. Thuật toán K-Prototypes

Như đã giới thiệu, thuật toán K-Prototypes được tích hợp từ 2 thuật toán K-Means và K-Modes để phân cụm dữ liệu với các thuộc tính hỗn hợp số và phân lớp. Một điểm khác biệt nữa là thuật toán K-Prototypes sử dụng các đối tượng mẫu (prototypes) để biểu diễn cho các cụm thay vì sử dụng các đối tượng trọng tâm như thuật toán K-Means.

Các đối tượng dữ liệu lần lượt được phân phối vào các cụm dữ liệu sao cho chúng tương tự nhất với đối tượng mẫu tương ứng với cụm dữ liệu mà chúng được phân phối, sự tương tự ở đây được xác định bằng độ đo tương đồng.

Thuật toán 2.3: Thuật toán K-Prototypes đối với việc phân chia dựa trên các đối tượng mẫu

Khai phá dữ liệu và nhà kho dữ liệu Trang 31

Đầu vào: Số cụm k và một cơ sở dữ liệu chứa n đối tượng.

Đầu ra: Một tập k cụm mẫu đã cực tiểu hoá hàm tiêu chuẩn.

Thuật toán:

1) Khởi tạo k trọng tâm ban đầu.

2) Phân phối mỗi đối tượng vào mỗi cụm sao cho chúng gần nhất với đối tượng mẫu của cụm, đồng thời cập nhật lại đối tượng mẫu cho mỗi cụm. 3) Repeat

4) Kiểm tra xem mỗi đối tượng trong cụm có đối tượng nào tương tự nhất với đối tượng mẫu mà khác với đối tượng mẫu hiện thời thì di chuyển đối tượng đó sang cụm mà nó tương tự nhất với đối tượng mẫu. Cập nhật lại trọng tâm

Chi tiết thuật toán được thể hiện bằng mã giả như sau:

Khai phá dữ liệu và nhà kho dữ liệu Trang 32

{---Tiến trình khởi tạo giá trị cho các tham biến toàn cục---} {---X là tập dữ liệu chứa n đối tượng, k là số cụm---}

Procedure Initial_K_Prototypes (k : integer)

Begin

For i =1 to k do prototype[i] = X[(i + (i-1)*(n div k)];

End;

{---Thủ tục khởi tạo phân hoạch ban đầu---}

Procedure Allocation (n: double)

Begin For i = 1 to n do Mindistance = Distance(X[i],O_prototypes[1]) + gamma * Sigma(X[i],C_prototypes[1]); For j = 1 to k do distance = Distance(X[i],O_prototypes[j]) + gamma * Sigma(X[i],C_prototypes[j]); If (distance < Mindistance) Mindistance = distance; cluster = j; End If End For Clustership[i] = cluster; ClusterCount[cluster] =+ 1; For j=1 to NumberOfNumericAttributes do SumInCluster[cluster,j] =+ X[i,j];

O_prototypes[cluster,j] = SumInCluster[cluster,j] / ClusterCount[cluster];

End For

For j=1 to NumberOfCategoricAttributes do

FrequencyInCluster[cluster,j,X[I,j]] =+ 1;

C_prototypes[cluster,j] = HighestFreq(FrequencyInCluster,cluster,j);

Khai phá dữ liệu và nhà kho dữ liệu Trang 33

{---Thủ tục phân phối lại các đối tượng dữ liệu cho các cụm---}

Procedure Re_Allcation (n : Double)

Begin Repeat moves = 0; For i = 1 to n do Mindistance = Distance(X[i],O_prototypes[1]) + gamma * Sigma(X[i],C_prototypes[1]); For j = 1 to k do distance = Distance(X[i],O_prototypes[j]) + gamma * Sigma(X[i],C_prototypes[j]); If (distance < Mindistance) Mindistance = distance; cluster = j; End If End For If (Clustership[i]<>cluster) moves =+ 1; oldcluster = Clustership[i]; Clustership[i] = cluster; ClusterCount[cluster] =+ 1; ClusterCount[oldcluster] =– 1; For j=1 to NumberOfNumericAttributes do SumInCluster[cluster,j] =+ X[i,j]; SumInCluster[oldcluster,j] =- X[i,j]; O_prototypes[cluster,j] = SumInCluster[cluster,j] / ClusterCount[cluster]; O_prototypes[oldcluster,j]= SumInCluster[oldcluster,j]/ClusterCount[oldcluster]; End For For j=1 to NumberOfCategoricAttributes do FrequencyInCluster[cluster,j,X[i,j]] =+ 1; FrequencyInCluster[oldcluster,j,X[i,j]] =– 1; C_prototypes[cluster,j] = HighestFreq(FrequencyInCluster, cluster,j); C_prototypes[oldcluster,j] = HighestFreq(FrequencyInCluster, oldcluster,j); End For End If End For

4. Các thuật toán phân cụm trong cơ sở dữ liệu lớn

Thuật toán phân chia K-Medoids điển hình như PAM làm việc hiệu quả đối với các tập dữ liệu nhỏ nhưng không có khả năng mở rộng tốt đối với các tập dữ liệu lớn. Để giải quyết với các tập dữ liệu lớn, một phương pháp dựa trên việc lấy mẫu gọi là CLARA (Clustering large applications) đã được phát triển bởi Kaufman và Rousseeuw, 1990.

Ý tưởng của CLARA như sau: thay vì lấy toàn bộ tập dữ liệu vào xem xét, chỉ một phần nhỏ dữ liệu thực được chọn với vai trò là một đại diện của dữ liệu và các medoid được chọn từ mẫu này bằng cách sử dụng PAM. Nếu như mẫu được chọn lựa khá ngẫu nhiên, nó đại diện phù hợp cho toàn bộ tập dữ liệu và các đối tượng đại diện (các medoid) được chọn do vậy sẽ giống với những cái được chọn lựa từ toàn bộ tập dữ liệu. CLARA đưa ra nhiều mẫu của tập dữ liệu, áp dụng PAM trên từng mẫu và mang lại phân cụm tốt nhất cho đầu ra. Đúng như mong đợi, CLARA có thể giải quyết với các tập dữ liệu lớn hơn PAM. Độ phức tạp của mỗi lần lặp bây giờ trở thành O(kS2+k(n - k)), với S là kích thước mẫu, k là số cụm, n là tổng số các điểm.

Hiệu quả của CLARA tùy thuộc vào kích thước mẫu. Lưu ý rằng PAM tìm kiếm cho k medoids tốt nhất giữa một tập dữ liệu cho trước, trong

khi đó CLARA tìm kiếm cho k medoids tốt nhất giữa các mẫu đã lựa chọn của tập dữ liệu. CLARA không thể tìm được phân cụm tốt nhất nếu như bất kỳ một medoid được lấy mẫu không nằm trong k medoids tốt nhất. Ví dụ, nếu như một đối tượng Oi là một trong số các medoid trong k medoids tốt nhất nhưng nó không được chọn trong suốt quá trình lấy mẫu, CLARA sẽ không bao giờ tìm thấy phân cụm tốt nhất. Một phân cụm tốt dựa trên các mẫu chưa chắc đã đại diện cho một phân cụm tốt cho toàn bộ tập dữ liệu nếu mẫu bị lệch (bias).

Để cải thiện chất lượng và khả năng mở rộng của CLARA, một thuật toán phân cụm khác gọi là CLARANS (Clustering Large Applications based upon RANdomized Search) được giới thiệu bởi Ng và Han, 1994. Nó cũng là một giải thuật kiểu K-Medoids và kết hợp kỹ thuật lấy mẫu với PAM. Tuy vậy, không giống như CLARA, CLARANS không hạn chế bản thân nó cho bất kỳ một mẫu nào tại bất kỳ thời điểm nào cho trước. Trong khi đó CLARA lại có một mẫu được ấn định tại mọi giai đoạn tìm kiếm, CLARANS đưa ra một mẫu một cách ngẫu nhiên trong mỗi bước tìm kiếm. Xử lý phân cụm được thực hiện như tìm kiếm một đồ thị tại mọi nút là giải pháp tiềm năng, tức là một tập K-Medoids. Phân cụm có được sau khi thay thế một medoid được gọi là láng giềng của phân cụm hiện thời. Số lượng các láng giềng được thử ngẫu nhiên bị hạn chế bởi một tham số. Nếu như một láng giềng tốt hơn được tìm thấy, CLARANS di chuyển tới láng giềng đó và xử lý lại bắt đầu lại; ngược lại, phân cụm hiện thời đưa ra một tối ưu cục bộ. Nếu như tối ưu cục bộ được tìm thấy, CLARANS bắt đầu với các nút được chọn lựa ngẫu nhiên mới để tìm kiếm một tối ưu cục bộ mới. Bằng thực nghiệm, CLARANS đã chỉ ra là hiệu quả hơn PAM và CLARA. Độ phức tạp tính toán của mỗi lần lặp trong CLARANS tỷ lệ tuyến tính với số lượng các đối tượng. CLARANS có thể được dùng để tìm số lượng lớn nhất các cụm tự nhiên sử dụng hệ số hình chiếu - đây là một đặc tính của các outlier, tức là các điểm mà không thuộc về bất kỳ cụm nào. Việc biểu diễn của giải thuật CLARANS có thể được cải thiện xa hơn nữa bằng cách

khảo sát các cấu trúc dữ liệu không gian, như R*-Trees, và nhiều kỹ thuật tập trung được theo các nghiên cứu của Ester, Kriegel và Xu 1995.

CHƯƠNG 3

CÀI ĐẶT THỬ NGHIỆM CHƯƠNG TRÌNH PHÂN LOẠI BỆNH NHÂN

Chương này thể hiện cài đặt thử nghiệm bằng thuật toán K-Prototypes trên bộ cơ sở dữ liệu khám bệnh và kết quả điều trị của bệnh viện Bà Rịa, Thành phố Bà Rịa, Tỉnh Bà Rịa – Vũng Tàu và đánh giá kết quả thực nghiệm.

1.Thiết kế tổng thể

Chương trình gồm các khối chức năng chính sau:

- Khối chức năng tiền xử lý: Nhiệm vụ của khối này là đọc, cập nhật, chỉnh sửa, hiển thị trực quan hình ảnh dữ liệu đầu vào.

- Khối chức năng phân cụm: Khối chức năng này tiến hành phân cụm các mẫu dữ liệu. Dữ liệu được xử lý theo thuật toán K-Prototypes, tiến hành xác định hiệu quả phân cụm.

- Khối chức năng kết quả: Cho phép người sử dụng xem trực quan kết quả phân cụm, in kết quả phân cụm, xem các thông số và trọng tâm của các cụm.

2.Chuẩn bị dữ liệu

Dữ liệu đầu vào của chương trình được lấy ngẫu nhiên 10% từ dữ liệu khám bệnh trong 9 tháng đầu năm 2012 tại bệnh viện Bà Rịa, Thành phố Bà Rịa, Tỉnh Bà Rịa - Vũng Tàu, gồm 2.242 bản ghi.

Tập dữ liệu

Module GetData

Các thông tin:

Số lớp, tên lớp.

Số thuộc tính, tên thuộc tính, kiểu hoặc các giá trị rời rạc của thuộc tính.

Module Phân cụm K-Prototypes Module Phân cụm K-Prototypes Cải tiến phân cụm Cải tiến phân cụm Hiển thị

Định dạng dữ liệu là cơ sở dữ liệu quan hệ được xây dựng trên hệ quản trị cơ sở dữ liệu MS SQL Express 2008.

Cấu trúc của bảng dữ liệu Patient ban đầu như sau:

Id Name Age Gender LevelOccupation ResultTreatment IdDeparment

BN1000 PHẠM THỊ VY 43 Nữ An Toàn Thuyên Giảm CTCH

BN1001 NGUYỄN THỊ NGÀ 85 Nữ Trung Bình Thuyên Giảm RHM

BN1002 NGUYỄN XUÂN DIỆM 70 Nam Nguy Hiểm Khỏi Bệnh RHM

BN1003 LÊ THỊ NHẪN 48 Nữ Trung Bình Khỏi Bệnh TM

BN1004 TRẦN THỊ NA 38 Nữ An Toàn Khỏi Bệnh TM

BN1005 BÙI TRỌNG DŨNG 67 Nam An Toàn Thuyên Giảm RHM

BN1006 TRẦN KIM ĐẠI 57 Nam An Toàn Nặng Hơn TK

BN1007 NGUYỄN THỊ BIỀN 76 Nữ Trung Bình Thuyên Giảm RHM

Bảng 3.1: Bảng dữ liệu Patient

Cấu trúc của bảng dữ liệu InputPatient sau khi làm sạch như sau:

IdPatien

t AgePatient GenderPatient LevelOccupation ResultTreatment IdDepartment

BN01 24 Nam 2 2 TN BN02 35 Nam 3 5 TK BN03 32 Nữ 3 1 PS BN04 27 Nữ 2 1 PS BN05 10 Nam 1 1 RHM BN06 16 Nam 1 2 M BN07 68 Nữ 1 4 M BN08 27 Nữ 2 2 TN BN09 15 Nam 1 3 TM BN10 13 Nam 1 3 TM BN100 43 Nam 3 2 CTCH BN101 47 Nam 2 2 CTCH BN102 22 Nữ 1 3 TK BN103 34 Nam 3 2 CTCH Bảng 3.2: Bảng dữ liệu InputPatient 3.Thiết kế ứng dụng

Với các khối chức năng và dữ liệu như trên, chương trình được thiết kế theo sơ đồ khối như sau:

Hình 3.1: Sơ đồ khối của ứng dụng

Một phần của tài liệu Thuật toán K-Prototypes trong phân loại bệnh nhân và đề xuất một cải tiến phân cụm (Trang 30)

Tải bản đầy đủ (DOCX)

(51 trang)
w