K-mean là một thuật toán phân cụm không giám sát tiêu chuẩn, với một tập hợp các "điểm" và một số cụm K, sẽ gán mỗi "điểm" cho một trong các cụm K.
Mã giả của K-nghĩa
Lưu ý rằng có nhiều biến thể của K-nghĩa. Bạn phải thực hiện thuật toán tôi mô tả dưới đây. Bạn có thể có một số biến thể về thuật toán hoặc sử dụng các hàm dựng sẵn miễn là bạn sẽ nhận được kết quả tương tự như thuật toán này có cùng điểm ban đầu.
Trong thử thách này, tất cả các đầu vào sẽ là các điểm trên mặt phẳng 2D (mỗi điểm được biểu thị bằng tọa độ của nó theo x và y).
Inputs: K, the number of clusters
P, the set of points
Choose K points of P uniformly at random
Each chosen point is the initial centroid of its cluster
Loop:
For each point in P:
Assign to the cluster whose centroid is the nearest (Euclidean distance)
In case of a tie, any of the tied cluster can be chosen
Recompute the centroid of each cluster:
Its x coordinate is the average of all x's of the points in the cluster
Its y coordinate is the average of all y's of the points in the cluster
Until the clusters don't change from one iteration to the next
Output: the set of clusters
Đầu vào và đầu ra
- Bạn có thể đưa K và P qua
STDIN
hoặc làm đối số hàm, v.v. - P và các điểm trong P có thể được biểu diễn bằng bất kỳ cấu trúc tự nhiên nào cho tập hợp / danh sách theo ngôn ngữ bạn chọn.
- K là một số nguyên dương hoàn toàn.
- Bạn có thể cho rằng đầu vào là hợp lệ.
- Sẽ luôn có ít nhất K điểm trong P.
- Bạn có thể xuất các cụm thành
STDOUT
, trả chúng từ một hàm, v.v. - Thứ tự của các cụm và thứ tự bên trong các cụm là không quan trọng. -Bạn có thể trả về các nhóm điểm để thể hiện các cụm hoặc mỗi điểm được gắn nhãn với một mã định danh cho cụm (ví dụ: một số nguyên).
Các trường hợp thử nghiệm
Vì các cụm kết quả phụ thuộc vào điểm ban đầu được chọn, nên bạn có thể không nhận được cùng một kết quả (hoặc kết quả giống nhau mỗi khi bạn chạy mã của mình).
Do đó, chỉ lấy đầu ra làm đầu ra ví dụ.
Input:
K = 1
P = [[1,2.5]]
Output:
[[[1,2.5]]]
Input:
K = 3
P = [[4,8], [15,16], [23,42], [-13.37,-12.1], [666,-666]]
Output:
[[[666,-666]],[[-13.37,-12.1],[4,8]],[[15,16],[23,42]]]
Input:
K = 2
P = [[1,1], [1,1], [1,1]]
Output:
[[[1,1]],[[1,1],[1,1]]]
Chấm điểm
Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng.
1
, tất cả các điểm của cụm thứ hai đều có nhãn, 2
v.v.)
K=2, P = [[1,1], [1,1], [1,1]]
.