K-평균(Means) 클러스터링 알고리즘

K-평균은 클러스터링 알고리즘으로, 데이터 사이언티스트를 위한 가장 간단하면서도 가장 널리 사용되는 비지도 머신 러닝(ML) 알고리즘 중 하나입니다.

 

K-평균이란?

비지도 학습 알고리즘은 레이블이 지정되지 않은 데이터 세트에서 패턴을 '학습'하여 유사성 또는 규칙성을 발견하려고 시도합니다. 일반적인 비지도 작업에는 클러스터링과 연관이 포함됩니다. K-평균과 같은 클러스터링 알고리즘은 다른 클러스터에 있는 객체와 유사한 정도보다 같은 클러스터에 있는 객체들이 서로 더 유사하도록 객체를 그룹화하여 데이터 세트 내에서 유사성을 발견합니다. 클러스터로의 그룹화는 최소 거리, 데이터 포인트의 밀도, 그래프, 다양한 통계 분포 등의 기준을 사용하여 수행됩니다. 

K-평균은 기하학적 포인트들 사이의 평균 거리를 최소화하여 유사한 데이터 포인트들을 클러스터로 그룹화합니다. 이를 위해 데이터 세트를 일정 수(K)의 겹치지 않는 하위 그룹(또는 클러스터)으로 반복적으로 분할합니다. 이때 각 데이터 포인트는 평균 클러스터 중심이 가장 가까운 클러스터에 속합니다. 

K-평균을 사용하는 이유는?

클러스터링 알고리즘인 K-평균은 데이터 내에서 명시적으로 레이블이 지정되지 않은 그룹을 찾기 위해 배포됩니다. 현재 다음과 같은 다양한 비즈니스 응용 사례에서 활발히 사용되고 있습니다.

  • 고객 세분화: 제품 및 서비스를 더 잘 맞춤화하기 위해 고객을 그룹화할 수 있습니다.
  • 텍스트, 문서 또는 검색 결과 클러스터링: 텍스트에서 주제를 찾기 위한 그룹화
  • 이미지 그룹화 또는 이미지 압축: 유사한 이미지 또는 색상으로 그룹화
  • 이상 탐지: 유사하지 않은 것 또는 클러스터에서 벗어난 이상치 찾기
  • 준지도 학습: 더 가치 있는 결과를 얻기 위해 클러스터를 레이블이 지정된 데이터로 구성된 더 작은 데이터 세트 및 지도 머신 러닝과 결합합니다.

K-평균의 작동 방식

K-평균 알고리즘은 데이터 세트 내에서 특정 수의 중심을 식별합니다. 중심은 특정 클러스터에 속하는 모든 데이터 포인트의 산술 평균입니다. 그런 다음 알고리즘은 클러스터를 가능한 한 작게 유지하려 하므로 모든 데이터 포인트를 가장 가까운 클러스터에 할당합니다. (K-평균의 '평균'은 데이터의 평균값을 구하는 작업 또는 중심을 찾는 작업을 의미합니다.) 동시에 K-평균은 다른 클러스터를 가능한 한 다르게 유지하려 합니다.

실제로 다음과 같은 방식으로 작동합니다.

  • K-평균 알고리즘은 모든 좌표를 'K' 클러스터 센터로 초기화하는 방식으로 시작됩니다. (K 수치는 입력 변수이며 위치를 입력으로 지정할 수도 있습니다.)

  • 알고리즘의 매 패스(pass)마다 각 포인트는 가장 가까운 클러스터 중심으로 할당됩니다.

With every pass of the algorithm, each point is assigned to its nearest cluster center.

  • 그런 다음 해당 패스에서 클러스터에 할당된 모든 포인트의 '중심'이 되도록 클러스터 중심을 업데이트합니다. 이 작업은 각 클러스터에 속한 포인트들의 평균값으로 클러스터 중심을 다시 계산하여 수행됩니다.
  • 이 알고리즘은 직전 반복으로부터 클러스터의 중심 변화가 거의 없을 때까지 반복됩니다.

K-평균은 클러스터들이 균일한 구형 모양인 경우 구조를 파악하고 데이터 추론을 생성하는 데 매우 효과적입니다. 그러나 클러스터들의 기하학적 모양이 더 복잡한 경우에는 알고리즘의 데이터 클러스터링이 효과적으로 작동하지 않습니다. K-평균 알고리즘의 또 다른 단점은 서로 멀리 떨어진 데이터 포인트들이 동일한 클러스터를 공유하는 것을 허용하지 않는다는 점입니다. 해당 데이터 포인트들이 해당 클러스터에 속하는지 여부를 고려하지 않습니다. K-평균은 데이터에서 클러스터의 수를 스스로 학습하는 것이 아니라 이 정보가 사전 정의되어야 합니다. 마지막으로 클러스터 간에 겹침이 있을 때 K-평균은 겹치는 부분에 위치한 데이터 포인트를 할당하는 방법을 결정할 수 없습니다.

