- 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)
최대우도법
최대우도법에서 군집화의 목표: 데이터는 있지만 정해지지 않은 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( )함수 비교
'살콤아내 자기계발 > 파이썬' 카테고리의 다른 글
파이썬으로 배우는 웹 크롤러 2주차_BeatifulSoup (0) | 2021.06.18 |
---|---|
파이썬 머신러닝완벽가이드 7주차_고객 세그먼테이션 실습(452pg) (0) | 2021.06.16 |
파이썬 머신러닝완벽가이드 7주차_군집화, 군집평가 (409pg) (0) | 2021.06.11 |
파이썬 머신러닝완벽가이드 7주차_차원축소 (382 pg, PCA, LDA, SVD) (0) | 2021.06.09 |
파이썬 머신러닝완벽가이드 7주차_차원축소, 선형변환, 공분산, PCA (377pg) (0) | 2021.06.08 |