Supervised learning: predicting an output variable from high-dimensional observations
원본 사이트: https://scikit-learn.org/stable/tutorial/statistical_inference/supervised_learning.html
지도 학습: 고차원 관측치로부터 결과값 예측하기
지도 학습은 관측 데이터
x 와 "정답" 또는 "레이블"이라고 부르는 예측 변수 y의 관계를 학습합니다. 대부분, y는 n_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])
k-최근접 이웃 분류
가장 쉬운 분류인 최근접 이웃: 새로운 관측치 X_test가 주어지면, 훈련 세트(예: 추정기를 훈련하는 데 사용되는 데이터 세트)에서 그 샘플과 가장 가까운 특성 벡터를 찾습니다.(이 분류에 대해 더 자세하게 알고 싶다면 온라인 scikit-learn 문서의 최근접 이웃 부분을 봐주세요.)
학습 알고리즘을 실험하는 동안 추정기를 맞추는 데 사용된 데이터에서 추정기의 예측을 테스트하지 않는 것이 중요합니다. 이는 새 데이터에 대한 추정기의 성능을 평가하지 않기 때문입니다.
여러 학습 알고리즘을 실험하는 동안, 추정기를 훈련하는 데 사용된 데이터로 추정기의 예측 성능을 테스트하지 않는 것이 중요합니다. 이는 새 데이터에 대한 추정기의 성능을 평가하는 것이 아니기 때문입니다. 그래서 보통 데이터 세트를 훈련 세트와 테스트 세트로 분리합니다.
KNN (k nearest neighbors) 분류 예시:
# 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
댓글남기기