살콤아내 자기계발/파이썬

파이썬 머신러닝완벽가이드 7주차_군집화 평균이동, GMM, DBSCAN (427pg)

살콤아내 2021. 6. 14. 12:15
728x90
반응형

파이썬머신러닝완벽가이드430pg. 평균이동.py
0.00MB
7-4_Gaussian_Mixture_Model.py
0.00MB
7-5_DBSCAN.py
0.00MB

 

- 427pg. 평균이동 (Mean Shift)

 

- 군집화의 한 방법으로 데이터가 모여있는 밀도가 가장높은곳 (KDE값이 높은 곳, 피크)으로 중심이동. 데이터의 분포도를 이용해 군집 중심점을 찾음.

 

- 확률밀도함수 PDF (감마분포, t분포), Kernal Densitiy Estimation 함수 KDE(가우시안 분포함수) 이용

>> 반환값을 현재 위치에서 업데이트하면서 이동

>> 군집의 개수를 정하지 않으며, 오직 대역폭 h의 크기에 따라 군집화를 수행함

>> estimate_bandwidth( )함수: Kernal함수의 경사도를 조절한다. 대역폭 크기높아질수록 커널함수그래프가 완만(smoothing)해지며 여러개의 데이터들이 한 곳의 피크값으로 몰리게 된다. 이는 군집의 개수를 줄이는 요인이 된다. 반면, 대역폭의 크기가 작으면 과적합 (over-fitting)하기 쉽고 군집화 할 확률이 높아진다. 

 

참고) K-평균: 소속된 데이터의 평균 거리 중심으로 이동

 

 

- 430pg. 평균이동 코드 예시

 

- 20줄: 정규분포(np.random.normal)로 부터 0~1사이 30개의 데이터를 랜덤 추출한다

 

- 22줄: sns.distoplot(x)

 

- 28줄: sns.distoplot(x, rug=True)

 

- 34줄: sns.distoplot(x, hist=False, rug=True)

 

- 40줄: sns.distoplot(x, kde=False, rug=True)

 

- 56줄: 각 데이터 별 kernel 함수 적용해서 이를 append함

- Kernel 함수를 적용하면 데이터가 밀집한 피크를 알 수 있다.

 

 

- 86, 88줄: bandwidth값에 따른 그래프의 변화를 볼 수 있다.

 

 

- 433pg. GMM (Gaussian Mixture Model)

최대우도법

 

 

최대가능도 방법 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 최대가능도방법 (最大可能度方法, 영어: maximum likelihood method) 또는 최대우도법(最大尤度法)은 어떤 확률변수에서 표집한 값들을 토대로 그 확률변수의 모수를

ko.wikipedia.org

 최대우도법에서 군집화의 목표: 데이터는 있지만 정해지지 않은 label을 정해주는 것이다

>> 임의로 확률분포를 정해준 뒤 label을 할당한다.

>> 할당된 label에 의거해 다시 확률분포를 그려본다.

>> 이를 이용해 다시 label을 할당한다.

>> 이 절차를 변하지 않을 수준까지 반복하고 label을 정해 군집화를 마무리한다.

 

439pg 참고)

K-평균이나 GMM은 특정포인터를 중심으로 원형 클러스터링(군집화)를 한다는 공통점이 있다. 

하지만, GMM특정 영역안에 있는 데이터끼리의 데이터 분석을 하는 확률기반 군집화이고 (데이터가 원형의 범위로 퍼저 있지 않은 경우 군집화를 잘 수행함),  K-평균이나 평균이동기법은 특정 포인터를 거리를 기반으로 하는 거리기반 군집화이다 (데이터가 원형의 범위로 퍼져있지 않은 경우 군집화의 정확성이 떨어짐).

 

 

 

 

- 441pg. DBSCAN (Density Based Spatial Clustering of Applications with Noise)

특정공간 내 밀도기반 군집화 알고리즘으로 데이터 분포가 기하학적으로 복잡해도 효과적인 군집화 가능. 입실론 주변 영역의 최소 데이터 개수를 포함하는 밀도 기준을 충족시키는 데이터인 핵심포인터를 연결하며 군집화 수행

 

- 파라미터: 입실론 주변영역 (epsilon), 최소 데이터 개수 (min points) >>설정을 해줘야 함

- 데이터 포인트: 핵심포인트(core point), 이웃포인트(neighbor point), 경계포인트(border point), 잡음포인트(noise point)

 

 

- 32줄: dbscan객체를 만든 뒤 DBSCAN 알고리즘 이용해서 파라미터 설정함

- 33줄: dbscan_labels에 클러스터 label별 예측값이 들어있다. 

 

 

- 37줄: 'target'(정답값)을 기준으로 'dbscan_cluster'의 value_counts를 보여달라. dbscan_cluster는 -1, 0, 1 세 개의 고유값이 있다. 0, 1의 클러스터가 있고 (즉, 2개로 군집화가 됨) -1은 어떤 cluster에도 속해있지 않은 noise값을 의미한다. 

 

- 45줄: visualize_cluster_plot 함수를 생성한다.

- 83줄: iris의 feature개수 4개를 PCA를 이용해서 2개로 차원축소한다.

- 89줄: dbscan알고리즘을 이용해 새롭게 차원축소된 앞서 정의된 visualize_cluser_plot으로 irisDF를 그래프화한다.

 

 

- epsilon 증가 >> 노이즈가 감소 (반경이 커져서 포함하는 데이터가 증가)

- min_sample 증가 >> 노이즈 증가 (데이터 밀도가 커져야 하므로)

 

- 449pg. DBSCAN make_circles( )

 

- 134줄: make_circles( )는 2개의 피처만 생성한다. 1000개의 샘플, 0.05%의 노이즈, 외부원과 내부원의 scale 비율인 factor값은 외부를 1로 뒀을 때 내부가 0.5라는 뜻이다.  

 

- KMeans, GMM, DBSCAN에 따른 make_circles( )함수 비교

 

728x90
반응형