머신러닝 14

[혼공머신] 14. PCA (Principal Component Analysis)

주성분 분석 (Principal Component Analysis)¶ 차원과 차원 축소¶ 지금까지 우리는 데이터가 가진 속성을 특성이라고 불렀다. 과일 사진의 경우 10,000개의 픽셀이 있기 때문에 10,000개의 특성이 있는 셈이다. 머신러닝에서는 이런 특성을 차원(dimension)이라고도 부른다. 이 차원을 줄일 수 있다면 저장 공간을 크게 절약할 수 있을 것이다. 이를 위해 비지도 학습 작업 중 하나인 차원 축소(dimensionality reduction) 알고리즘을 다루어 보자. 차원 축소는 데이터를 가장 잘 나타내는 일부 특성을 선택하여 데이터 크기도 줄이고 지도학습 모델의 성능을 향상시킬 수 있는 방법이다. 또한 줄어든 차원에서 다시 원본 차원으로 손실을 최대한 줄이면서 복원할 수도 있다..

[혼공머신] 13. K-Means Clustering

K-means¶ 앞선 절에서는 사과, 파인애플, 바나나 사진임을 미리 알고 있었기에 과일의 평균을 구할 수 있었다. 그러나 실제 비지도 학습에서는 어떤 과일이 들어있는지 알지 못한다. 이런 경우 k-means clustering을 통해 알고리즘이 평균값을 자동으로 찾아준다. 이 평균값이 클러스터의 중심에 위치하기 때문에 클러스터 중심(cluster center) 또는 센트로이드(centroid)라고도 부른다. K-means 알고리즘 소개¶ k-means 알고리즘의 작동 방식은 다음과 같다. 무작위로 k개의 centroid를 잡는다. 각 샘플에서 가장 가까운 centroid를 찾아 해당 클러스터의 샘플로 지정한다. 클러스터에 속한 샘플의 평균값으로 centroid를 변경한다. centroid의 변화가 없을..

[혼공머신] 12. Clustering Algorithm

Clustering Algorithm¶ 과일 사진 데이터 준비하기¶ 코랩 코드 셀에서 '!' 문자로 시작하면 코랩은 이후 명령을 파이썬 코드가 아니라 리눅스 쉘 명령으로 이해한다. wget 명령은 원격 주소에서 데이터를 다운로드하여 저장한다. -O 옵션에서 저장할 파일 이름을 지정할 수 있다. 아래는 juypyter notebook에서 사용하기 위해 stack overflow에 검색하여 다른 코드를 사용한 것이다. In [1]: import urllib.request url = 'https://bit.ly/fruits_300_data' filename = 'fruits_300.npy' urllib.request.urlretrieve('https://bit.ly/frui..

[혼공머신] 11. Ensemble Learning

트리의 앙상블¶ 정형 데이터와 비정형 데이터¶ 정형 데이터: CSV, 데이터베이스, 엑셀에 저장하기 쉬운 데이터 정형 데이터에 대해 가장 뛰어난 성과를 내는 알고리즘이 바로 앙상블 학습이다. 비정형 데이터: 텍스트, 사진, 음악 등 데이터베이스나 엑셀로 표현하기 어려운 데이터 비정형 데이터에 대해서는 신경망 알고리즘이 가장 뛰어난 성과를 낸다. 랜덤 포레스트¶ 랜덤 포레스트는 앙상블 학습의 대표 주자 중 하나로 안정적인 성능 덕에 널리 사용된다. 랜덤 포레스트의 학습 방법은 아래와 같다. 입력한 훈련 데이터에서 랜덤하게 추출하여 트리 훈련을 위한 데이터를 준비한다. 이 때 한 샘플이 중복되어 추출될 수 있으며, 이렇게 만들어진 샘플을 부트스트랩 샘플(Bootstrap sample)이라고 한다. 기본적으로..

[혼공머신] 10. Cross Validation & Grid Search

검증 세트(Validation Set)¶ 테스트 세트로 일반화 성능을 올바르게 예측하려면 가능한 한 테스트 세트를 사용하지 말아야 한다. 모델을 만들고 나서 마지막에 딱 한번만 사용하는 것이 좋다. 그러므로 훈련 세트와 테스트 세트를 나눈 후, 훈련 과정에서 검증에 사용할 검증 세트를 나눈다. 비율 - 훈련 세트 : 테스트 세트 + 검증 세트 = 6 : 4 (6 : 2 : 2) In [1]: import pandas as pd wine = pd.read_csv('https://bit.ly/wine_csv_data') In [2]: data = wine[['alcohol', 'sugar', 'pH']].to_numpy() target = wine[&..

[혼공머신] 9. Decision Tree

Decision Tree¶ 아래 데이터는 캐글의 Red Wine Quality 데이터셋의 일부를 발췌한 것이다. In [1]: import pandas as pd wine = pd.read_csv('https://bit.ly/wine_csv_data') In [2]: wine.head() Out[2]: alcohol sugar pH class 0 9.4 1.9 3.51 0.0 1 9.8 2.6 3.20 0.0 2 9.8 2.3 3.26 0.0 3 9.8 1.9 3.16 0.0 4 9.4 1.9 3.51 0.0 class = 0 이면 레드와인, 1이면 화이트와인(양성 클래스) 판다스 데이터프레임의 유용한 메서드 2가지 info() : 데이터프레임의 각 열의 데이터 타입과 누락된 데이터가 있는..

[혼공머신] 8. Stochastic Gradient Descent

Stochastic Gradient Descent¶ 앞서 훈련한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 더 훈련하는 방식을 점진적 학습이라고 한다. 점진적 학습의 대표적인 알고리즘이 확률적 경사 하강법(Stochastic Gradient Descent, SGD)이다. SGD는 전체 샘플을 사용하지 않고 딱 하나의 샘플을 훈련 세트에서 랜덤하게 골라 Loss function을 가장 빠르게 줄이는 방법을 찾는다. 이런 방식으로 훈련 세트를 한 번 모두 사용하는 과정을 epoch라고 한다. 일반적으로 경사 하강법은 수십, 수백 번의 epoch를 사용한다. mini-batch gradient descent는 딱 하나가 아니라 여러 개의 샘플을 사용해 경사 하강법을 수행하는 것을 뜻한다. batch ..

[혼공머신] 7. Logistic Regression

Logistic Regression¶ 데이터 준비하기¶ In [1]: import pandas as pd fish = pd.read_csv('https://bit.ly/fish_csv_data') fish.head() Out[1]: Species Weight Length Diagonal Height Width 0 Bream 242.0 25.4 30.0 11.5200 4.0200 1 Bream 290.0 26.3 31.2 12.4800 4.3056 2 Bream 340.0 26.5 31.1 12.3778 4.6961 3 Bream 363.0 29.0 33.5 12.7300 4.4555 4 Bream 430.0 29.0 34.0 12.4440 5.1340 In [2]: print(pd.uniq..

[혼공머신] 6. Feature Engineering & Regularization

데이터 준비¶ In [1]: import pandas as pd df = pd.read_csv('https://bit.ly/perch_csv_data') perch_full = df.to_numpy() print(perch_full) [[ 8.4 2.11 1.41] [13.7 3.53 2. ] [15. 3.82 2.43] [16.2 4.59 2.63] [17.4 4.59 2.94] [18. 5.22 3.32] [18.7 5.2 3.12] [19. 5.64 3.05] [19.6 5.14 3.04] [20. 5.08 2.77] [21. 5.69 3.56] [21. 5.92 3.31] [21. 5.69 3.67] [21.3 6.38 3.53] [22. 6.11 3.41] [22. 5.64 3.5..