거의 일주일만에 찾아온 TIL……. 시험기간은 너무 바쁘다. 그럼 이번 주 내용인 비지도 학습 시작!

1. 비지도 학습의 종류 (3.1)

비지도 학습: 알고 있는 출력값이나 정보 없이 학습 알고리즘을 가르쳐야 하는 모든 종류의 머신러닝 -> 비지도 학습에서 학습 알고리즘은 입력 데이터만으로 데이터에서 지식을 추출할 수 있어야 함.



1. 비지도 변환

: 데이터를 새롭게 표현하여 사람이나 다른 머신러닝 알고리즘이 원래 데이터보다 쉽게 해석할 수 있도록 만드는 알고리즘

  • 널리 사용되는 분야: 차원 축소 (특성이 많은 고차원 데이터를 특성의 수를 줄이며 꼭 필요한 특징을 포함한 데이터로 표현하는 방법) ex. 데이터셋을 2차원으로 변경하는 경우 for 시각화
  • 데이터를 구성하는 단위나 성분을 찾기도 함 (텍스트 문서에서 주체를 추출하는 것)

2. 군집 알고리즘

: 데이터를 비슷한 것끼리 그룹으로 묶는 것




2. 비지도 학습의 도전 과제 (3.2)

  • 비지도 학습에서 가장 어려운 일: 알고리즘이 뭔가 유용한 것을 학습했는지 평가하는 것 -> 데이터를 더 잘 이해하고 싶을 때 탐색적 분석 단계에서 많이 사용 -> 데이터 전처리 단계에서도 사용




3. 데이터 전처리와 스케일 조정 (3.3)

3.1 여러 가지 전처리 방법 (3.3.1)

데이터를 기준이 되는 범위로 변환하는 네 가지 방법 - 오른쪽 그래프

  1. StandardScaler
    • 각 특성의 평균을 1, 분산을 0으로 변경하여 모든 특성의 크기를 같게 함
    • 특성의 최솟값과 최댓값의 크기를 제한하지 않음
  2. RobustScaler
    • 특성들이 같은 스케일을 같게 됨 (StandardScler와 유사)
    • 평균과 분산 대신 중간값과 사분위값을 사용 -> 전체 데이터와 아주 동떨어진 데이터 포인트(=이상치)에 영향을 받지 않음
  3. MinMaxScaler
    • 모든 특성이 정확하게 0과 1 사이에 위치하도록 데이터 변경
  4. Normalizer
    • 매우 다른 스케일 조정 기법
    • 특성 벡터의 유클리디안 길이가 1이 되도록 데이터 포인트 조정
    • 지름이 1인 원에 데이터 포인트 투영 = 각 데이터 포인트가 다른 비율로 스케일에 조정
    • 특성 벡터의 길이는 상관없고 데이터의 방향만이 중요할 때 많이 사용

3.2. 데이터 변환 적용하기 (3.3.2)

  • scikit-learn의 transform은 새로운 데이터 표현을 만들 때 사용하는 메서드 -> 테스트 세트의 최솟값과 범위를 사용하지 않고, 항상 훈련 세트의 최소값을 빼고 훈련 세트의 범위로 나눔

3.3. QuantileTransformer와 PowerTransformer

  • scikit-learn 0.19.0 버전에 QuantileTransformer 변환기가 추가되었음
  1. QuantileTransformer
    기본적으로 1000개의 분위를 사용하여 데이터를 균등하게 분포시킴
    • RobustScaler와 비슷하게 이상치에 민감하지 않으며 전체 데이터를 0과 1사이로 압축
    • 매개변수: n_quatiles(기본값 1000)

3.5. 지도 학습에서 데이터 전처리 효과

  • 스케일을 조정하여 지도 학습 시키면 정확도가 꽤 높아짐 (실수를 줄이기 위해서는 직접 구현보다는 scikit-learn에서 제공하는 도구를 사용!)
  • 파이썬 클래스만 바꾸면 다른 전처리 알고리즘으로 손쉽게 교체 O(모든 전처리 모델이 동일한 fit, transfrom 메서드 제공!)




4. 차원 축소, 특성 추출, 매니폴드 학습

  • 비지도 학습에서 데이터를 변환하는 이유는?
    1. 시각화 2. 데이터 압축
      1. 추가적인 처리를 위해 정보가 더 잘 드러나는 표현을 찾기 위함

4.1. 주성분 분석 PCA (3.4.1)

: 특성들이 통계적으로 상관관계가 없도록 데이터셋을 회전시키는 기술 -> 회전 후 데이터를 설명하는 데 얼마나 중요하냐에 따라 종종 새로운 특성 중 일부만 선택

첫 번째 그래프

  • component 1이라고 쓰여있는 분산이 가장 큰 방향을 찾음 = 이 데이터에서 가장 많은 정보를 담고 있는 방향 (특성들의 상관관계가 가장 큰 방향)
  • 첫 번째 방향과 직각인 방향 중 가장 많은 정보를 담은 방향을 찾음 (고차원에서는 무한히 많음)
  • 화살표의 머리와 꼬리는 아무 의미가 없음 -> 이런 과정을 거쳐 찾은 방향 = 데이터에 있는 주된 분산의 방향: 주성분 principal component = 원본 특성 개수만큼 주성분이 있음

두 번째 그래프

  • 같은 데이터
  • 주성분 1과 2를 각각 x축과 y축에 나란하도록 회전한 것
  • PCA에 의해 회전된 두 축은 연관되어 있지 않으므로 변환된 데이터의 상관관계 행렬이 대각선 방향을 제외하고는 0이 됨

  • PCA는 주성분의 일부만 남기는 차원 축소 용도로 사용할 수 있음
  • 첫 번째 주성분만 유지하려고 한 예 = 2차원 데이터셋 -> 1차원 데이터셋
  • 가장 유용한 방향을 찾아 그 방향 성분을 유지하는 것 (여기서는 오른쪽 하래로 향하는 성분)
  • 데이터에 다시 평균을 더해 반대로 회전 (마지막 그림) -> ONLY FEATURE 1

고유얼굴 특성 추출

: PCA는 고유얼굴 특성 추출에도 사용됨

특성추출: 원본 데이터 표현보다 분석하기에 더 적합한 표현을 찾을 수 있음!

얼굴 인식 새로운 얼굴 이미지가 데이터베이스에 있는 기존 얼굴 중 하나에 속하는가? -> 각 사람을 서로 다른 클래스로 구분하는 분류기를 만드는 것 (하지만 각 사람에 대한 이미지, 즉 클래스별 훈련 데이터가 너무 적음) = 1NeighborsClassifier 사용