1
Introduction toMachine Learning with Python
3. Unsupervised Learning
Honedae Machine Learning Study Epoch #2
ContactsHaesun Park
Email : [email protected]
Meetup: https://www.meetup.com/Hongdae-Machine-Learning-Study/
Facebook : https://facebook.com/haesunrpark
Blog : https://tensorflow.blog
2
Book파이썬라이브러리를활용한머신러닝, 박해선.
(Introduction to Machine Learning with Python, Andreas Muller & Sarah Guido의번역서입니다.)
번역서의 1장과 2장은블로그에서무료로읽을수있습니다.
원서에대한프리뷰를온라인에서볼수있습니다.
Github: https://github.com/rickiepark/introduction_to_ml_with_python/
3
머신러닝구분
지도학습(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
종류
비지도변환unsupervised transformation
사람이나머신러닝알고리즘을위해새로운데이터표현을만듦니다차원축소: PCA, NMF, t-SNE, 오토인코더autoencoder
토픽모델링: LDA (e.g. 소셜미디어토론그룹핑, 텍스트문서의주제추출)
군집clustering
비슷한데이터샘플을모으는것 (e.g. 사진어플리케이션: 비슷한얼굴그룹핑)k-평균, 병합, DBSCAN
데이터스케일링scaling
이상치탐지anomaly detection, GANgenerative adversarial networks
6
비지도학습의어려움
레이블이없기때문에올바르게학습되었는지알고리즘을평가하기가어렵습니다
사진애플리케이션에서옆모습, 앞모습으로군집되었다해도직접눈으로확인하기전에는결과를평가하기가어렵습니다.
비지도학습은데이터를잘이해하기위해서(탐색적분석) 사용되거나,
지도학습알고리즘의정확도향상과메모리/시간절약을위해새로운데이터표현을만드는전처리단계로활용
7
네가지스케일링
9
인위적으로만든이진분류데이터(특성 2개)
10~15
1~10
표준점수, z-점수: 평균 0, 분산 1𝑥 − �̅�𝜎
사분위값사용, 이상치에덜민감𝑥 − 𝑞&𝑞' − 𝑞(
𝑥 − 𝑥)*+𝑥),- − 𝑥)*+모든특성이0과 1사이에위치
Normalizer(norm=‘l2’)다른방법과달리행(포인트) 별로적용(유클리디안거리를 1로만듦)
SVM, 신경망등은스케일에민감합니다.(신경망에서는배치정규화로이를완화시킵니다)
q1q3
xminxmax
𝑋
𝑥(& + 𝑥&&�
2차원일때는원(3차원은구)
cancer + MinMaxScaler
10
y_train은사용하지않음fit(): 특성마다최대, 최솟값을계산합니다transform(): 데이터를변환합니다
NumPy 배열
(569, 30)
MinMaxScaler.transform
11
fit à transform
numpy 배열의min, max 메서드
MinMaxScaler이므로최소와최댓값이0, 1로바뀜
학습한변환내용을훈련데이터에적용
transform(X_test)
12
훈련세트로학습시킨 scaler를사용해 X_test를변환(SVM의성능을측정하기위해)
테스트세트의최소, 최댓값이 0~1 사이를벗어남
𝑥1231 − 𝑥14,*+_)*+𝑥14,*+_),- − 𝑥14,*+_)*+
<단축메서드>
14
transform 메서드를가진변환기는모두 fit_transform 메서드를가지고있습니다.
TransformerMixIn 클래스를상속하는대부분의경우 fit_transform은단순히scaler.fit().transform()처럼연이어호출합니다.
테스트데이터를변환하려면반드시 transform()을사용합니다.
일부의경우 fit_transform 메서드가효율적인경우가있습니다(PCA)
주성분분석Principal component analysis
상관관계가없는특성으로데이터셋을변환(회전)하고일부특성을선택하는기술
18분산이가장큰방향(화살표방향은의미없음)
첫번째와직각이면서가장분산이큰두번째방향
성분1, 2로데이터를변환(특성의수 == 주성분의수)
두번째성분제거(차원축소)
다시원래특성차원으로변환(노이즈제거, 유용한특성시각화)
PCA와특이값분해
19
C𝑜𝑣 𝑋*, 𝑋? =1
𝑛 − 1[(𝑋* − 𝑋D*)(𝑋? − 𝑋D?)]
행렬 X의공분산
평균을뺀행렬로표현하면(평균이 0이되도록변환)
C𝑜𝑣 𝑋, 𝑋 =1
𝑛 − 1𝑋H𝑋
특이값분해(SVD) 𝑋 = 𝑈𝑆𝑉H로부터
C𝑜𝑣 𝑋, 𝑋 =1
𝑛 − 1𝑋H𝑋 =
1𝑛 − 1
𝑉𝑆𝑈H 𝑈𝑆𝑉H = 𝑉𝑆&
𝑛 − 1VM
𝑉( 𝐶(,& 𝐶(,'𝐶(,& 𝑉& 𝐶&,'𝐶(,' 𝐶&,' 𝑉'
C𝑜𝑣 𝑋, 𝑋 행렬의고유벡터(V) à분산의주방향
𝑋OP, = 𝑋𝑉 = 𝑈𝑆𝑉H𝑉 = 𝑈𝑆
행렬의고유벡터à크기만바뀌고방향은바뀌지않음
𝑦 = 𝐴𝑥 = 𝜆𝑥𝐴 = 𝑉𝑑 𝜆 𝑉U(
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
PCA + cancer
21
올바른주성분을찾기위해특성의스케일을분산이 1이되도록변경
fitàtransform
클래스정보없이데이터를구분했습니다(선형분류기도타당해보임)
PCA 변환: X를 2개의주성분으로변환(회전, 차원축소)
pca.components_components_ 속성에주성분방향principal axis VT([nxn])가부분저장되어있습니다.
components_ 크기 (n_components, n_features)
22
주성분방향을직관적으로설명하기어렵습니다.
30개의특성
LFW dataset원본데이터보다분석하기좋은표현을찾는특성추출로사용가능합니다.
메사추세츠애머스트주립대의비전랩에서만든 LFWLabeled Faces in the Wild 데이터셋(인터넷에서모은 2000년대초반유명인사의얼굴이미지)
23
총 62명의얼굴3,023개à2,063개이미지(사람마다최대 50개씩)
각이미지는 87x65 사이즈à5,655 개의특성
k-NN + lfw얼굴인식: DB에있는얼굴중하나를찾는작업(사람마다사진수가적음)
얼굴인식을위해 (지도학습) 1-최근접이웃을적용합니다.
87x65 픽셀값의거리를계산하므로위치에매우민감합니다.
24무작위로분류할경우 1/62=0.016
1547개
화이트닝whitening
백색소음에서이름이유래됨, 특성간의 (대각행렬을제외한) 공분산이모두 0이되고(PCA) 특성의분산이 1로되는(StandardScaler) 변환
25분산을맞추지않으면분류기의성능이좋지못합니다.
lfw 주성분
배경, 명앙 ,조명의차이를구분하고있습니다. 하지만사람이이미지를판단할때는정성적인속성(나이, 표정, 인상등)을사용합니다.
신경망: 입력이미지에서유용한특성을찾음(representative learning, end-to-end learning)
27
VT = components_= [n_component, features]
5655=87x65
PCA as weighted sum
주성분방향으로변환한데이터(X_trained_pca)에주성분방향을곱하여원본을복원할수있습니다.
[1 x 5655] = [1 x 100] ∙ [100 x 5655]
원본샘플을주성분의가중치합으로표현할수있습니다.
5655개의주성분을사용하면완전히복원됩니다.
28
10개 50개 100개 500개
NMFPCA와비슷하고차원축소에사용할수있습니다.
원본 = 뽑아낸성분의가중치의합
음수가아닌성분과계수를만드므로양수로이루어진데이터에적용가능합니다.
여러악기나목소리가섞인오디오트랙처럼독립된소스가덧붙여진데이터를분해하는데유용합니다.
성분과계수가음수를가진 PCA 보다 NMF를이해하기가쉽습니다.
31
𝑋 = 𝑊𝐻를만족하는𝑊와𝐻를구함𝑊:변환된데이터, 𝐻:성분(𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡𝑠_에저장)
손실함수 L2노름의제곱 : 12∑ 𝑋*? −𝑊𝐻*?
&
좌표하강법
NMF + 인공데이터셋
32
성분이특성개수만큼많다면데이터의끝부분을가리키고하나일경우에는평균방향을가리킵니다.
성분의개수를변경하면전체성분이모두바뀌고성분에순서가없습니다.
무작위초기화를사용하므로난수초기값에따라결과가달라집니다.
데이터평균을구해서성분개수로나눈제곱근에정규분포난수를곱해서 W, H 를초기화합니다.
양수데이터
t-SNEt-Distributed Stochastic Neighbor Embedding
PCA는태생상데이터를회전하고방향을제거하기때문에시각화에성능이좋지않습니다.
매니폴드학습manifold learning은비선형차원축소의기법으로시각화에뛰어난성능을발휘합니다(3개이상특성을뽑지않음)
탐색적데이터분석에사용(transform() 메서드가없고새로운데이터에적용하지못합니다.fit_transform()만있습니다.)
2차원평면에데이터를퍼뜨린후원본특성에서의거리를잘보존하는 2차원표현을학습합니다.
37
load_digits8x8 흑백이미지의손글씨숫자데이터셋(MNIST 데이터셋아님. UC 얼바인머신러닝저장소:http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits)
38
TSNE + load_digits뛰어난클래스시각화능력을발휘합니다.
perplexity(5~50, default 30)가크면이웃을많이포함시킵니다(큰데이터셋)
early_exaggeration(default 4)에서초기과장단계의정도를지정합니다. 클수록초기간격이넓어지지만기본값에서도대부분잘작동합니다.
40
군집
데이터셋을클러스터cluster라는그룹으로나누는작업입니다.
한클러스터안의데이터는매우비슷하고다른클러스터와는구분되도록만듭니다.
분류알고리즘처럼테스트데이터에대해서어느클러스터에속할지예측을만들수있습니다.
• k-평균군집
• 병합군집
• DBSCAN
42
k-평균means 군집
가장간단하고널리사용되는군집알고리즘입니다.
임의의클러스터중심에데이터포인트를할당합니다.
그다음클러스터안의데이터포인트를평균을내어다시클러스터중심을계산하고이전과정을반복합니다.
클러스터에할당되는데이터포인트의변화가없으면알고리즘종료됩니다.
43
KMeans
45
레이블에어떤의미가없으며순서가무작위임(분류와다른점)직접데이터를확인해야레이블의의미를알수있습니다.
기본값 8
비지도학습이므로타깃(y)을넣지않습니다.
n_clusters=3 이므로0~2까지할당
벡터양자화
PCA, NMF가데이터포인트를성분의합으로표현할수있는것처럼 k-평균은데이터포인트를하나의성분으로나타내는것으로볼수있음(벡터양자화)
48
클러스터평균
Kmeans
PCA
NMF
Kmeans
PCA
NMF
차원확대
49
두개의특성에서10개의특성으로늘어남(해당클러스터를제외하고는 0)e.g. [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
2차원데이터에는 PCA와 NMF가할수있는것이없지만 Kmeans는특성보다더많은클러스터를할당할수있습니다.
장단점
장점
이해와구현이쉽고비교적빨라서인기가높습니다.대규모데이터셋에적용가능합니다(MiniBatchKMeans)
단점
무작위로초기화하므로난수에따라결과가달라집니다.n_init(default 10) 매개변수만큼반복하여클러스터분산이작은결과를선택합니다클러스터모양을원형으로가정하고있어제한적입니다.실제로는알수없는클러스터개수를지정해야합니다.
51
batch_size=100 기본값
병합군집agglomerative clustering
시작할때데이터포인트를하나의클러스터로지정해지정된클러스터개수에도달할때까지두클러스터를합쳐나갑니다.
비슷한클러스터를선택하는방법을 linkage 매개변수에지정합니다.
• ward: 기본값, 클러스터내의분산을가장작게만드는두클러스터를병합(클러스터의크기가비슷해짐)
• average: 클러스터포인트사이의평균거리가가장작은두클러스터를병합
• complete: 클러스터포인트사이의최대거리가가장짧은두클러스터를병합
클러스터크기가매우다를때 average나 complete가나을수있습니다.
53
계층적군집hierarchical clustering
병합군집을사용하려면 Kmeans와같이클러스터의개수를지정해야합니다.
하지만병합군집은계층적군집이므로클러스터가병합되는과정을살피면클러스터개수를선택하는데도움을얻을수있습니다(2차원일경우에)
56
덴드로그램dendrogram
2차원이상의계층적군집을표현할수있습니다.
scipy의연결linkage 함수와덴드로그램함수를사용합니다.
57
두클러스터가합쳐질때의거리(먼거리의클래스가합쳐집니다)
DBSCAN 특징
클러스터개수를미리지정할필요없습니다.
복잡한형상에적용가능하고, 어느클러스터에도속하지않는노이즈포인트를구분합니다.
k-평균이나병합군집보다는다소느리지만큰데이터셋에적용가능합니다.
데이터가많은밀집지역을찾아다른지역과구분하는클러스터를구성합니다.
밀집지역의포인트를핵심샘플이라고부릅니다.
한데이터포인트에서 eps 안의거리에 min_samples 개수만큼데이터가있으면이포인트를핵심샘플로분류함. à클러스터가됨
59
DBSCAN 알고리즘
처음무작위로포인트를선택하고 eps 거리안의포인트를찾습니다.
eps 거리안의포인트 < min_samples 이면잡음포인트(-1)로분류합니다.
eps 거리안의포인트 > min_samples 이면핵심포인트로분류, 새클러스터할당
핵심포인트에서 eps 안의포인트를확인하여클러스터할당이없으면핵심샘플의클러스터를할당합니다(경계포인트)
eps 안의포인트가이미핵심샘플이면그포인트의이웃을또차례로방문하여클러스터가자라납니다. 그리고아직방문하지못한포인트를다시선택해동일한과정을반복합니다.
여러번실행해도같은핵심포인트, 잡음포인트를찾지만경계포인트는바뀔수있습니다.보통경계포인트는많지않아크게영향을미치지않습니다.
60
eps, min_sampleseps가가까운포인트의범위를정하기때문에더중요합니다.
eps가아주작으면핵심포인트가생성되지않고모두잡음으로분류됩니다. eps를아주크게하면모든포인트가하나의클러스터가됩니다.
eps로클러스터의개수를간접적으로조정할수있습니다.
min_samples는덜조밀한지역이잡음포인트가될지를결정합니다.
min_samples 보다작은개수가모여있는지역은 잡음포인트가됩니다.(클러스터최소크기)
StandardScaler나 MinMaxScaler로특성의스케일을조정할필요있습니다.
잡음포인트의레이블이 -1이므로군집의결과를다른배열의인덱스로사용할때는주의해야합니다.
62
ARI, NMI실제정답클래스(타깃)과비교해야합니다.
0(무작위)~1(최적) 사이의값, ARI의최저값은 -0.5 혹은 -1 임
65
NMI: normalized_mutual_info_score()
실루엣silhouette 계수
ARI, NMI는타깃값이있어야가능하므로애플리케이션보다알고리즘을개발할때도움이됩니다.
타깃값필요없이클러스터의밀집정도를평가합니다.
-1: 잘못된군집, 0: 중첩된군집, 1: 가장좋은군집
모양이복잡할때는밀집정도를평가하는것이잘맞지않습니다.
원형클러스터의실루엣점수가높게나옵니다.
67
군집평가의어려움
실루엣점수가높다하더라도찾아낸군집이흥미로운것인지는여전히알수없습니다.
사진애플리케이션이두개의클러스터를만들었다면
앞모습 vs 옆모습
밤사진 vs 낯사진
아이폰 vs 안드로이드
클러스터가기대한대로인지는직접확인해야만알수있습니다.
69
어떻게만들었을지알수없습니다.
k-평균 + LFW
74
2063x100
pca.inverse_transfom(km.cluster_centers_)
클러스터중심:10x100원본차원으로복원:
100x5655
클러스터에있는얼굴의평균이므로매우부드럽습니다