Supervised learning and Unsupervised learning
앞 포스팅에서 살펴본 것처럼, 지도 학습(Supervised learning)
과 비지도 학습(Unsupervised learning)
은 레이블 여부에 따라 구분할 수 있었다.
이 중 지도 학습의 경우, 훈련하기 위해 데이터와 정답이 필요한데 이를 각각 Input
, Target
이라고 하고 이 둘을 합쳐 Training data
라 부른다. 주어진 Input에는 여러 가지 Feature
이 존재한다.
Split train set and test set(+ Sampling bias)
머신러닝 알고리즘의 성능을 평가하기 위해서는 훈련 목적으로 쓰는 데이터와 평가 목적으로 쓰는 데이터가 구분되어야 한다.
전자를 Train set
, 후자를 Test set
라 한다. 이때 하나의 데이터를 Sample
이라고 한다.
사이킷런에서는 이러한 작업을 쉽게 할 수 있는 함수를 제공하고 있다.
사용 방법은 다음과 같다.
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(
data, target, random_state = 42)
그러나 Train set과 Test set를 구분할 때 Sampling bias
가 발생할 수 있다. 예를 들어 Test set가 분리되는 과정에서 전체 경향성과 괴리가 발생하게 되면, Bias가 발생할 수 있다.
이를 위해서 해당 함수의 stratify
parameter에 Target data를 전달하게 되면, 해당 Target data의 비율에 맞게 데이터를 나누게 된다.
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(
data, target, stratify = stratify_data, random_state = 42)
Feature engineering
기존의 특성을 사용해서 새로운 특성을 뽑아내는 작업을 Feature engineering
이라고 한다.
이후의 포스팅에서 언급할 내용이지만, 위 작업을 통해 Underfitting
문제를 해결할 수 있다.
사용 방법은 다음과 같다. (이때, include_bias를 False 잡지 않아도 알아서 Scikit-learn에서 절편을 무시하므로 없어도 된다.)
from sklearn.preprocessing import PolynomialFeatures
poly = Polynomialfeatures(include_bias = False)
poly.fit(train_input)
train_poly = poly.transform(train_input)
test_poly = poly.transform(test_input)
이떄, 위 함수에서 degree
parameter 값을 수정함으로써 고차항의 최대 차수를 지정할 수 있다. 해당 값이 커질수록 train_input값에 대한 피팅 값이 높아지게 된다.
Standardize
특성의 스케일이 다르면, 학습하는 과정에서 특정 기준이 과도하게 고려되는 등의 문제가 발생할 수 있다. 이 상황에서 각 Feature를 normalize해야 한다.
사이킷런에서는 이러한 작업을 쉽게 할 수 있는 함수를 제공하고 있다.
사용 방법은 다음과 같다.
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)
Conclusion
Preprocessing 과정은 위 3단계를 거친다는 것이 반사적으로 튀어나올 수 있도록 노력해야 한다. 다만 어떠한 머신러닝 알고리즘을 선택하느냐에 따라서 Feature engineering과 Standardize 과정은 선행되지 않을 수 있다.