Machine Learning 54

11. 심층 신경망 훈련 - 그레이디언트 소실과 폭주(활성화 함수)

고해상도 이미지에서 수백 종류에 물체를 감지하는 것처럼 아주 복잡한 문제를 다뤄야 한다면 수백 개의 뉴런으로 구성된 10개 이상의 층을 수십만 개의 가중치로 연결해 훨씬 더 깊은 심층 신경망을 훈련해야 한다. 심층 신경망을 훈련하는 것은 쉬운 일이 아니다. 훈련 중에 다음과 같은 문제를 마주할 수 있다. 알고리즘이 하위층으로 진행될수록 그레이디언트가 점점 작아지는 경우가 많다. 경사 하강법이 하위층의 연결 가중치를 변경되지 않은 채로 둔다면 훈련이 좋은 솔루션으로 수렴되지 않을 것이다. 이 문제를 그레이디언트 소실(vanishing gradient)라고 한다. 어떤 경우엔 반대 현상이 일어날 수 있다. 그레이디언트가 점점 커져서 여러 층이 비정상적으로 큰 가중치로 갱신되면 알고리즘은 발산한다. 이 문제를..

31. 비지도학습 - 가우시안 혼합

가우시안 혼합 모델(GMM)은 샘플이 파라미터가 알려지지 않은 여러 개의 혼합된 가우시안 분포에서 생성되었다고 가정하는 확률 모델이다. 하나의 가우시안 분포에서 생성된 모든 샘플은 하나의 클러스터를 형성한다. 일반적으로 이 클러스터는 타원형이다. 각 클러스터는 타원의 모양, 크기, 밀집도, 방향이 다르다. 샘플이 주어지면 가우시안 분포 중 하나에서 생성되었다는 것을 안다. 하지만 어떤 분포인지 또 이 분포의 파라미터는 무엇인지 알지 못한다. 여러 GMM 변종이 있는데 가장 간단한 버전이 GaussianMixture 클래스에 구현되어 있다. 여기에서는 사전에 가우시안 분포의 개수 k를 알아햐 한다. 데이터셋 X가 다음 확률 과정을 통해 생성되었다고 가정한다. from sklearn.mixture impor..

30. 비지도학습 - DBSCAN

이 알고리즘은 밀집된 연속적 지역을 클러스터로 정의한다. 작동 방식은 다음과 같다. 이 알고리즘은 모든 클러스터가 충분히 밀집되어 있고 밀집되지 않은 지역과 잘 구분될 때 좋은 성능을 낸다. from sklearn.cluster import DBSCAN from sklearn.datasets import make_moons X,y=make_moons(n_samples=1000,noise=0.05) dbscan=DBSCAN(eps=0.05,min_samples=5) dbscan.fit(X) 모든 샘플의 레이블은 인스턴스 변수 labels_에 저장되어 있다. 일부 샘플의 클러스터 인덱스는 -1이다. 이는 알고리즘이 이 샘플을 이상치로 판단했다는 의미이다. 핵심 샘플의 인덱스는 인스턴스 변수 core_samp..

29. 비지도학습 - 군집(k-평균(2))

최적의 클러스터 개수 찾기 일반적으로 k를 어떻게 설정할지 쉽게 알 수 없다. 만약 올바르게 지정하지 않으면 결과는 매우 나쁠 수 있다. 더 정확한 방법은 실루엣 점수(silhouette score)이다. 이 값은 모든 샘플에 대한 실루엣 계수의 평균이다. 샘플의 실루엣 계수는 (b-a)/max(a,b)로 계산한다. 여기에서 a는 동일한 클러스터에 있는 다른 샘플까지 평균 거리이다(즉 클러스터 내부의 평균 거리). b는 가장 가까운 클러스터까지 평균 거리이다(즉 가장 가까운 클러스터의 샘플까지 평균 거리, 샘플과 가장 가까운 클러스터는 자신이 속한 클러스터는 제외하고 b가 최소인 클러스터이다). 실루엣 계수는 -1에서 1까지 바뀔 수 있다. +1에 가까우면 자신의 클러스터가 안에 잘 속해 있고 다른 클러..

28. 비지도 학습 - 군집(K-평균(1))

