2 분 소요

원본 사이트: https://scikit-learn.org/stable/tutorial/statistical_inference/supervised_learning.html


지도 학습: 고차원 관측치로부터 결과값 예측하기

지도 학습으로 문제 해결하기
지도 학습은 관측 데이터 x 와 "정답" 또는 "레이블"이라고 부르는 예측 변수 y의 관계를 학습합니다. 대부분, yn_samples 길이의 1D 배열입니다.scikit-learn의 모든 지도 학습 추정기는 모델을 학습시키기 위한 fit(X, y) 메서드를 제공합니다. 그리고, 레이블이 지정되지 않은 관측치 X가 주어지면 예측 레이블 y를 반환하는 predict(X) 메서드도 제공합니다.


어휘: 분류 및 회귀
예측이 관측치에 일련의 유한한 레이블을 지정하는 것, 즉 관찰된 객체에 "이름을 지정"하는 것이라면 이러한 작업을 분류라고 합니다. 반면, 연속적인 타겟 변수를 예측하는 것이 목표라면 회귀라고 합니다.
scikit-learn에서 분류를 할 때는, y는 정수 또는 문자열의 벡터여야 합니다.
Note: scikit-learn 내에서 사용되는 기본 기계 학습 어휘에 대한 빠른 실행은 다음 문서를 참조하세요.

최근접 이웃과 차원의 저주

붓꽃 분류하기:


이 붓꽃 데이터 세트는 꽃잎과 꽃받침의 길이와 너비로부터 3가지 종류의 품종(Setosa, Versicolor, Virginica)으로 구분하는 분류 작업에 쓰입니다:

import numpy as np
from sklearn import datasets
iris_X, iris_y = datasets.load_iris(return_X_y=True)  # Iris 데이터 세트를 X와 y로 따로 할당
np.unique(iris_y) # y의 유일값 출력
array([0, 1, 2])

3D image

k-최근접 이웃 분류


가장 쉬운 분류인 최근접 이웃: 새로운 관측치 X_test가 주어지면, 훈련 세트(예: 추정기를 훈련하는 데 사용되는 데이터 세트)에서 그 샘플과 가장 가까운 특성 벡터를 찾습니다.(이 분류에 대해 더 자세하게 알고 싶다면 온라인 scikit-learn 문서의 최근접 이웃 부분을 봐주세요.)


훈련 세트와 테스트 세트
학습 알고리즘을 실험하는 동안 추정기를 맞추는 데 사용된 데이터에서 추정기의 예측을 테스트하지 않는 것이 중요합니다. 이는 새 데이터에 대한 추정기의 성능을 평가하지 않기 때문입니다.


여러 학습 알고리즘을 실험하는 동안, 추정기를 훈련하는 데 사용된 데이터로 추정기의 예측 성능을 테스트하지 않는 것이 중요합니다. 이는 새 데이터에 대한 추정기의 성능을 평가하는 것이 아니기 때문입니다. 그래서 보통 데이터 세트를 훈련 세트와 테스트 세트로 분리합니다.


KNN (k nearest neighbors) 분류 예시:

3D image

# iris 데이터 세트를 훈련 세트와 세트스 세트로 분리합니다.
# random permutation 은 데이터를 무작위로 분리합니다.
np.random.seed(0)   # 노트북 실행 마다 같은 결과를 내기 위한 seed 설정
indices = np.random.permutation(len(iris_X))  # 0 ~ len(iris_X) 의 수가 무작위로 섞입니다.
iris_X_train = iris_X[indices[:-10]]  # 무작위로 섞인 수 중 맨 뒤 10개를 제외한 인덱스로 추출
iris_y_train = iris_y[indices[:-10]]  # iris_X_train에 맞는 결과값
iris_X_test = iris_X[indices[-10:]]   # 무작위로 섞인 수 중 맨 뒤 10개에 해당하는 인덱스로 추출
iris_y_test = iris_y[indices[-10:]]   # iris_y_test에 맞는 결과값
# 최근접 이웃 분류기를 생성하고 학습
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()          # 분류기 생성
knn.fit(iris_X_train, iris_y_train)   # 분류기 학습
KNeighborsClassifier()
knn.predict(iris_X_test)  # 예측
array([1, 2, 1, 0, 0, 0, 2, 1, 2, 0])
iris_y_test # 정답 레이블
array([1, 1, 1, 0, 0, 0, 2, 1, 2, 0])
차원의 저주

ⓒ 2007 - 2021, scikit-learn developers (BSD License). Show this page source

댓글남기기