BuNa_
IT Story
BuNa_
전체 방문자
오늘
어제
  • 분류 전체보기 (117)
    • CS (14)
      • 운영체제 (8)
      • 네트워크 (0)
      • Design Pattern (1)
      • OOP (4)
    • 대외활동 (24)
      • 우아한테크코스 (14)
      • DND 동아리 (4)
      • UMC 동아리 (5)
      • 해커톤 (1)
    • Android (29)
      • MVVM (2)
      • 스터디 (11)
      • Compose (3)
      • Unit Test (1)
    • Project (5)
      • 어따세워 (5)
      • DnD 과외 서비스 (0)
    • Programming (11)
      • Kotlin (4)
      • 파이썬 (7)
    • Git (1)
    • 인공지능 (22)
    • 백준 (8)
    • 기타 (3)
      • IntelliJ (1)
      • 일상 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 우테코 5기
  • 인공지능
  • Compose
  • External fragmentation
  • UMC
  • 객체지향 생활체조
  • 컴공선배
  • 어따세워
  • 파이썬
  • 백준
  • RecyclerView
  • 외부 단편화
  • 딥러닝
  • MVVM
  • 안드로이드
  • Baekjoon
  • 셀레니움
  • K-means
  • 선형회귀
  • ViewModel
  • 우테코
  • 인공지능 분류
  • 원시값 포장
  • Ai
  • Android
  • k-means++
  • 우테코 프리코스
  • 다이나믹 프로그래밍
  • 우아한테크코스
  • 운영체제

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
BuNa_

IT Story

[인공지능][개념] K-Means 알고리즘의 문제점과 'K-Means++ 클러스터링'을 통해 개선하기
인공지능

[인공지능][개념] K-Means 알고리즘의 문제점과 'K-Means++ 클러스터링'을 통해 개선하기

2021. 5. 24. 11:44

 

 

K-평균(K-Means)에 대한 이론이 필요하신 분들은 아래 링크를 참조해주시기 바랍니다.

[인공지능][개념] K-평균(K-means) 알고리즘과 군집화(Clustering) + 이너셔(Inertia) 이해하기 : https://itstory1592.tistory.com/17

[인공지능][실습] K-평균(K-Means) 알고리즘으로 과일(fruits) 사진을 분류해보고 엘보우(Elbow) 방법을 통해 최적의 k값을 찾아보자 : https://itstory1592.tistory.com/18

 

 

 

이번 포스팅에서는 지난 시간에 이어 K-Means++ 알고리즘에 대해 알아보도록 하자!

K-Means++ 알고리즘은 기존 K-Means 알고리즘을 개선한 분류 알고리즘이다.

 

 

그런데 왜 K-Means++ 알고리즘이 생겨나게 된걸까??

 

'K-Means 알고리즘이 있는데, 그냥 이 알고리즘 쓰면 안되나?'

 

기존에 사용하던 K-Means 알고리즘은 다음과 같은 문제점이 있다.

 

1. 클러스터 중심(센트로이드)을 초기에 랜덤하게 위치시키기 때문에, 매번 결과가 달라질 수도 있다.

2. 한 번에 k개의 센트로이드를 랜덤하게 생성하기 때문에, 각 센트로이드 사이의 거리가 짧으면 분류가 제대로 이루어지지 않을 수 있다.

 

 

위와 같이, K-Means 알고리즘은 랜덤하게 센트로이드를 생성한다는 이유로 쉽고 빠르게 연산을 할 수 있지만,

랜덤하다는 이유로 결과 값이 매번 달라지며, 결과가 좋지 않을 수도 있다는 것이다.

 

이런 단점을 개선하기 위해 새롭게 구상된 방법이 바로 K-Means++ 알고리즘이다.

 

 

K-Means++


 

 

K-Means++ 알고리즘의 원리는 아래의 과정과 같다.

해당 과정은 총 4가지로 정리할 수 있다.

 

'☆ 모양'의 데이터가 첫번째로 무작위 선정된 센트로이드(Centroid)이다.

 

1. 센트로이드를 한 번에 k개 모두 생성하는 것이 아니라, 데이터 포인터 중에서 무작위로 '1개'를 선택하여, 이 데이터를 첫 번째 센트로이드로 지정한다.

 

 

