본문 바로가기

데이터 과학/데이터 과학

[MIT] 데이터 사이언스 기초 강의 요약[11 ~ 15강]

Chapter 11. Introduction to Machine Learning

지도 학습(Supervised Learning)

 - 분류(Classification), 회귀(Regression)가 존재

 - 분류 : 라벨을 예측하는 것(이중 분류 or 다중 분류) (e.g. K-NN)

 - 회귀 : 연속적인 숫자 혹은 부동소수점을 예측하는 것 (e.g. Linear or Polynomial Regression)

 

※ 회귀는 분류와 다르게 출력 값에 연속성이 있다.

분류 예시

 

비지도 학습(Unsupervised Learning)

- 원래 데이터를 보다 쉽게 해석할 수 있도록 만드는 알고리즘

- 비지도 변환(Unsupervised Transformation), 군집(Clustering), 이상 탐지(Anomaly Detection) 등이 존재

- 비지도 변환 : 데이터를 쉽게 해석할 수 있도록 만드는 것 (e.g. 차원 축소(Dimensionlaity Reduction), t-SNE )

- 군집 : 데이터를 비슷한 것끼리 묶는 것. (e.g. K평균 군집(K-means Clustering), 기대값 최적화(Expectation Maximization) )

군집화 예시

▶ 특성 공학(Feature Engineering)

- 어떤 특성을 선택할지, 어떤 특성에 더 가중치를 줄 것인지 결정

- 기존에 존재하는 특성들을 조합할 수도 있다

 

 

▶ 모델을 학습할 때 고려할 것

- 특성 벡터의 선택: 모델을 학습하기전 라벨과 직접적인 관련이 없은 특성을 제거

  e.g. 우수한 인원을 선택할 때, 출생 월, 눈 색깔은 제외해야할 특성(해당 예시는 직관적으로 알수 있지만, 실제 문제에서는 관련성을 살펴봐야 하는 경우가 존재)

- 데이터간 거리 계측 방법

- 모델에 둬야한 제한 조건(Constraints)

  e.g. 군집 갯수(K), 오버 피팅을 피하기 위한 방법

 

 

 

 

 

군집 갯수선택(K=3)


Chapter 12. Clustering

▶군집화(Clustering)

- 군집화는 최적화 문제

- 군집의 크기로 나누지 않는 이유 : 크기가 크면서 높은 분산을 가지는 군집에 (크기가 작으면서 높은 분산을 가지는 군집 보다) 더 큰 패널티를 주기 위한 것(정규화를 하지 않음)

 

▶위계적 군집화(Hierarchical Clustering)

- 1) 각 요소를 집단에 지정

- 2) 가장 가까운 한쌍을 집단을 찾아 합병

- 특정 단계에서 1~2 반복을 멈출 수 있다.

- 단점 : 최적의 결과가 아닐 수 있다. 매우 느림.

 

▶K평균 군집화(K-means Clustering)

- 1) 무작위로 K개 셈플을 중심으로 선택

- 2) 각 셈플을 가장 가까운 중심(Centroid)에 할당

- 3) 클러스터에 할당된 데이터 점의 평균으로 중심을 다시 지정

- 4) 클러스터에 할당되는 데이터 포인트에 변화가 없을 때 알고리즘 종료

- O(k*n*d)
- n번째 샘플 $x_n$이 k 번째 클러스터에 속하는 경우 $r_{nk} = 1$ 이고 아닌 경우 0 이다.
(n개의 점중 '너는 k번째 군집에 포함된다/ 포함되지 않는다' 를 판단)
$$ J = \sum^{N}_{n=1}\sum^{K}_{k=1}r_{nk}||x_n - \mu_k||^2 $$
EM 알고리즘)
- 임의의 $\mu_k$를 선정하고, 고정 상태에서 J를 최소화 하는 $r_{nk}$ 구하기 (Expectation)
- 얻은 $r_{nk}$ 를 고정하고, J를 최소화하는 $\mu_k$ 구하기(Maximization) (J를 $\mu_k$로 미분해서 구함)
- 두 값이 수렴하거나, 반복 횟수가 최대에 도달할 때 까지 반복한다.

- 단점 : K를 잘못 설정하면 잘못된 결과가 나온다.

- 다양한 K를 시도하고, 최적의 값을 도출하기도 한다.

 

K-Means Algorithm

def trykmeans(examples, numClusters, numTrials, verbose = False):
    """Calls kmeans numTrials times and returns the result with the
          lowest dissimilarity"""
    best = kmeans(examples, numClusters, verbose)
    minDissimilarity = cluster.dissimilarity(best)
    trial = 1
    while trial < numTrials:
        try:
            clusters = kmeans(examples, numClusters, verbose)
        except ValueError:
            continue #If failed, try again
        currDissimilarity = cluster.dissimilarity(clusters)
        if currDissimilarity < minDissimilarity:  # 현대 비유사성 < 최소 비유사성
            best = clusters                       # 현재 군집을 저장
            minDissimilarity = currDissimilarity  # 최소 비유사성 업데이트
        trial += 1
    return best

 

반응형