데이터 사이언티스트를 위한 K-평균

본질적인 단순성과 비지도 머신 러닝 작업에서 널리 사용되며, K-평균은 데이터 사이언티스트들로부터 호평을 받아 왔습니다. 데이터 마이닝 작업에 적용할 수 있어, 알고리즘의 한계에도 불구하고, 데이터 사이언티스트들은 이를 활용하여 비즈니스 데이터에서 다양한 추론을 도출하고 더 정확한 데이터 기반 의사결정을 지원할 수 있습니다. 데이터 사이언티스트 사이에서는 비즈니스에 가장 중요한 알고리즘 중 하나로 여겨지고 있습니다.

GPU를 사용한 클러스터링 가속화

클러스터링은 다양한 사용 사례에서 중요한 역할을 하지만, 데이터양이 지속적으로 증가하면서 연산 문제에 직면해 있습니다. GPU를 이용한 병렬 컴퓨팅은 이러한 연산 문제를 해결해 줄 가장 유망한 솔루션 중 하나입니다.

구조적으로 볼 때, CPU는 단 몇 개의 코어와 많은 캐시 메모리로 구성되어 있어 한 번에 처리할 수 있는 소프트웨어 스레드가 적습니다. 반대로 GPU는 수백 개의 코어로 구성되어 있어 수천 개의 스레드를 동시에 처리할 수 있습니다. GPU는 고도의 병렬성과 메모리 액세스 대역폭 측면의 이점으로 인해, 특히 데이터 집약적 분석을 가속화하는 데 이상적인 도구입니다. 

The difference between a CPU and GPU.

 

GPU 가속 엔드투엔드 데이터 사이언스

CUDA를 기반으로 하는 오픈 소스 소프트웨어 라이브러리인 RAPIDS™ 제품군을 사용하면 Pandas 및 Scikit-learn API와 같은 익숙한 파이썬 인터페이스를 계속 사용하면서 엔드투엔드 데이터 사이언스 및 분석 파이프라인을 전적으로 GPU에서 실행할 수 있습니다. 

RAPIDS의 cuML 머신 러닝 알고리즘과 수학적 프리미티브는 Scikit-learn과 같은 익숙한 API를 따릅니다. K-평균, XGBoost 등과 같은 인기 있는 알고리즘은 단일 GPU와 대규모 데이터센터 배포 모두에서 지원됩니다. 대규모 데이터 세트의 경우, GPU 기반 구현은 CPU 기반 구현보다 10~50배 더 빨리 완료될 수 있습니다.

cuML-GG는 Dask 프레임워크의 사용 편의성과 성능 민감형 데이터 전송을 위해 고도로 최적화된 OpenUCX 및 NCCL 라이브러리를 결합합니다. K-평균 클러스터링은 이 라이브러리를 기반으로 구축된 첫 번째 알고리즘입니다. 익숙한 Scikit-learn 스타일의 API를 제공하지만, 이더넷 또는 Infiniband를 사용하는 GPU와 노드에서 거의 선형적으로 확장됩니다. 한 쌍의 DGX-1 서버에서 k-Means-GG는 대규모 클러스터링 문제의 실행 시간을 CPU 기반 630초에서 GPU 기반 7.1초로 단축할 수 있습니다. 

End-to-end data science and analytics pipelines entirely on GPUs

RAPIDS GPU DataFrame을 사용하면 Pandas와 같은 인터페이스를 사용하여 데이터를 GPU에 로드한 다음, 절대 GPU를 떠나지 않고 이 데이터를 연결된 다양한 머신 러닝 및 그래프 분석 알고리즘에 사용할 수 있습니다. Apache Arrow와 같은 라이브러리를 통해 이러한 수준의 상호 운용성이 가능합니다. 이를 통해 데이터 준비부터 머신 러닝과 딥 러닝에 이르는 엔드투엔드 파이프라인을 가속화할 수 있습니다. 

RAPIDS는 많이 사용되는 여러 데이터 사이언스 라이브러리 간에 장치 메모리를 공유할 수 있도록 지원합니다. 그래서 GPU에 데이터가 유지되므로, 호스트 메모리에 반복적으로 복사하느라 높은 비용을 들일 필요가 없습니다.

Popular data science libraries.