
평균 이동(Mean Shift)은 K-평균과 유사하게 중심을 군집의 중심으로 지속적으로 움직이면서 군집화를 수행합니다. 하지만 K-평균이 소속된 데이터의 평균 거리 중심으로 중심을 이동시키는 데 반해, 평균 이동은 데이터가 모여있는 밀도가 가장 높은 곳으로 중심을 이동시킵니다. 평균 이동 군집화는 데이터의 분포도를 기반으로 군집의 중심점을 찾습니다. 정확히는, 확률 밀도 함수가 피크(peak)인 지점을 군집의 중심점으로 설정합니다. 일반적으로 주어진 모델의 확률 밀도 함수를 찾기 위해서 KDE(Kernel Density Estimation)를 이용합니다. KDE는 커널(kernel) 함수를 통해 어떤 변수의 확률 밀도 함수를 추정하는 대표적인 방법입니다. 관측된 데이터 각각에 커널 함수를 적용한 값을 모..

앞의 붓꽃 데이터 세트의 경우 결괏값에 품종을 뜻하는 타깃 레이블이 있었고, 군집화 결과를 이 레이블과 비교하여 군집화가 얼마나 잘 수행됐는지를 평가할 수 있었습니다. 하지만 대부분의 군집화 데이터 세트는 이렇게 비교할만한 타깃 레이블을 가지고 있지 않습니다. 군집화는 분류(Classification)과 유사해 보일 수 있으나 많이 다릅니다. 데이터 내에 숨어 있는 별도의 그룹을 찾아서 의미를 부여하거나, 같은 분류값이라도 그 안에서 더 세분화된 군집화를 진행할 수 있습니다. 또한. 서로 다른 분류 값의 데이터도 더 넓은 군집화 레벨화 등의 영역을 가집니다. 그렇다면 군집화가 잘 됐는지 평가할 수 있는 지표는 무엇이 있을까요? 비지도학습의 특성상 어떠한 지표라도 정확한 성능을 평가하긴 어렵습니다. 그럼에..

사이킷런은 다양한 유형의 군집화 알고리즘을 테스트해 보기 위한 간단한 데이터 생성기를 제공합니다. 대표적인 API로 make_blobs()와 make_classification()이 있습니다. make_blobs()는 개별 군집의 중심점과 표준 편차 제어 기능이 추가돼 있으며, make_classification()은 노이즈를 포함한 데이터를 만드는 데 유용하게 사용할 수 있습니다. 둘 다 분류 용도로도 테스트 데이터 생성이 가능합니다. make_blobs()의 사용법을 간략히 알아봅시다. 해당 메서드의 반환값은 피처 데이터 세트와 타깃(군집) 데이터 세트를 담은 튜플입니다. 호출 파라미터는 다음과 같습니다. n_samples: 생성할 총 데이터의 개수. 디폴트는 100. n_features : 데이터의..

K-평균은 군집화(Clustering)에서 가장 일반적으로 사용되는 알고리즘입니다. K-평균은 군집 중심점(centroid)이라는 특정한 임의의 지점을 선택해 해당 중심에 가장 가까운 포인트들을 선택하는 군집화 기법입니다. K-평균 군집화 알고리즘의 동작 방식을 단계별로 살펴봅시다. 먼저 군집화의 기준이 되는 중심을 군집의 개수만큼 임의의 위치에 가져다 놓습니다. 보통 임의의 위치에 중심을 놓게되면 알고리즘이 너무 많이 반복되어 수행 시간이 오래걸리기 때문에 초기화 알고리즘으로 적합한 위치에 중심을 가져다 놓습니다. 각 데이터는 자신과 가장 가까운 중심점에 소속됩니다. 위 그림에서 처음에 A, B 데이터가 같은 중심점에 소속되며, C, E, F 데이터가 같은 중심점에 소속됩니다. 모든 데이터의 소속이 결..

NMF는 Truncated SVD와 같이 낮은 랭크를 통한 행렬 근사 방식의 변형입니다. NMF는 원본 행렬 내의 모든 원소 값이 양수(0 이상)이라는 게 보장되면 아래와 같이 좀 더 간단하게 두 개의 기반 양수 행렬로 분해하는 기법입니다. 행렬 $X$는 $W$와 $H$ 행렬로 분해됩니다. $W$는 일반적으로 원본 행렬의 행 크기와 같고 열 크기보다 작은 행렬(즉, 행이 열보다 김)이며, $H$는 원본 행렬의 행 크기보다 작고 열 크기와 같은 행렬(즉, 열이 행보다 김)입니다. 분해된 행렬을 잠재 요소를 특성으로 가지게 됩니다. 분해 행렬 $W$는 원본 행에 대해서 이 잠재 요소의 값이 얼마나 되는지에 대응하며, $H$는 이 잠재 요소가 원본 열(피처)로 어떻게 구성됐는지를 나타냅니다. NMF는 SVD와..

