맞춤형 플랫폼 개발 도전기 (웹개발, 딥러닝, 블록체인)

빅데이터분석기사 실기 Basic 3 (작업형 : Machine Learning Process) 본문

빅데이터분석기사

빅데이터분석기사 실기 Basic 3 (작업형 : Machine Learning Process)

경이가 꿈꾸는 플랫폼 개발 2021. 11. 15. 23:00

머신러닝 프로세스는 크게

 

1. 데이터셋 (Data Set) 분할

2. Data 전처리

3. Model 학습

4. Hyper Parameter 탐색과 Model Tuning

5. Model 성능 평가

 

로 나눌 수 있다.

 

데이터셋을 분할할 때는 어떤 것을 독립변수, 종속변수로 할지 정한 뒤, 학습용 데이터와 테스트용 데이터로 분할한다. 일반적으로 학습데이터 70~80%, 학습된 모델이 다른 데이터에도 맞는지 확인(일반화가 잘 되었는지)하기 위한 테스트데이터 20~30%로 나눈다. 

 

그러고 난 후, 독립변수(X)를 정규화시켜야 한다. 단위가 다르거나 범주형일 경우 변수 간의 거리나 상관관계에 있어 왜곡이 생길 수 있기 때문이다.  정규화에는 Standardization과 MinMax 가 있다. MinMax 예시는 아래와 같다. Standardization은 변수를 관찰하면서 로그변환, 제곱근 변환 등의 여러 방법을 통해 정규화시켜줘야 한다.

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=42, test_size=0.2)

scaler_minmax = MinMaxScaler()
scaler_minmax.fit(x_train)
scaler_minmax.fit(x_test)
x_scaled_minmax_train = scaler_minmax.transform(x_train)
x_scaled_minmax_test = scaler_minmax.transform(x_test)

또한 범주형 자료일 때 그대로 학습시켜선 안되기에 원핫 인코딩을 한다. 범주형 테이터의 컬럼 한개를 '범주의 개수' 만큼 늘려서 범주에 해당하는 값에만 '1' 을 주고 나머지에는 '0' 을 주어 처리하는 방법이다.

pd.get_dummies(df, columns=['Pclass']).head()

이처럼, 해당하는 항목에만 1을 주고, 나머지를 0으로 주는 방식으로 쪼갤 수도 있지만, one-hot encoding 의 첫번째 column 은 필요없다 (없어도 식별 가능하니까 : 001 010 100 말고 10 11 01 로도 표현이 가능하다는 것이다.) 따라서, drop_first = True (기본값 False) 를 줘서 column 개수를 줄일 수 있다.

pd.get_dummies(df, columns=['Pclass', 'Sex', 'Embarked'], drop_first=True).head()

 

이런 과정을 거쳐 정규화가 끝났다면,

Scikit-Learn (sklearn) 패키지를 이용해서 모델을 학습시켜준다. 대부분 알고리즘은 (연속형 레이블을 가진)회귀문제, (범주형 레이블을 가진)분류문제에 모두 사용 가능하지만, LogisticRegression처럼 분류문제에만 적합하거나, LinearRegression, Lasso, Ridge ElasticNet 등 회귀문제만 적합한 알고리즘도 있다. 따라서, 여러가지 알고리즘을 병합해 더 좋은 성과를 도출하기 위해 고안한 Ensemble 기법도 있다. 결론은, 목적에 맞는 모델을 사용해 학습시키는 것이 매우 중요하다는 것이다.

 

위의 과정이 끝났다면, HyperParameter(하이퍼파라미터)를 조정하며 데이터에 적합한 최적의 알고리즘을 찾아야 한다. 특히, Scikit-Learn에서는 Grid Search(그리드 탐색)이나 Random Search(랜덤 탐색)을 통해 여러 조합의 결과를 파악할 수 있는 기능을 제공한다. KNN에서는 k값이 작을수록 정교하게 분류가 가능하지만, 일반화는 떨어진다. k 값을 조정하며 어떤 것에 초점을 맞출 것인지 목표를 정하고, 이에 맞는 하이퍼파라미터를 조정하면 된다. SVM에서는 C와 gamma 값이 하이퍼파라미터가 된다.

* 파라미터는 데이터를 통해 구해지며 (They are estimated or learned from data), 모델 내부적으로 결정되는 값이다. 사용자에 의해 조정되지 않는다. 결국 내가 통제할 수 없는, 데이터를 통해 형성되는 매개변수라고 생각하면 된다.

* 하이퍼 파라미터는 모델링할 때 사용자가 직접 세팅해주는 값을 뜻합니다. (They are often specified by the practitioner) 즉, 내가 통제할 수 있는 값이라는 것이다. 이 하이퍼파라미터를 어떻게 설정해주느냐에 따라 모델 성능에 엄청난 차이를 가져 올 수 있다.

Reference는 아래 사이트다.

 

What is the Difference Between a Parameter and a Hyperparameter?

It can be confusing when you get started in applied machine learning. There are so many terms to use and […]

machinelearningmastery.com

 

이런 모든 과정이 끝나면, 모델 성능 평가를 한다. 이는 얼마나 정확하게 Y를 예측하였는지가 지표가 된다. 분류 알고리즘에서 가장 대표적인 모델 결과는 오차행렬(confusion matrix)이고, 

https://towardsdatascience.com/confusion-matrix-for-your-multi-class-machine-learning-model-ff9aa3bf7826

Accuracy( TP+TN / 전체), error rate( 1- Accuracy), Sensitivity(TP/TP+FN) 등의 다양한 지표를 이용한다.

 

회귀에서 대표적인 모델 성능 결과는 R²과 RMSE가 있다. R²는 0과 1 사이의 값으로 1에 가까울수록 실제값과 예측값이 일치하는 정도가 높고, RMSE는 실제값과 예측값의 차이를 평균적으로 계산한 값이기 때문에 낮을수록 좋다.

 

이런 기초를 바탕으로, 머신러닝 프로세스를 직접 해보며 실력을 다져보도록 하자!

Comments