K-means adalah algoritma pengelompokan tanpa pengawasan standar, yang, diberikan satu set "titik" dan sejumlah kluster K, akan menetapkan setiap "titik" ke salah satu kluster K.
Pseudo-Code of K-means
Perhatikan bahwa ada banyak varian K-means. Anda harus mengimplementasikan algoritma yang saya jelaskan di bawah ini. Anda mungkin memiliki beberapa variasi pada algoritma atau menggunakan built-in selama Anda akan mendapatkan hasil yang sama seperti algoritma ini diberi poin awal yang sama.
Dalam tantangan ini, semua input akan menjadi titik pada bidang 2D (setiap titik diwakili oleh koordinatnya dalam x dan 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
Masukan dan keluaran
- Anda dapat mengambil K dan P melalui
STDIN
, atau sebagai argumen fungsi, dll. - P dan titik-titik dalam P dapat direpresentasikan menggunakan struktur apa pun yang alami untuk set / daftar dalam bahasa pilihan Anda.
- K adalah bilangan bulat yang benar-benar positif.
- Anda dapat berasumsi bahwa input tersebut valid.
- Akan selalu ada setidaknya poin K di P.
- Anda dapat menampilkan cluster untuk
STDOUT
, mengembalikannya dari suatu fungsi, dll. - Pemesanan cluster dan pemesanan di dalam cluster tidak penting. -Anda dapat mengembalikan kelompok titik untuk mewakili kelompok, atau setiap titik yang dilabeli dengan pengidentifikasi untuk gugus (misalnya bilangan bulat).
Uji kasus
Karena cluster yang dihasilkan tergantung pada titik mana yang awalnya dipilih, Anda mungkin tidak semua mendapatkan hasil yang sama (atau hasil yang sama setiap kali Anda menjalankan kode Anda).
Karena itu, ambil saja output sebagai contoh output.
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]]]
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
1
, semua poin dari yang kedua memiliki label 2
dll)
K=2, P = [[1,1], [1,1], [1,1]]
.