군집이란(clustering) 비슷한 샘플을 구별해 하나의 클러스터(cluster) 또는 비슷한 샘플의 그룹으로 할당하는 작업이다. 다음 그림의 오른쪽은 레이블이 없다. 따라서 더는 분류 알고리즘을 사용할 수 없다. 이럴때 군집 알고리즘이 필요하다. 클러스터에 대한 보편적인 정의는 없다. 실제로 상황에 따라 다르다. 알고리즘이 다르면 다른 종류의 클러스터를 감지한다. 이떤 알고리즘은 센트로이드(centroid)라 부르는 특정 포인트를 중심으로 모인 샘플을 찾는다. 어떤 알고리즘은 샘플이 밀집되어 연속된 영역을 찾는다. 이런 클러스터는 어떤 모양이든 될 수 있다. k-평균은 반복 몇 번으로 이런 종류의 데이터셋을 빠르고 효율적으로 클러스터로 묶을 수 있는 간단한 알고리즘이다. 실제 k-평균..

25. 차원 축소 - PCA

주성분 분석(principal component analysis, PCA)는 가장 인기 있는 축소 알고리즘이다. 먼저 데이터에 가장 가까운 초평면을 정의한 다음, 데이터를 이 평면에 투영시킨다. 사이킷런의 PCA 모델은 앞서 한 것처럼 SVD 분해 방법을 사용하여 구현한다. 다음은 PCA 모델을 사용해 데이터셋의 차원을 2로 줄이는 코드이다. (사이킷런의 PCA모델은 자동으로 데이터를 중앙에 맞춰준다). explained_variance_ratio_ 변수에 저장된 주성분의 설명된 분산의 비율도 유용한 정보 중 하나이다. 이는 데이터셋 분산의 84.2%가 첫 번째 PC를 따라 놓여 있고 14.6%가 두 번째 PC를 따라 놓여 있음을 알려준다. 축소할 차원 수를 임의로 정하기 보다는 충분한 분산(예를 들면 ..

24. 차원 축소 - 차원의 저주

많은 경우 머신러닝 문제는 훈련 샘플 각각이 수천 심지어 수백만 개의 특성을 가지고 있다. 이런 많은 특성은 훈련을 느리게 할 뿐만 아니라, 좋은 솔루션을 찾기 어렵게 만든다. 이런 문제를 차원의 저주 라고 한다. 다행히도 실전 문제에서는 특성 수를 줄여서 불가능한 문제를 가능한 범위로 번경할 수 있는 경우가 많다. 훈련 세트의 차원이 클수록 과대적합 위험이 커진다. 차원을 감소시키는 두 가지 주요한 접근법에는 투영과 매니폴드 학습이 있다. d차원 매니폴드는 국부적으로 d차원 초평면으로 보일 수 있는 n차원 공간의 일부이다(d

22. 앙상블 학습과 랜덤 포레스트 - 스태킹

스태킹(stacking, stacked generalization의 줄임말)은 앙상블에 속한 모든 예측기의 예측을 취합하는 간단한 함수(직접 투표 같은)를 사용하는 대신 취합하는 모델을 훈련시킬수는 없을까? 라는 기본 아이디어로 출발한다. 다음 그림은 새로운 샘플에 회귀 작업을 수행하는 앙상블을 보여주고 있다. 아래의 세 예측기는 각각 다른 값(3.1,2.7,2.9)을 예측하고 마지막 예측기 (블렌더, blender 또는 메타 학습기,meta learner 라고 한다)가 이 예측을 입력으로 받아 최종 예측(3.0)을 만든다. 블렌더를 학습 시키는 일반적인 방법은 홀드 아웃 세트를 사용하는 것이다. 먼저 훈련 세트를 두 개의 서브셋으로 나눈다. 첫 번째 서브셋은 첫 번째 레이어의 예측을 훈련시키기 위해 사..

21. 앙상블 학습과 랜덤 포레스트 - 부스팅(Ada,Gradient,xgboost)

부스팅(boosting)은 약한 학습기를 여러 개 연결하여 강한 학습기를 만드는 앙상블 방법을 말한다. 부스팅 방법에는 여러 가지가 있지만 가장 있기 있는 것은 에이다부스트(AdaBoost, adaptive boosting의 줄임말)와 그레이디언트 부스팅(gradient boosting)이다. 이전 예측기를 보완하는 새로운 예측기를 만드는 방법은 이전 모델이 과소적합했던 훈련 샘플의 가중치를 더 높이는 것이다. 이렇게 하면 새로운 예측기는 학습하기 어려운 샘플에 점점 더 맞춰지게 된다. 이것이 에이다부스트에서 사용하는 방식이다. 에이다부스트 분류기를 만들 때 먼저 알고리즘이 기반이 되는 첫 번째 분류기(예를 들면 결정 트리)를 훈련 세트에서 훈련시키고 예측을 만든다. 그 다음에 알고리즘이 잘못 분류된 훈..