분류 전체보기 428

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-평균..

27. 차원축소 - 실습

MNIST 데이터셋을 로드하고 훈련 세트와 테스트 세트로 분할한다. 이 데이터셋에 랜덤 포레스트 분류기를 훈련시키고 얼마나 오래 걸리는지 시간을 잰 다음, 테스트 세트로 만들어진 모델을 평가한다. 그런 다음 PCA를 사용해 설명된 분산이 95%가 되도록 차원을 축소한다. 이 축소된 데이터셋에 새로운 랜덤 포레스트 분류기를 훈련시키고 얼마나 오래 걸리즌지 확인한다. 훈련 속도가 더 빨라졌나? 이제 테스트 세트에서 이 분류기를 평가해보자. 이전 분류기와 비교해서 어떤가? from sklearn.datasets import fetch_openml mnist=fetch_openml('mnist_784',version=1) X_train=mnist['data'][:60000] y_train=mnist['targe..

카테고리 없음 2021.05.26

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

2. 앙상블 학습과 랜덤 포레스트 - 실습

MNIST 데이터를 불러들여 훈련 세트, 검증 세트, 테스트 세트로 나눈다. 그런 다음 랜덤 포레스트 분류기, 엑스트라 트리 분류기, SVM 분류기 같은 여러 종류의 분류기를 훈련시킨다. 그리고 검증 세트에서 개개의 분류기보다 더 높은 성능을 내도록 이들을 간접 또는 직접 투표 방법을 사용해 앙상블로 연결해보자. 앙상블을 얻고 나면 테스트 세트도 확인해보자. from sklearn.datasets import fetch_openml mnist=fetch_openml('mnist_784',version=1) from sklearn.model_selection import train_test_split X_train_val,X_test,y_train_val,y_test=train_test_split( mni..

모델 실습 2021.05.22

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)이다. 이전 예측기를 보완하는 새로운 예측기를 만드는 방법은 이전 모델이 과소적합했던 훈련 샘플의 가중치를 더 높이는 것이다. 이렇게 하면 새로운 예측기는 학습하기 어려운 샘플에 점점 더 맞춰지게 된다. 이것이 에이다부스트에서 사용하는 방식이다. 에이다부스트 분류기를 만들 때 먼저 알고리즘이 기반이 되는 첫 번째 분류기(예를 들면 결정 트리)를 훈련 세트에서 훈련시키고 예측을 만든다. 그 다음에 알고리즘이 잘못 분류된 훈..

20. 앙상블 학습과 랜덤 포레스트 - 랜덤 포레스트

랜덤 포레스트는 일반적으로 배깅 방법(또는 페이스팅)을 적용한 결정 트리의 앙상블이다. 전형적으로 max_samples를 훈련 세트의 크기로 지정한다. BaggingClassifier에 DecisionTreeClassifier를 넣어 만드는 대신 결정 트리에 최적화되어 사용하기 편리한 RandomForestClassifier를 사용할 수 있다.(비슷하게 회귀 문제를 위한 RandomForestRegressor 가 있다). 다음은 최대 16개의 리프 노드를 갖는 500개 트리로 이뤄진 랜덤 포레스트 분류기를 여러 CPU코어에서 훈련 시키는 코드이다. from sklearn.ensemble import RandomForestClassifier rnd_clf=RandomForestClassifier(n_est..