느좋 인공지능
[ML Specialization / Andrew NG] W8 Unsupervised learning 본문
[ML Specialization / Andrew NG] W8 Unsupervised learning
serenewave 2025. 6. 12. 19:56데이터에 대한 정답이나 목표가 주어지지 않은 상태에서, 데이터 자체에서 패턴을 발견하는 ml 방식인 비지도학습에 대해 다룬다.
1) clustering
K-means clustering
흔하게 사용되는 클러스터링 알고리즘으로, k개의 클러스터로 묶는 알고리즘이다.
k=2인 예시를 살펴보자. 두개의 랜덤 centers of cluster(cluster centroids)를 잡고 각 점이 두 centroid 중 어디와 가까운지 계산한다. 이후, 두 그룹의 평균을 계산하여 centroids를 옮긴다. 이 과정을 반복하면서 centroids와 그룹들이 수정되다가 점들이 하나도 바뀌지 않는 순간 종료된다.
만약 데이터가 하나도 없는 군집이 생긴다면, 해당 군집을 삭제하고 k-1로 진행하거나(보편적), 그 centroid를 다시 random 초기화한다. k-means clustering은 군집이 잘 안나누어진 데이터에도 잘 적용되며, 예를들어 키와 몸무게에 대한 데이터를 3개의 군집으로 나눈다면, S M L 군집에 대한 centroid를 통해 각 군집의 평균 정보도 알 수 있다.
그렇다면, 이 알고리즘은 왜 발산하지 않고 잘 작동하는 것일까? 이 기법도 결국 비용함수를 최적화하는 원리이다.
여기서 cost function에 해당하는 J 함수는 각 data point들과 centroid와의 거리제곱의 평균이며, centroid는 각 점들의 중앙으로 계속 이동하므로 거리가 짧아짐에 따라, 거리제곱의 합은 증가하지 않는 함수이다. 예를들어 거리가 1과 9일때 제곱의 합은 82인 반면 5와 5일때 제곱의 합은 50이다.
기술1: Initializing K-means(use multiple different initialization)
첫 centroid를 어떻게 고르냐에 따라 결과 클러스터링 결과가 다르게 나올 수 있으며, 몇몇은 극단적인 결과가 생길 수 있다. 그러므로, 초기화를 여러번 할 수 있다면 그중 가장 좋은것으로 골라서 군집화를 수행한다.
사이킷런의 kmeans = KMeans(n_clusters=3, n_init=10, init='k-means++')에서 k-means++ 방법을 이용해 초기 centroid를 설정하고, n_init 파라미터를 통해 초기화 과정을 몇번 수행할 지 설정할 수 있다.
기술2: how choose number of cluster K
적절한 K 값을 설정하는 작업은 애매모호하다. 데이터만 보고 k 값을 파악하기는 어려우며, 정확한 답도 주어지지 않는다.
이때 군집화에서 적절한 클러스터의 개수를 선택하기 위해 elbow method 기법이 사용된다. 3까지 rapidly decreasing하고 그 이후 조금씩 감소하므로, k=3으로 정하자!라고 할 수 있다. K값이 커질 수록 J는 계속 낮아지므로, 가장 낮은 J일때 cluster 개수를 k로 하는 것은 오류가 생긴다. 앤드류 응은 보통 그래프가 명확하지 않고 애매해서 잘 쓰지 않는다고 한다.
결국, 비지도학습인 클러스터링은 이 결과를 토대로 다음 행위를 하는 것이 목적일테니, 이후 목적에 얼마나 잘 perform 하는지를 고려하여 k-means를 평가해야 할 수 있다. 예를들어, 키와 몸무게에 대한 데이터를 군집화하여 티셔츠 사이즈를 정하려는 목적이라면, k=3으로 두면 S, M, L로 정하고, k=5로 두면 Xs, S, M, L, XL로 정하면 된다. 더 많은 사이즈가 판매에 좋다면 k=5로 두고 여러개를 만드는 것이 비싸면 k=3으로 두는 등 이러한 기준으로 판단하면 된다. 사뭇 수리적이지 않은 방법이지만 도메인 지식을 활용하는 실용적인 방법이다.
(+ elbow method 외에 실루엣분석, 갭통계량, 데이비스-볼딘 지수 등도 있다)
+) 군집화 방법으로는 K-means clustering 외에, 계층적 군집화(Hierarchical Clustering), DBSCAN, GMM 등이 있다.
2) Anomaly detection
unlabeled data set of normal events에서 unusual, anomalous data를 찾는 이상탐지에 대해 알아보자.
이렇게 새로운 데이터 $x_{test}$가 입력되었을 때, anomaly data인지 파악해야 한다. 만약 anomaly 라면 엔진에대한 조사가 필요하다.
그렇다면, anomaly를 어떻게 탐지할까?
x가 dataset에서 발견될 확률인 p(x) 모델을 만든 다음, $p(x_{test})$를 계산하여, 이 값이 $\epsilon$보다 작다면 raise a flag to say this could be anomaly.
이상탐지 예시는 위와 같은 것들이 있다.
이상탐지에서 p(x) 모델을 build할 때 Gaussian(Normal) Distribution 즉 정규분포를 이용한다.
데이터셋이 주어지면, 계산된 $\mu$와 $\sigma$를 기준으로 정규분포를 그리고, $x_{test}$를 기준으로 $p(x)$를 계산하여 이 값이 매우 낮다면 anomaly를 의심할 수 있다. 통계학자는 $m-1$로 나누는 것을 선호하지만 큰 차이가 없어 그냥 $\frac{1}{m}$을 쓴다.
$x$는 여러 차원으로 이루어져 있으므로, $p(x)$는 각 차원의 $p(x_i)$들을 모두 곱한 식으로 계산한다. 이 계산 또한, 각 $x_i$ 변수들이 통계적으로 independent해야 쓸 수 있음을 의미하겠지만, 실제로는 독립이 아니라도 이렇게 써도 된다. 정규분포 식을 살표보면 각 p(x)의 식은 $e^{-(거리)^2}$ 이므로 여러 차원 중 하나라도 중심으로부터 거리가 멀면 매우 작은 값이 되며, 매우 작은 값이 한번 곱해지면 전체 p(x) 값 또한 확 작아지게된다.
지금까지의 모든 내용을 정리하면 위와 같다.
developing & evaluating an anomaly detection system: how choose $\epsilon$, how know algorithm is going well
알고리즘을 develop할 때, 알고리즘을 평가할 수 있는 방법이 있다면 쉬워지므로 평가는 매우 중요하다.
모두 y=0인 training set과 대부분이 y=0이고, 일부가 y=1인 cv set, test set이 있다고 가정하자.
ex) 10000개의 good engine과 20개의 flawed engine이 있을 때, training set은 6000개의 good engine, cv set은 2000개의 good engine과 10개의 flawed engine, test set은 2000개의 good engine, 10개의 flawed engine으로 나눈다.
training set을 이용하여 algorithm을 학습한 뒤, cv set의 데이터를 학습한 p(x) 모델에 입력하여 10개중에 몇개의 y를 맞추는지 확인하는 과정을 거치면서 $\epsilon$을 tune 한다. 이후, feature을 추가하거나 수정하면서 $X_j$도 tune한다. 보통, 여러 $\epsilon$ 후보를 시험해보고 가장 F1 score가 높게 나오는 $\epsilon$ 값으로 정하면 된다.
이후, test set을 이용하여 모델을 평가한다. 이때는 confusion matrix와 F1 score등을 활용하면 된다.
이는 training set이 label이 없으니 비지도 학습이며, y=1이 포함된 cv set을 이용하여 tune하는 것이 모델 develop에 도움이 많이 된다.
만약, 데이터가 적다면 test set 없이 training set(y=0 6000), cv set(y=0 4000, y=1 2)을 이용하여 $\epsilon$과 $X_j$를 tune할 수도 있다. 실제로 잘 되는지 확인할 수는 없어 오버피팅의 위힘이 높긴 하다.
이상탐지 vs 지도학습: few labeled data가 있는데 왜 not use supervised learning
이상탐지: 아주 작은 y=1 예시들(0~20) + 많은 y=0 정상 예시들이 있는 상황일때 사용한다. 여러 종류의 이상이 있다해도, 정상 데이터만으로부터 이 이상이 어떤 이상인지 알 수 없다. 목적은 정상이 아닌것만 분류하는 것이다. 금융 사기 탐지 같은경우, 매년 다른 형태로 나오므로 정상과 다른지 여부만 확인하면 되니 이상탐지가 적합하다. 제조업 결함 (brand new)
지도학습: 많은 y=1과 y=0의 예시들이 있는 상황일때 사용한다. y=1의 데이터가 많아서 y=1이 어떤 특징을 가지고 있는지 알 수 있고, 새로운 y=1이 훈련데이터셋의 y=1과 비슷할 확률이 높은 경우. 이메일 스팸분류 처럼 몇십년간 비슷한 종류로만 있어서, 새로운 스팸도 예전의 스팸과 유사한 확률이 높으므로 지도학습에 적합하다. 날씨예측, 질병분류 (previously seen)
Choosing what features to use: $X_j$를 tune하는 방법
어떤 feature 사용할 지 고르는 과정은 매우 중요하다. 이 과정에 시간을 많이 활용한다.
지도학습은 덜 중요한 feature가 있더라도 답이 있으니 알아서 중요한 feature을 파악 가능하기 때문에 괜찮다. 그러나 비지도학습은 어느 feature을 무시할 지 알 수 없으므로, 신중하게 feature을 선정해야 한다.
Non-gaussian features을 가우시안 feature로 변경한다. 히스토그램을 그려서 log(x), log(x+c), $x^{\frac{1}{2}}$등을 이용한다. 이때, training set과 test set 모두 동일하게 변환해야한다.
CV set을 이용하여, error analysis를 진행하다, anomaly인 데이터의 p(x)값이 작지 않은 것을 보고 모델 수정의 필요성을 느낄수도 있다.
예를들어 $x_1$을 이용하여 p(x)를 계산했을 때 anomaly data의 p(x)값이 높게 나온 상황에서 $x_2$ feature을 추가하여 그래프를 그렸을 때, data 중심에서 떨어져있음을 확인할 수 있다. 이렇게 example을 파악해보니 $x_2$ feature의 추가필요성을 깨달을 수 있다. $\frac{x_1}{x_4}$나 $\frac{x_3^2}{x_2}$ 등의 새로운 feature을 추가할 수도 있다.
+) 이상탐지 알고리즘 중, 정규분포를 활용하는 이 모델은 통계 기반 Multivariate Gaussian Model 이상탐지 기법이다. 이외에도 거리기반의(k-nn 이상탐지, LOF, DBSCAN), 머신러닝기반의(Isolation Forest, One-Class SVM, Autoencoder), 시계열 기반의(ARIMA 잔차분석, LSTM Autoencoder, ...)등이 있다.
통계기반 15%, 거리기반 20%, ml기반 45%, 시계열기반 15%, 앙상블기반 5%정도로 사용한다고 한다.
'ML > 코세라 ML Specialization' 카테고리의 다른 글
[ML Specialization / Andrew NG] W10 Reinforcement learning (0) | 2025.06.12 |
---|---|
[ML Specialization / Andrew NG] W9 Recommender system (2) | 2025.06.12 |
[ML Specialization / Andrew NG] W7 Decision Tree models (1) | 2025.06.12 |
[ML Specialization / Andrew NG] W6 Advice for applying machine learning (0) | 2025.06.12 |
[ML Specialization / Andrew NG] W5 Neural Network training (0) | 2025.06.12 |