ai 이론에 대해서 마저 작성하겠다.
k 평균 4단계 알고리즘
:일반적으로 임의의 차원 공간에 있는 두 데이터 포인트 x와 y 사이의 유클리디안 거리 혹은 유클리디안 거리 제곱 지표를 기반하여, 간단한 최적화 문제로 k평균 알고리즘을 설명할 수 있다. 즉, k-means도 최적화 문제라고 할 수 있다
어떻게 최적화를 시키냐?
:클러스터 내의 제곱 오차합(SSE)를 반복적으로 최소화하는것
:d(x,u)에서 u라는 기호는 임의의 클러스터의 대표 센트로이드(중심), x는 임의의 점?, d는 둘 사이의 거리라는 뜻
:w라는 값은 측정하려는 데이터와 클러스터에 의해 데이터가 클러스터 내에 있다면 1, 아니면 0의 값 출력.
:또 유클리디안 거리 제곱 방식을 통해 알고리즘의 두번째 단계처럼 센트로이드와 가장 가까운 데이터에 대하여 클러스터의 센트로이드 간 거리를 계산하게 됨 이렇게 계산된 값이 클러스터 내의 오차 제곱합이 되는 것.
:종합해 보면, 각 데이터를 가장 가까운 센트로이드에 할당할 때마다, 센트로이드는 이동하게 됨. 이렇게 센트로이드가 변화할 때마다 이러한 오차 제곱합을 반복적으로 계산하면서 변화량에 대한 허용 오차값이 일정 수준내로 들어온다면 더이상 클러스타가 변화하지 않는다는 뜻이고 최적화가 완료되었다는 뜻
:각 점들간의 거리를 측정할 때, 점들간의 단위와 변동폭이 크다면 당연히 왜곡이 일어날 수 있다.
:이러한 경우 왜곡을 줄이고자, 거리 산출 시 불필요한 항목간의 특성을 제거하고, 단위를 일치시키는 '표준화' 과정을 진행해주시면 좀 더 좋은 결과를 가져 올 수 있다.
fit_predict 는 군집분석 알고리즘에 의한 예측 클래스 레이블
:k평균 군집 알고리즘의 또 다른 문제점
:초기 센트로이드를 설정할 때, 랜덤으로 위치를 선정하다보니, 애초에 잘못 선정된 곳에서 시작한 경우와 더불어 데이터가 적은 악조건이 붙게 된다면 클러스터의 성능이 매우 불안정 해지게 된다
:우리가 가진 데이터가 시각화가 가능한 차원의 데이터가 아닌 고차원의 데이터인 경우, 임의의 k값 설정은 여전히 위험 부담이 크다
:또한 k 평균 은 이러한 특징을 가정하는데 이러한 특징과 가정은 생각보다 큰 리스크를 불러올 수 있다. 예를 들어 다차원의 경우가 아니더라도 데이터가 꼭 하나의 클러스터에만 구분되리란 법은 없으니까.
:그럼 이러한 특징과 가정 극복은 힘들지만 적어도 초기 센트로이드만은 현명하게 할당할 수 있는 k 평균 ++ 알고리즘이 개발됨.
K-means++
:코드에 나온 값이 기본값임.
:이 기법의 핵심은 초기 센트로이드가 서로 멀리 떨어지도록 위치시키는 것. 이는 기본 k 평균보다 훨씬 일관되고 좋은 결과를 보여줌
inertia
:비지도 학습은 정답이 없기 때문에 지금처럼 군집을 이뤘다 한들 최종 답을 모른다. 즉 지도학습의 성능 평가 기법을 적용할 수 없다. 그래서 군집 품질을 평가해야 하는 경우 알고리즘 자체의지표를 사용해야함.
:예를 들어 k평균 군집의 성능을 비교하기 위해서는 클러스터 내 오차 제곱합을 사용함. 다행이도 이 지표를 손쉽게 구해주는 방법이 있는데, 바로 사이킷런을 사용하는 것.
:앞서 kmeans 모델 학습을 진행한 객체가 있는데, 이 안에는 '관성'이란 뜻을 가진 inertia_ 속성에 이미 계산이 완료되어 있다.
:출력 값은 70 점대의 값이지만, 이 값이 적절한 값인지는 k를 다양한 값으로 할당한 후에 외곡값을 비교해봐야 됨 이러한 방식이 엘보우 방식
엘보우 방법
:최적인 클러스터 개수 k를 추정
:직관적으로 생각을 해보면 k값의 증가는 센트로이드가 늘어나는 것이고, 이는 데이터들이 센트로이드에 더 가까워 지는 것이니 자연스럽게 왜곡값이 줄어들 것이라 생각할 수 있다. 그리고 이 기법의 이면에 있는 아이디어가 바로 왜곡이 빠르게 증가하는 지점의 k값을 찾는 것. 그럼 적절한 k 값을 추정하기 위해 k를 1부터 10까지 구축해보고 각각의 SSE 값을 한번 시각화 해보자
8.실루엣 분석
:클러스터 내 데이터들이 얼마나 조밀하게 모여있는지를 측정하는 그래프 도구
:공식을 자세히 보면 응집력과 분리도가 같다면 실루엣 계수는 0이 된다.
:응집력 보다 분리도가 크다면 이상적인 실루엣 계수 1에 가깝게 된다.
:분리도는 데이터가 다른 클러스터와 얼마나 다른지를 나타내고, 응집력은 클러스터 내 다른 샘플과 얼마나 비슷한지를 나타내기 때문
:응집력은 작을 수록 클러스터 내 다른 데이터들과 비슷하다는 뜻
:그리고 만약 두 값이 같다면 클러스터는 중첩되어 있다는 의미가 된다.