파이썬 라이브러리를 활용한 머신러닝을 보고 정리한 내용입니다.
정답은 아래에...!
머신러닝 프로세스에서 가장 중요한 과정은 사용할 데이터를 이해하고 그 데이터가 해결해야 할 문제와 어떤 관련이 있는지를 이해하는 일입니다. 아무 알고리즘이나 선택해서 데이터를 입력해보는 것은 좋은 방법이 아닙니다. 데이터셋으로 무엇을 하는 것인지 머신러닝 모델을 만들기 전에 반드시 이해해야 합니다.
넓은 시각으로 보면, 머신러닝 알고리즘이나 방법론은 특정 문제를 푸는 전체 과정의 일부일 뿐입니다. 항상 머릿속에 전체 시스템에 대한 큰 그림을 담고 있어야 합니다. 많은 사람이 복잡한 머신러닝 솔루션을 구축하느라 오랜 시간을 투자하고 나서야 문제를 풀기에 적절한 방법이 아니었음을 깨닫습니다.
scikit-learn에서 데이터는 대문자 X로 표시하고, 레이블은 소문자 y로 표기하는 것은 수학에서 함수의 입력을 x, 출력을 y로 나타내는 표준 공식 f(x) = y에서 유리된 것입니다. 수학의 표기 방식을 따르되, 데이터는 2차원 배열(행렬)이므로 대문자 X를, 타깃은 1차원 배열(벡터)이므로 소문자 y를 사용합니다.
머신러닝 모델을 만들고, 새로운 데이터를 모델로 예측할 때에는 정답(클래스 레이블)이 없습니다.
따라서 테스트 세트를 사용하여 실제 레이블과 예측한 결과의 예측 정확도를 계산하여 모델의 성능을 평가합니다.
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
knn = KNeighborsClassifier(n_neighbors=1) # 이웃의 개수.
knn.fit(X_train, y_train)
X_new = np.array([[5, 2.9, 1, 0.2]]) # 예측시킬 새로운 데이터
# 2차원 Numpy 배열의 행으로 들어가는 이유는, scikit-learn이 항상 데이터가 2차원 배열일걸로 예상하기 때문
prediction = knn.predict(X_new) # 새로운 데이터의 예측값, 레이블 값을 반환
iris_dataset['target_names'][prediction] # 예측값의 레이블의 데이터셋상의 이름을 알 수 있음
y_pred = knn.predict(X_test) # 테스트셋에 대한 예측
print(f"테스트 세트의 정확도: {knn.score(X_test, y_test):.2f}")
지도학습은 입력과 출력 샘플 데이터가 있고, 주어진 입력으로부터 출력을 예측할 때 사용합니다.
입력/출력 샘플 데이터, 즉 훈련 세트로부터 머신 러닝 모델을 만듭니다. 목표는 이전에 본 적 없는 새로운 데이터에 대해 정확한 출력을 예측하는 것입니다.
지도 학습에는 분류 Classification과 회귀 regression이 있습니다.
-
분류 : 미리 정의된, 가능성 있는 여러 클래스 레이블 중 하나를 예측
→ 0,1의 레이블을 클래스라고 하기 때문에 classification입니다.
- 딱 두개의 클래스로 분류하면 이진 분류 binary classification
- 셋 이상의 클래스로 분류하면 다중 분류multiclass classification라고 합니다.
-
회귀 : 연속적인 숫자, float를 예측하는 것.
예시 : 어떤 사람의 교육 수준, 나이, 주거지를 바탕으로 연간 소득 예측
회귀와 분류를 쉽게 구별하려면, 출력 값에 연속성이 있는가를 생각하면 됩니다
- 연속성이 있다 → 회귀 문제 (데이터를 바탕으로 소득을 예측하는 경우 400만, 399만, 401만을 예측하는 경우의 큰 차이가 없습니다.)
- 연속성이 없다 → 클래스의 레이블별로 다른 정보를 의미합니다. (사과와 바나나, 오렌지 같이 사이에 중간값이 없습니다.)
왼쪽은 K-nearest neighbors Classification,
오른쪽은 K-nearest neighbors Regression 입니다.
Classification의 경우 3개의 클래스 레이블로 데이터를 구별하는 반면,
Regression의 경우 인접한 데이터를 바탕으로 새로운 데이터의 값을 예측합니다.
'머신러닝, 딥러닝' 카테고리의 다른 글
multi-label 분류 문제에서 f1 score는 못 사용하는 걸까? (3) | 2021.02.16 |
---|---|
n_jobs = -1 ? 2 ? 4? 뭘 넣지? (3) | 2021.02.14 |
시계열 데이터에서의 invalid type promotion error (0) | 2021.02.10 |
Cross Validation vs Train/Validation/Train Set 나누기 (0) | 2021.02.09 |
threshold, precision, recall의 의미 (0) | 2021.02.08 |