Chapter 06 비지도 학습 ▶ 비슷한 과일끼리 모으자!
06-1 군집 알고리즘 ▶ 흑백 이미지 분류 방법과 비지도 학습, 군집 알고리즘 이해하기
학습 목표
- 흑백 사진을 분류하기 위해 여러 가지 아이디어를 내면서 비지도 학습과 군집 알고리즘에 대해 이해합니다.
타깃을 모르는 비지도 학습
- 지도 학습: 타깃 有
- 비지도 학습: 타깃 無
과일 사진 데이터 준비하기
픽셀값 분석하기
평균값과 가까운 사진 고르기
- 군집(clustering): 비슷한 샘플끼리 그룹으로 모으는 작업
- 클러스터(cluster): 군집 알고리즘에서 만든 그룹
- 히스토그램: hist()
- 구간별로 값이 발생한 빈도를 그래프로 표시한 것
- x 축: 값의 구간(계급)
- y 축: 발생 빈도(도수)
확인 문제
- 히스토그램을 그릴 수 있는 맷플롯립 함수는 무엇인가요?
- 정답: 1번 / hist()
- 본문에서 했던 것처럼 바나나 사진의 평균 banana_mean과 비슷한 사진 100장을 찾아 출력해 보세요. 바나나 사진을 모두 찾을 수 있나요?
- 98개는 바나나, 2개는 사과를 찾았다.
06-2 k-평균 ▶ k-평균 알고리즘 작동 방식을 이해하고 비지도 학습 모델 만들기
학습 목표
- k-평균 알고리즘의 작동 방식을 이해하고 과일 사진을 자동으로 모으는 비지도 학습 모델을 만들어 봅니다.
k-평균 알고리즘 소개
- 앞서 예제에서는 사과, 파인애플, 바나나임을 미리 알 수 있었다.
- But, 실전에서는 그렇지 않다.
- 따라서 k-평균 군집 알고리즘으로 평균값을 자동으로 찾는다.
- 클러스터 중심(cluster center) or 센트로이드(centroid): 평균값이 클러스터의 중심에 위치
- 방법 / 5주차 과제 💡
- 무작위로 k개의 클러스터 중심을 정합니다.
- 각 샘플에서 가장 가까운 클러스터 중심을 찾아 해당 클러스터의 샘플로 지정합니다.
- 클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경합니다.
- 클러스터 중심에 변화가 없을 때까지 2번으로 돌아가 반복합니다.
KMeans 클래스
클러스터 중심
- k-평균 알고리즘이 만든 클러스터에 속한 샘플의 평균값
최적의 k 찾기
- 엘보우(elbow): 적절한 클러스터 개수를 찾기 위한 대표적인 방법
- 클러스터 개수를 늘려가면서 이너셔의 변화를 관찰하여 최적의 클러스터 개수를 찾는 방법
- 클러스터 개수를 증가시키면서 이너셔를 그래프로 그리면 감소하는 속도가 꺾이는 지점 有
- 이 지점부터는 클러스터 개수를 늘려도 클러스터에 잘 밀집된 정도가 크게 개선 X
- 즉 이너셔가 크게 줄어들지 않음.
- 이 지점이 마치 팔꿈치 모양이어서 엘보우 방법이라 부름.
- 이너셔(inertia): (k-평균 알고리즘에서 구한)클러스터 중심과 클러스터에 속한 샘플 사이의 거리의 제곱합
- 클러스터에 속한 샘플이 얼마나 가깝게 모여 있는지 나타내는 값
- 클러스터 개수가 늘어나면 클러스터 개개의 크기는 줄어들기 때문에 이너셔도 줄어듬.
scikit-learn
- KMeans: k-평균 알고리즘 클래스
- n_clusters: 클러스터의 개수를 지정
- default: 8
- n_init: 처음에는 랜덤하게 센트로이드를 초기화, 여러 번 반복하여 이너셔를 기준으로 가장 좋은 결과 선택 → 이 반복 횟수 지정
- default: 10
- max_iter: k-평균 알고리즘의 한 번 실행에서 최적의 센트로이드를 찾기 위해 반복할 수 있는 최대 횟수
- default: 200
- n_clusters: 클러스터의 개수를 지정
확인 문제
- k-평균 알고리즘에서 클러스터를 표현하는 방법이 아닌 것은 무엇인가요?
- 정답: 4번 / 클러스터에 속한 샘플 개수
- k-평균에서 최적의 클러스터 개수는 어떻게 정할 수 있나요?
- 정답: 1번 / 엘보우 방법을 사용해 이너셔의 감소 정도가 꺾이는 클러스터 개수를 찾습니다.
06-3 주성분 분석 ▶ 차원을 알고 차원 축소 알고리즘 PC 모델 만들기
학습 목표
- 차원 축소에 대해 이해하고 대표적인 차원 축소 알고리즘 중 하나인 PCA(주성분 분석) 모델을 만들어 봅니다.
차원과 차원 축소
- 10,000개의 픽셀 → 10,000개의 특성
- 머신러닝에서의 특성 = 차원(dimension)
- 1차원 배열, 벡터에서 차원: 원소의 개수
- 2차원 배열에서의 차원: 행과 열
- 다차원 배열에서의 차원: 배열의 축 개수
- 차원 축소(dimensionality reduction): 비지도 학습 작업 중 하나
- 특성이 많아지면 선 형 모델의 성능이 높아지고 훈련 데이터에 쉽게 과대적합됨.
- 따라서 특성을 줄이면 데이터 크기도 줄이고 지도 학습 모델의 성능 향상 가능
- 줄어든 차원에서 다시 원본 차원으로 최대한 손실을 줄이며 복원 가능
주성분 분석 소개
- PCA(Principal Component Analysis)
- 데이터에 있는 분산이 큰 방향을 찾는 것
- 분산: 데이터가 널리 퍼져있는 정도
- 벡터 = 주성분(principal component)
- 주성분 벡터: 원본 데이터에 있는 어떤 방향
- 주성분 벡터의 개수 = 원본 데이터셋에 특성 개수
- 원본 데이터는 주성분을 사용해 차원 축소 가능
- ⚠️ 주성분 = 원본 차원, 주성분으로 바꾼 데이터 = 차원이 줄어든다.
PCA 클래스
원본 데이터 재구성
설명된 분산(explained variance)
- 주성분이 원본 데이터의 분산을 얼마나 잘 나타내는지 기록한 값
- 당연히 첫 번째 주성분의 설명된 분산이 가장 큼
- 이 분산 비율을 모두 더하면 50개의 주성분으로 표현하고 있는 총 분산 비율 얻을 수 있음.
- 분산 비율이 높으면 이미지의 품질도 좋다.
다른 알고리즘과 함께 사용하기
- 훈련 데이터의 차원을 줄이면 시각화에 좋다.
- 3개 이하로 차원을 줄이면 화면에 출력하기 비교적 쉬움.
scikit-learn
- PCA: 주성분 분석을 수행하는 클래스
- n_components: 주성분의 개수 지정
- default: None
- 샘플 개수와 특성 개수 중에 작은 것의 값을 사용
- default: None
- randow_state: 넘파이 난수 시드값 지정
- components_: 훈련 세트에서 찾은 주성분 지정
- explained_variance_: 설명된 분산 저장
- explained_variance_ratio_: 설명된 분산의 비율 저장
- inverse_transform(): transform() 메서드로 차원을 축소시킨 데이터를 다시 원본 차원으로 복원
- n_components: 주성분의 개수 지정
확인 문제
- 특성이 20개인 대량의 데이터셋이 있습니다. 이 데이터셋에서 찾을 수 있는 주성분 개수는 몇 개일까요?
- 정답: 1번 / 10개
- 해설: 주성분의 개수는 원본 데이터에 있는 특성 개수보다 작다.
- 샘플 개수가 1,000개이고 특성 개수는 100개인 데이터셋이 있습니다. 즉 이 데이터셋의 크기는 (1000, 100) 입니다. 이 데이터를 사이킷런의 PCA 클래스를 사용해 10개의 주성분을 찾아 변환했습니다. 변환된 데이터셋의 크기는 얼마일까요?
- 정답: 1번 / (1000, 10)
- 2번 문제에서 설명된 분산이 가장 큰 주성분은 몇 번째인가요?
- 정답: 1번 / 첫 번째 주성분
- 해설: 주성분 비율은 explained_variance_ratio_에 저장되며, 맷플롯립의 plot() 함수로 확인이 가능하다. (참고. 325페이지)
5주차 혼공학습단 소감
오히려 4주차보다 내용이 쉬운 듯한 느낌이 컸다. 주성분 분석의 경우, ADsP 자격증을 취득하면서 한번 보았던지라, 복습의 느낌을 주어 내용 학습이 수월했다. 더군다나 앞서 진행했던 챕터들보다 이론보다는 실습에 비중이 많아서, 직접 실습해보고 결과를 보는 맛이 있었다. 타깃이 없는 비지도 학습으로 k-평균 알고리즘을 새롭게 배우면서, 지도 학습 이외의 데이터도 활용할 수 있게 되어 앞으로 접할 다양한 문제가 더욱 기대가 된다.
5주차 손코딩 자료
반응형
'코딩 | 개념 정리 > Machine Learning & Deep Learning' 카테고리의 다른 글
[혼공머신] 번외주차_이미지를 위한 인공 신경망 (0) | 2024.02.17 |
---|---|
[혼공머신] 6주차_딥러닝을 시작합니다. (0) | 2024.02.11 |
[혼공머신] 4주차_트리 알고리즘 (0) | 2024.01.27 |
[혼공머신] 3주차_다양한 분류 알고리즘 (0) | 2024.01.20 |
[혼공머신] 2주차_회귀 알고리즘과 모델 규제 (0) | 2024.01.13 |