5주차 ML 지도학습 WIL
ml거의 일주일만에 찾아온 TIL……. 시험기간은 너무 바쁘다. 그럼 이번 주 내용인 비지도 학습 시작!
1. 비지도 학습의 종류 (3.1)
비지도 학습: 알고 있는 출력값이나 정보 없이 학습 알고리즘을 가르쳐야 하는 모든 종류의 머신러닝 -> 비지도 학습에서 학습 알고리즘은 입력 데이터만으로 데이터에서 지식을 추출할 수 있어야 함.
1. 비지도 변환
: 데이터를 새롭게 표현하여 사람이나 다른 머신러닝 알고리즘이 원래 데이터보다 쉽게 해석할 수 있도록 만드는 알고리즘
- 널리 사용되는 분야: 차원 축소 (특성이 많은 고차원 데이터를 특성의 수를 줄이며 꼭 필요한 특징을 포함한 데이터로 표현하는 방법) ex. 데이터셋을 2차원으로 변경하는 경우 for 시각화
- 데이터를 구성하는 단위나 성분을 찾기도 함 (텍스트 문서에서 주체를 추출하는 것)
2. 군집 알고리즘
: 데이터를 비슷한 것끼리 그룹으로 묶는 것
2. 비지도 학습의 도전 과제 (3.2)
- 비지도 학습에서 가장 어려운 일: 알고리즘이 뭔가 유용한 것을 학습했는지 평가하는 것 -> 데이터를 더 잘 이해하고 싶을 때 탐색적 분석 단계에서 많이 사용 -> 데이터 전처리 단계에서도 사용
3. 데이터 전처리와 스케일 조정 (3.3)
3.1 여러 가지 전처리 방법 (3.3.1)
데이터를 기준이 되는 범위로 변환하는 네 가지 방법 - 오른쪽 그래프
- StandardScaler
- 각 특성의 평균을 1, 분산을 0으로 변경하여 모든 특성의 크기를 같게 함
- 특성의 최솟값과 최댓값의 크기를 제한하지 않음
- RobustScaler
- 특성들이 같은 스케일을 같게 됨 (StandardScler와 유사)
- 평균과 분산 대신 중간값과 사분위값을 사용 -> 전체 데이터와 아주 동떨어진 데이터 포인트(=이상치)에 영향을 받지 않음
- MinMaxScaler
- 모든 특성이 정확하게 0과 1 사이에 위치하도록 데이터 변경
- Normalizer
- 매우 다른 스케일 조정 기법
- 특성 벡터의 유클리디안 길이가 1이 되도록 데이터 포인트 조정
- 지름이 1인 원에 데이터 포인트 투영 = 각 데이터 포인트가 다른 비율로 스케일에 조정
- 특성 벡터의 길이는 상관없고 데이터의 방향만이 중요할 때 많이 사용
3.2. 데이터 변환 적용하기 (3.3.2)
- scikit-learn의 transform은 새로운 데이터 표현을 만들 때 사용하는 메서드 -> 테스트 세트의 최솟값과 범위를 사용하지 않고, 항상 훈련 세트의 최소값을 빼고 훈련 세트의 범위로 나눔
3.3. QuantileTransformer와 PowerTransformer
- scikit-learn 0.19.0 버전에 QuantileTransformer 변환기가 추가되었음
-
- QuantileTransformer
- 기본적으로 1000개의 분위를 사용하여 데이터를 균등하게 분포시킴
- RobustScaler와 비슷하게 이상치에 민감하지 않으며 전체 데이터를 0과 1사이로 압축
- 매개변수: n_quatiles(기본값 1000)
3.5. 지도 학습에서 데이터 전처리 효과
- 스케일을 조정하여 지도 학습 시키면 정확도가 꽤 높아짐 (실수를 줄이기 위해서는 직접 구현보다는 scikit-learn에서 제공하는 도구를 사용!)
- 파이썬 클래스만 바꾸면 다른 전처리 알고리즘으로 손쉽게 교체 O(모든 전처리 모델이 동일한 fit, transfrom 메서드 제공!)
4. 차원 축소, 특성 추출, 매니폴드 학습
- 비지도 학습에서 데이터를 변환하는 이유는?
- 시각화
2. 데이터 압축
- 추가적인 처리를 위해 정보가 더 잘 드러나는 표현을 찾기 위함
- 시각화
2. 데이터 압축
4.1. 주성분 분석 PCA (3.4.1)
: 특성들이 통계적으로 상관관계가 없도록 데이터셋을 회전시키는 기술 -> 회전 후 데이터를 설명하는 데 얼마나 중요하냐에 따라 종종 새로운 특성 중 일부만 선택
첫 번째 그래프
- component 1이라고 쓰여있는 분산이 가장 큰 방향을 찾음 = 이 데이터에서 가장 많은 정보를 담고 있는 방향 (특성들의 상관관계가 가장 큰 방향)
- 첫 번째 방향과 직각인 방향 중 가장 많은 정보를 담은 방향을 찾음 (고차원에서는 무한히 많음)
- 화살표의 머리와 꼬리는 아무 의미가 없음 -> 이런 과정을 거쳐 찾은 방향 = 데이터에 있는 주된 분산의 방향: 주성분 principal component = 원본 특성 개수만큼 주성분이 있음
두 번째 그래프
- 같은 데이터
- 주성분 1과 2를 각각 x축과 y축에 나란하도록 회전한 것
- PCA에 의해 회전된 두 축은 연관되어 있지 않으므로 변환된 데이터의 상관관계 행렬이 대각선 방향을 제외하고는 0이 됨
- PCA는 주성분의 일부만 남기는 차원 축소 용도로 사용할 수 있음
- 첫 번째 주성분만 유지하려고 한 예 = 2차원 데이터셋 -> 1차원 데이터셋
- 가장 유용한 방향을 찾아 그 방향 성분을 유지하는 것 (여기서는 오른쪽 하래로 향하는 성분)
- 데이터에 다시 평균을 더해 반대로 회전 (마지막 그림) -> ONLY FEATURE 1
고유얼굴 특성 추출
: PCA는 고유얼굴 특성 추출에도 사용됨
특성추출: 원본 데이터 표현보다 분석하기에 더 적합한 표현을 찾을 수 있음!
얼굴 인식 새로운 얼굴 이미지가 데이터베이스에 있는 기존 얼굴 중 하나에 속하는가? -> 각 사람을 서로 다른 클래스로 구분하는 분류기를 만드는 것 (하지만 각 사람에 대한 이미지, 즉 클래스별 훈련 데이터가 너무 적음) = 1NeighborsClassifier 사용