Computer Science/Machine learning

[Machine learning] 3. Preprocessing

  • -
728x90
반응형

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)

이떄, 위 함수에서 degreeparameter 값을 수정함으로써 고차항의 최대 차수를 지정할 수 있다. 해당 값이 커질수록 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 과정은 선행되지 않을 수 있다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.