Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
2. Contacts
Haesun Park
Email : haesunrpark@gmail.com
Meetup: https://www.meetup.com/Hongdae-Machine-Learning-Study/
Facebook : https://facebook.com/haesunrpark
Blog : https://tensorflow.blog
2
3. Book
파이썬 라이브러리를 활용한 머신러닝, 박해선.
(Introduction to Machine Learning with Python, Andreas
Muller & Sarah Guido의 번역서입니다.)
번역서의 1장과 2장은 블로그에서 무료로 읽을 수 있습니다.
원서에 대한 프리뷰를 온라인에서 볼 수 있습니다.
Github:
https://github.com/rickiepark/introduction_to_ml_with_python/
3
4. 머신러닝 구분
지도 학습(Supervised) – KNN, Linear models, SVM, Random Forest, Boosting,
Nueral Networks
비지도 학습(Unsupervised) – 변환(Scaler, PCA, NMF, tSNE), 군집(K-means,
병합군집, DBSCAN)
준지도 학습(Semisupervised) – Label propagation, Label spreading
(sklearn.semi_supervised)
강화 학습(Reinforcement Learning)
4
6. 종류
비지도 변환unsupervised transformation
사람이나 머신러닝 알고리즘을 위해 새로운 데이터 표현을 만듦니다
차원 축소: PCA, NMF, t-SNE, 오토인코더autoencoder
토픽 모델링: LDA (e.g. 소셜 미디어 토론 그룹핑, 텍스트 문서의 주제 추출)
군집clustering
비슷한 데이터 샘플을 모으는 것 (e.g. 사진 어플리케이션: 비슷한 얼굴 그룹핑)
k-평균, 병합, DBSCAN
데이터 스케일링scaling
이상치 탐지anomaly detection, GANgenerative adversarial networks
6
7. 비지도 학습의 어려움
레이블이 없기 때문에 올바르게 학습되었는지 알고리즘을 평가하기가 어렵습니다
사진 애플리케이션에서 옆모습, 앞모습으로 군집되었다 해도 직접 눈으로
확인하기 전에는 결과를 평가하기가 어렵습니다.
비지도 학습은 데이터를 잘 이해하기 위해서(탐색적 분석) 사용되거나,
지도학습 알고리즘의 정확도 향상과 메모리/시간 절약을 위해 새로운 데이터
표현을 만드는 전처리 단계로 활용
7
9. 네가지 스케일링
9
인위적으로 만든
이진 분류 데이터(특성 2개)
10~15
1~10
표준점수, z-점수: 평균 0, 분산 1
𝑥 − 𝑥̅
𝜎
사분위값 사용, 이상치에 덜 민감
𝑥 − 𝑞&
𝑞' − 𝑞(
𝑥 − 𝑥)*+
𝑥),- − 𝑥)*+
모든 특성이
0과 1사이에 위치
Normalizer(norm=‘l2’)
다른 방법과 달리
행(포인트) 별로 적용
(유클리디안 거리를 1로 만듦)
SVM, 신경망등은 스케일에 민감합니다.(신경망에서는 배치정규화로 이를 완화시킵니다)
q1q3
xminxmax
𝑋
𝑥(
&
+ 𝑥&
&
2차원일 때는 원
(3차원은 구)
14. <단축 메서드>
14
transform 메서드를 가진 변환기는 모두 fit_transform 메서드를 가지고 있습니다.
TransformerMixIn 클래스를 상속하는 대부분의 경우 fit_transform은 단순히
scaler.fit().transform()처럼 연이어 호출합니다.
테스트 데이터를 변환하려면 반드시 transform()을 사용합니다.
일부의 경우 fit_transform 메서드가 효율적인 경우가 있습니다(PCA)
17. cancer 히스토그램
cancer 데이터의 산점도 행렬은 '6
&
= 435개가 그려집니다.
대신 2개씩 짝지어 히스토그램을 그릴 수 있습니다.
17
양성 악성
유용성이 떨어짐
아주 유용한 특성
18. 주성분 분석Principal component analysis
상관관계가 없는 특성으로 데이터셋을 변환(회전)하고 일부 특성을 선택하는 기술
18
분산이 가장 큰 방향
(화살표 방향은 의미 없음)
첫번째와 직각이면서
가장 분산이 큰 두번째 방향
성분1, 2로 데이터를 변환
(특성의 수 == 주성분의 수)
두번째 성분 제거(차원 축소)
다시 원래 특성 차원으로 변환
(노이즈제거, 유용한 특성 시각화)
20. PCA 변환 차원
𝑋OP, = 𝑋𝑉 = 𝑈𝑆𝑉H
𝑉 = 𝑈𝑆
X = [mxn] 행렬, m: 샘플수, n: 특성수, p: 주성분수
U = [mxm] 행렬, s = [mxn] 행렬, V = [nxn] 행렬
XnewV = [mxn]・[nxp]=[mxp] : Xnew가 주어지면 V의 몇 개 열만 사용, fit() à
transform()
US = [mxm]・[mxp]=[mxp] : 학습한 데이터를 변환할 때는 S의 몇 개 열만 사용,
fit_transform()
20
21. PCA + cancer
21
올바른 주성분을 찾기 위해
특성의 스케일을
분산이 1이 되도록 변경
fitàtransform
클래스 정보 없이 데이터를 구분했습니다
(선형 분류기도 타당해 보임)
PCA 변환: X를 2개의 주성분으로 변환(회전, 차원축소)
22. pca.components_
components_ 속성에 주성분 방향principal axis VT([nxn])가 부분 저장되어 있습니다.
components_ 크기 (n_components, n_features)
22
주성분 방향을 직관적으로
설명하기 어렵습니다.
30개의 특성
23. LFW dataset
원본 데이터 보다 분석하기 좋은 표현을 찾는 특성 추출로 사용 가능합니다.
메사추세츠 애머스트 주립대의 비전랩에서 만든 LFWLabeled Faces in the Wild 데이터셋
(인터넷에서 모은 2000년대 초반 유명 인사의 얼굴 이미지)
23
총 62명의 얼굴
3,023개à2,063개 이미지
(사람마다 최대 50개씩)
각 이미지는 87x65 사이즈
à5,655 개의 특성
24. k-NN + lfw
얼굴인식: DB에 있는 얼굴 중 하나를 찾는 작업(사람마다 사진수가 적음)
얼굴 인식을 위해 (지도 학습) 1-최근접 이웃을 적용합니다.
87x65 픽셀 값의 거리를 계산하므로 위치에 매우 민감합니다.
24
무작위로 분류할 경우 1/62=0.016
1547개
25. 화이트닝whitening
백색소음에서 이름이 유래됨, 특성 간의 (대각행렬을 제외한) 공분산이 모두 0이
되고(PCA) 특성의 분산이 1로 되는(StandardScaler) 변환
25
분산을 맞추지 않으면 분류기의 성능이 좋지 못합니다.
27. lfw 주성분
배경, 명앙 ,조명의 차이를 구분하고 있습니다. 하지만 사람이 이미지를 판단할
때는 정성적인 속성(나이, 표정, 인상 등)을 사용합니다.
신경망: 입력 이미지에서 유용한 특성을 찾음(representative learning, end-to-end learning)
27
VT = components_
= [n_component, features]
5655=87x65
28. PCA as weighted sum
주성분 방향으로 변환한 데이터(X_trained_pca)에
주성분 방향을 곱하여 원본을 복원할 수 있습니다.
[1 x 5655] = [1 x 100] ∙ [100 x 5655]
원본 샘플을 주성분의 가중치 합으로
표현할 수 있습니다.
5655개의 주성분을 사용하면 완전히 복원됩니다.
28
10개 50개 100개 500개
29. lfw 산점도
cancer 때와 마찬가지로 2개의 주성분으로 산점도를 그려서 비교합니다.
10개의 주성분으로도 원본이 잘 표현되지 못했으므로 이런 산점도 결과를 예상할
수 있습니다.
29
cancer lfw
31. NMF
PCA와 비슷하고 차원 축소에 사용할 수 있습니다.
원본 = 뽑아낸 성분의 가중치의 합
음수가 아닌 성분과 계수를 만드므로 양수로 이루어진 데이터에 적용 가능합니다.
여러 악기나 목소리가 섞인 오디오 트랙처럼 독립된 소스가 덧붙여진 데이터를
분해하는데 유용합니다.
성분과 계수가 음수를 가진 PCA 보다 NMF를 이해하기가 쉽습니다.
31
𝑋 = 𝑊𝐻 를 만족하는 𝑊와 𝐻를 구함
𝑊: 변환된 데이터, 𝐻: 성분(𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡𝑠_ 에 저장)
손실함수 L2 노름의 제곱 :
1
2
∑ 𝑋*? − 𝑊𝐻*?
&
좌표하강법
32. NMF + 인공 데이터셋
32
성분이 특성 개수 만큼 많다면 데이터의 끝 부분을 가리키고 하나일 경우에는 평균 방향을 가리킵니다.
성분의 개수를 변경하면 전체 성분이 모두 바뀌고 성분에 순서가 없습니다.
무작위 초기화를 사용하므로 난수 초기 값에 따라 결과가 달라집니다.
데이터 평균을 구해서 성분 개수로 나눈 제곱근에 정규분포 난수를 곱해서 W, H 를 초기화합니다.
양수 데이터
33. NMF < PCA
NMF는 재구성 보다는 주로 데이터에 있는 패턴을 분할하는데 주로 사용합니다.
NMF + lfw
33
PCA가 재구성에 유리한 성분(분산)을 찾습니다.
34. NMF - lfw의 성분
NMF PCA
성분이 모두 양수이므로 얼굴 이미지와 가까운 형태를 띱니다.
34
35. NMF + signal data
35
[2000x3]
난수 행렬을 곱해서
[2000x100]로 만듭니다
다시 [2000x3]으로 만듭니다.
PCA는 첫번째 성분이 대부분의 분산을 가져갑니다.
37. t-SNEt-Distributed Stochastic Neighbor Embedding
PCA는 태생상 데이터를 회전하고 방향을 제거하기 때문에 시각화에 성능이 좋지
않습니다.
매니폴드 학습manifold learning은 비선형 차원 축소의 기법으로 시각화에 뛰어난 성능을
발휘합니다(3개 이상 특성을 뽑지 않음)
탐색적 데이터 분석에 사용(transform() 메서드가
없고 새로운 데이터에 적용하지 못합니다.
fit_transform()만 있습니다.)
2차원 평면에 데이터를 퍼뜨린 후 원본 특성에서
의 거리를 잘 보존하는 2차원 표현을 학습합니다.
37
40. TSNE + load_digits
뛰어난 클래스 시각화 능력을 발휘합니다.
perplexity(5~50, default 30)가 크면 이웃을
많이 포함시킵니다(큰 데이터셋)
early_exaggeration(default 4)에서 초기 과장
단계의 정도를 지정합니다. 클수록
초기간격이 넓어지지만 기본값에서도
대부분 잘 작동합니다.
40
42. 군집
데이터셋을 클러스터cluster라는 그룹으로 나누는 작업입니다.
한 클러스터 안의 데이터는 매우 비슷하고 다른 클러스터와는 구분되도록
만듭니다.
분류 알고리즘처럼 테스트 데이터에 대해서 어느 클러스터에 속할지 예측을 만들
수 있습니다.
• k-평균 군집
• 병합 군집
• DBSCAN
42
43. k-평균means 군집
가장 간단하고 널리 사용되는 군집 알고리즘입니다.
임의의 클러스터 중심에 데이터 포인트를 할당합니다.
그 다음 클러스터안의 데이터 포인트를 평균을 내어 다시 클러스터 중심을
계산하고 이전 과정을 반복합니다.
클러스터에 할당되는 데이터 포인트의 변화가 없으면 알고리즘 종료됩니다.
43
47. k-평균의 단점
모든 클러스터가 원형이고
반경이 동일하다고 간주하므로
복잡한 형태를 구분하지 못합니다.
47
중심에서 멀리 떨어진
포인트까지 포함합니다
원형이 아닌 데이터셋
아주 복잡한 데이터셋
48. 벡터 양자화
PCA, NMF가 데이터 포인트를 성분의 합으로 표현할 수 있는 것처럼 k-평균은
데이터 포인트를 하나의 성분으로 나타내는 것으로 볼 수 있음(벡터 양자화)
48
클러스터 평균
Kmeans
PCA
NMF
Kmeans
PCA
NMF
49. 차원 확대
49
두개의 특성에서
10개의 특성으로 늘어남
(해당 클러스터를 제외하고는 0)
e.g. [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
2차원 데이터에는 PCA와 NMF가 할 수 있는 것이 없지만 Kmeans는 특성 보다 더 많은
클러스터를 할당할 수 있습니다.
51. 장단점
장점
이해와 구현이 쉽고 비교적 빨라서 인기가 높습니다.
대규모 데이터셋에 적용가능합니다(MiniBatchKMeans)
단점
무작위로 초기화하므로 난수에 따라 결과가 달라집니다.
n_init(default 10) 매개변수만큼 반복하여 클러스터 분산이 작은 결과를 선택합니다
클러스터 모양을 원형으로 가정하고 있어 제한적입니다.
실제로는 알 수 없는 클러스터 개수를 지정해야 합니다.
51
batch_size=100 기본값
53. 병합 군집agglomerative clustering
시작할 때 데이터 포인트를 하나의 클러스터로 지정해 지정된 클러스터 개수에
도달할 때까지 두 클러스터를 합쳐 나갑니다.
비슷한 클러스터를 선택하는 방법을 linkage 매개변수에 지정합니다.
• ward: 기본값, 클러스터 내의 분산을 가장 작게 만드는 두 클러스터를
병합(클러스터의 크기가 비슷해짐)
• average: 클러스터 포인트 사이의 평균 거리가 가장 작은 두 클러스터를 병합
• complete: 클러스터 포인트 사이의 최대 거리가 가장 짧은 두 클러스터를 병합
클러스터 크기가 매우 다를 때 average나 complete가 나을 수 있습니다.
53
56. 계층적 군집hierarchical clustering
병합 군집을 사용하려면 Kmeans와 같이 클러스터의 개수를 지정해야 합니다.
하지만 병합 군집은 계층적 군집이므로 클러스터가 병합되는 과정을 살피면
클러스터 개수를 선택하는 데 도움을 얻을 수 있습니다(2차원일 경우에)
56
57. 덴드로그램dendrogram
2차원 이상의 계층적 군집을 표현할 수 있습니다.
scipy의 연결linkage 함수와 덴드로그램 함수를 사용합니다.
57
두 클러스터가 합쳐질 때의 거리
(먼 거리의 클래스가 합쳐집니다)
59. DBSCAN 특징
클러스터 개수를 미리 지정할 필요 없습니다.
복잡한 형상에 적용 가능하고, 어느 클러스터에도 속하지 않는 노이즈 포인트를
구분합니다.
k-평균이나 병합 군집보다는 다소 느리지만 큰 데이터셋에 적용 가능합니다.
데이터가 많은 밀집 지역을 찾아 다른 지역과 구분하는 클러스터를 구성합니다.
밀집 지역의 포인트를 핵심 샘플이라고 부릅니다.
한 데이터 포인트에서 eps 안의 거리에 min_samples 개수만큼 데이터가 있으면 이
포인트를 핵심 샘플로 분류함. à 클러스터가 됨
59
60. DBSCAN 알고리즘
처음 무작위로 포인트를 선택하고 eps 거리안의 포인트를 찾습니다.
eps 거리안의 포인트 < min_samples 이면 잡음 포인트(-1)로 분류합니다.
eps 거리안의 포인트 > min_samples 이면 핵심 포인트로 분류, 새 클러스터 할당
핵심 포인트에서 eps 안의 포인트를 확인하여 클러스터 할당이 없으면 핵심 샘플의
클러스터를 할당합니다(경계 포인트)
eps 안의 포인트가 이미 핵심 샘플이면 그 포인트의 이웃을 또 차례로 방문하여 클러스터가
자라납니다. 그리고 아직 방문하지 못한 포인트를 다시 선택해 동일한 과정을 반복합니다.
여러번 실행해도 같은 핵심 포인트, 잡음 포인트를 찾지만 경계 포인트는 바뀔 수 있습니다.
보통 경계 포인트는 많지 않아 크게 영향을 미치지 않습니다.
60
61. DBSCAN + 인공 데이터셋
61
min_samples=5
eps=0.5
잡음 포인트
핵심 포인트
경계 포인트
클러스터 증가, eps 증가
잡음 포인트 감소,
min_samples 감소
62. eps, min_samples
eps가 가까운 포인트의 범위를 정하기 때문에 더 중요합니다.
eps가 아주 작으면 핵심 포인트가 생성되지 않고 모두 잡음으로 분류됩니다. eps를 아주
크게하면 모든 포인트가 하나의 클러스터가 됩니다.
eps로 클러스터의 개수를 간접적으로 조정할 수 있습니다.
min_samples는 덜 조밀한 지역이 잡음 포인트가 될지를 결정합니다.
min_samples 보다 작은 개수가 모여 있는 지역은 잡음 포인트가 됩니다.(클러스터 최소 크기)
StandardScaler나 MinMaxScaler로 특성의 스케일을 조정할 필요 있습니다.
잡음 포인트의 레이블이 -1이므로 군집의 결과를 다른 배열의 인덱스로 사용할 때는 주의해야
합니다.
62
63. DBSCAN + Two Moons
63
평균 0, 분산 1
다른 데이터에 적용하지 못함
67. 실루엣silhouette 계수
ARI, NMI는 타깃값이 있어야 가능하므로 애플리케이션 보다 알고리즘을 개발할 때
도움이 됩니다.
타깃값 필요없이 클러스터의 밀집 정도를 평가합니다.
-1: 잘못된 군집, 0: 중첩된 군집, 1: 가장 좋은 군집
모양이 복잡할 때는 밀집 정도를 평가하는 것이 잘 맞지 않습니다.
원형 클러스터의 실루엣 점수가 높게 나옵니다.
67
69. 군집 평가의 어려움
실루엣 점수가 높다하더라도 찾아낸 군집이 흥미로운 것인지는 여전히 알 수
없습니다.
사진 애플리케이션이 두 개의 클러스터를 만들었다면
앞모습 vs 옆모습
밤사진 vs 낯사진
아이폰 vs 안드로이드
클러스터가 기대한 대로인지는 직접 확인해야만 알 수 있습니다.
69
어떻게 만들었을지 알 수 없습니다.
77. 장단점
군집 알고리즘은 정성적 분석 과정이나 탐색적 분석 단계에 유용합니다.
k-평균, 병합군집: 클러스터 개수 지정
k-평균: 클러스터의 중심을 데이터 포인트의 분해 방법으로 볼 수 있음
DBSCAN: eps 매개변수로 간접적으로 클러스터 크기를 조정, 잡음 포인트 인식,
클러스터 개수 자동 인식, 복잡한 형상 파악 가능
병합 군집: 계층적 군집으로 덴드로그램을 사용해 표현할 수 있음
77