K- 평균 은 표준 비 감독 클러스터링 알고리즘으로, "포인트"세트와 여러 클러스터 K가 주어지면 각 "포인트"를 K 클러스터 중 하나에 할당합니다.
K- 평균의 의사 코드
K- 평균에는 많은 변형이 있습니다. 아래에서 설명하는 알고리즘을 구현해야합니다. 동일한 초기 포인트가 주어지면이 알고리즘과 동일한 결과를 얻는 한 알고리즘에 약간의 변형이 있거나 내장 기능을 사용할 수 있습니다.
이 문제에서 모든 입력은 2D 평면의 점이됩니다 (각 점은 x와 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
입력 및 출력
- K 및 P를 통해
STDIN
또는 함수 인수 등으로 사용할 수 있습니다. - P와 P의 점은 선택한 언어의 세트 / 목록에 자연스러운 구조를 사용하여 표현할 수 있습니다.
- K는 양의 정수입니다.
- 입력이 유효하다고 가정 할 수 있습니다.
- P에는 항상 최소 K 점이 있습니다.
- 에 클러스터를 출력
STDOUT
하거나 함수에서 클러스터 등을 반환 할 수 있습니다. - 클러스터의 순서와 클러스터 내부의 순서는 중요하지 않습니다. -군집을 나타 내기 위해 점 그룹을 반환하거나 군집 식별자 (예 : 정수)로 레이블 된 각 점을 반환 할 수 있습니다.
테스트 사례
결과 군집은 처음에 선택한 점에 따라 다르므로 코드를 실행할 때마다 같은 결과를 얻지 못할 수도 있습니다.
따라서 출력을 예제 출력으로 만 사용하십시오.
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]]]
채점
이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
1
모든 지점 에는 레이블 이 있고 두 번째 클러스터의 모든 지점에는 레이블이 있습니다. 2
)
K=2, P = [[1,1], [1,1], [1,1]]
.