
Khơi dậy những tiềm năng bị lãng quên

Centroid Neural Network (CentNN) là thuật toán phân cụm hiệu quả và ổn định đã được áp dụng thành công cho nhiều bài toán. CentNN không yêu cầu hệ số học (learning coefficient) được xác định trước nhưng vẫn mang lại kết quả phân cụm cạnh tranh so với K-means Clustering và Self-Organization Map (SOM) khi mà những thuật toán này có kết quả phụ thuộc phần lớn vào các tham số ban đầu. Đối với những bạn đọc chưa biết hoặc chưa hiểu về thuật toán tuyệt vời này, bạn có thể đọc bài viết diễn giải của tôi cho thuật toán CentNN với các ví dụ trực quan tại đây. Còn bây giờ, hãy bắt tay vào lập trình thuật toán này nào.
Tôi chọn bài toán phân cụm dữ liệu 2 chiều (2-d) làm ví dụ giải thích trong bài viết này vì tính dễ hiểu, dễ nhìn, và vì đây là một công cụ hiệu quả để giải thích các thuật toán phân cụm.
Đầu tiên, hãy khao báo một vài thư viện cần thiết và tạo một bộ dữ liệu 2 chiều với 10 trọng tâm.
Một số chương trình con được chuẩn bị trước cho phần lập trình thuật toán CentNN ở sau, bạn đọc có thể tìm tất cả những source code này ở trang github của tôi tại đây.
Một lần nữa, tôi giả sử rằng tất cả các bạn đều đã hiểu thuật toán CentNN. Nếu không, tôi khuyên bạn nên đọc phần lý thuyết trước khi tiếp tục. Bạn có thể xem qua lời giải thích của tôi cho thuật toán này tại đây.
Còn chờ gì nữa, triển thôi!
Tìm trọng tâm c cho tất cả dữ liệu, sau đó phân tách c thành 2 trọng số w1, w2 với một giá trị nhỏ Ɛ.
Đây là 2 trọng số có được:
[0.43965411 2.88785116]
[0.33965411 2.78785116]
Tính “winner neuron” cho mỗi x trong X.
Đây là kết quả sau epoch 0:
Từ epoch 1 đến khi hội tụ, tiếp tục tìm “winner neuron” cho mỗi dữ liệu và cập nhật “winner neuron” và “loser neuron” cho đến khi đạt đến số lượng cụm mong muốn.
Thuật toán hội tụ sau 81 epoch cho bộ dữ liệu mẫu đã tạo:
Kết quả cuối cùng:
Các trọng tâm cụm tìm được:
[-9.66726188 6.62956078]
[-8.57296482 -8.31582399]
[ 9.30888233 -2.32652503]
[5.82090263 0.57715316]
[5.55404696 7.36294438]
[-1.32316256 7.86651609]
[-1.63557118 2.87845278]
[2.08983389 0.85729017]
[1.47692106 8.56662456]
[0.90838486 4.30719839]