첫번째로 생성한 센트로이드와 나머지 데이터 포인트 사이의 거리를 구한다. 

 

2. 나머지 데이터 포인터들과 센트로이드 사이의 거리를 계산한다.

 

 

거리 비례 확률에 따라 생선된 k개의 센트로이드

 

3. 그다음 생성할 센트로이드들의 위치는, 데이터 포인터들과 2번 과정에서 계산한 센트로이드 사이의 거리비례 확률에 따라 선정된다.

(데이터 사이의 거리에서 최대한 먼 곳에 다음 센트로이드를 생성한다는 뜻이다.)

 

4. 위 과정을 k번 반복하여 총 k개의 센트로이드를 생성한다.

 

위 내용을 정리해보자면, 한 번에 k개의 센트로이드를 생성하는 것이 아니라, 센트로이드 사이의 거리를 최대한 멀리 위치시키는 방향으로 1개씩 총 k번 반복하여 k개의 클러스터를 만들어낸다는 뜻이다.

 

 

그렇다면 기존 K-Means 알고리즘과 사용 방식이 많이 다를까?

편리하게도 사이킷런(sklearn)에서는 K-Means++ 알고리즘을 보다 쉽게 사용할 수 있도록 제공해준다.

 

K-Means

from sklearn.cluster import KMeans

km = KMeans(init='random', n_clusters=3, random_state=42)
km.fit(fruits_2d)

 

K-Means++

from sklearn.cluster import KMeans

km = KMeans(init='k-means++', n_clusters=3, random_state=42)
km.fit(fruits_2d)

 

기존 K-Means의 코드에서 init 매개변수를 보면 'random'으로 설정되어 있다.

이 코드를 단순히 'k-means++'로 변경하기만 하면 위에서 설명한 과정을 알아서 수행해준다.

 

 

 

(이해가 다소 힘들거나, 틀린 부분이 있다면 댓글 부탁드리겠습니다! 😊)

💖댓글과 공감은 큰 힘이 됩니다!💖

저작자표시 비영리 변경금지 (새창열림)

'인공지능' 카테고리의 다른 글

[인공지능][개념&실습] 인공 신경망(ANN)에 대해 알아보고 패션 MNIST 데이터셋으로 패션 아이템을 분류해보자  (16) 2021.05.27
[인공지능][개념&실습] 차원 축소 알고리즘 - 주성분 분석(PCA)을 알아보고 사진의 크기를 줄여보자  (2) 2021.05.25
[인공지능][실습] K-평균(K-Means) 알고리즘으로 과일(fruits) 사진을 분류해보고 엘보우(Elbow) 방법을 통해 최적의 k값을 찾아보자  (2) 2021.05.23
[인공지능][개념] K-평균(K-means) 알고리즘과 군집화(Clustering) + 이너셔(Inertia) 이해하기  (0) 2021.05.21
[인공지능][개념&실습] 트리의 앙상블(Ensemble)[2] - 엑스트라 트리(Random Forest)와 (+ 히스토그램 기반) 그레이디언트 부스팅  (2) 2021.05.20
    '인공지능' 카테고리의 다른 글
    • [인공지능][개념&실습] 인공 신경망(ANN)에 대해 알아보고 패션 MNIST 데이터셋으로 패션 아이템을 분류해보자
    • [인공지능][개념&실습] 차원 축소 알고리즘 - 주성분 분석(PCA)을 알아보고 사진의 크기를 줄여보자
    • [인공지능][실습] K-평균(K-Means) 알고리즘으로 과일(fruits) 사진을 분류해보고 엘보우(Elbow) 방법을 통해 최적의 k값을 찾아보자
    • [인공지능][개념] K-평균(K-means) 알고리즘과 군집화(Clustering) + 이너셔(Inertia) 이해하기
    BuNa_
    BuNa_
    안드로이드 개발자를 향해 달리고 있는 공대생입니다! 🧑 Android, Kotlin, Java, Python 등 학습하고 있는 내용과 프로젝트를 주로 업로드하고 있습니다. 지적과 조언은 언제나 환영입니다!😊 github : https://github.com/tmdgh1592

    티스토리툴바