SVD 역시 PCA와 유사한 행렬 분해 기법을 이용합니다. PCA는 정방행렬만을 고유벡터로 분해할 수 있지만, SVD는 행과 열의 크기가 다른 행렬도 분해할 수 있는 기법입니다. SVD는 $(m\times n)$크기의 행렬 $A$를 $A=U\sum V^{T}$로 분해합니다. SVD는 특이값 분해로 불리며, 행렬 $U$와 $V$에 속한 벡터는 특이벡터(singular vector)이며, 모든 특이벡터는 서로 직교합니다. $\sum $는 대각행렬이며, 행렬의 대각에 위치한 원소만 0이 아니고 나머지 위치의 값은 모두 0입니다. 대각 원소의 값이 바로 행렬 $A$의 특이값(singular value)입니다. SVD는 $(m\times n)$크기의 행렬 $A$를 $(m\times m)$차원의 $U$, $(m\t..

LDA(Linear Discriminant Analysis)는 선형 판별 분석법으로 불리면, PCA와 매우 유사합니다. LDA는 PCA와 유사하게 데이터를 저차원 공간에 투영해 차원을 축소하는 기법이지만, 중요한 차이점이 존재합니다. LDA는 지도학습의 분류에서 사용하기 쉽도록 개별 클래스를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소합니다. PCA는 데이터의 변동성이 가장 큰 축을 찾았지만, LDA는 데이터의 결정값 클래스를 최대한으로 분리할 수 있는 축을 찾습니다. LDA는 클래스 분리를 최대화하는 축을 찾기 위해 클래스 간 분산(between-class scatter)과 클래스 내부 분산(within-class scatter)의 비율을 최대화하는 방식으로 차원을 축소합니다. 즉, 클래스 간..

많은 피처를 가진 데이터 세트를 PCA 변환한 뒤, 예측 영향도가 어떻게 되는지를 비교해봅시다. 사용할 데이터 세트는 UCI Machine Learning Repository에 있는 신용카드 고객 데이터 세트입니다. 신용카드 데이터 세트는 30,000개의 레코드와 24개의 피처를 가집니다. 이중 'default payment next month' 피처가 타겟값으로, '다음달 연체 여부'를 의미하며 연체일 경우 1, 정상납부일 경우 0입니다. 데이터 세트에서 "PAY_0" 피처 다음에 "PAY_2" 피처가 있으므로, "PAY_0"의 이름을 "PAY_1"로 바꿉시다. 타겟값의 이름도 너무 길어서 간단히 'default'로 변경합시다. 타겟값을 제외하고 총 23개의 피처가 있지만, 피치끼리의 상관성을 조사할 ..

대표적인 차원 축소 알고리즘인 PCA, LDA, SVD, NMF에 대해서 알아봅시다. 차원 축소는, 매우 많은 피처로 구성된 다차원 데이터 세트의 차원을 축소해 새로운 차원의 데이터 세트를 생성하는 것입니다. 일반적으로 차원이 증가할수록 데이터 포인트 간의 거리가 기하급수적으로 멀어지므로 데이터들이 공간 상에 희소(sparse)하게 존재하게 됩니다. 수백 개 이상의 피처로 구성된 데이터의 경우 적은 차원에서 학습된 모델보다 예측 신뢰도가 떨어집니다. 또한 피처가 많으면 개별 피처간에 상관관계가 높을 가능성이 큽니다. 선형 회귀와 같은 선형 모델에서는 입력 변수 간의 상관관계가 높을 경우 다중 공서넝 문제가 발생하여 모델의 예측 성능이 저하됩니다. 데이터의 차원을 축소하면 더 직관적으로 데이터를 해석할 수..

캐글에서 제공하는 House Prices : Advanced Regression Techniques 데이터 세트를 이용해 회귀 분석을 더 심층적으로 알아봅시다. 79개의 변수로 구성된 이 데이터는 미국 아이오와 주의 에임스(Ames) 지방의 주택 가격 정보를 가지고 있습니다. 자전거 대여 예측 예제와 동일하게 RMSLE 값이 평가 지표로 제시되었습니다. 가격이 비싼 주택일수록 예측 결과 오류가 전체 오류에 미치는 비중이 높으므로 이것을 상쇄하기 위해 오류값을 로그로 변환한 RMSLE를 사용하는 것입니다. 본 실습에서는 많은 데이터 가공을 수행할 것이므로, 원본 DataFrame을 따로 보관해놓겠습니다. 타겟값은 맨 마지막 칼럼인 SalePrice입니다. 데이터 세트의 크기와 피처의 타입, Null이 있는..