일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- linalg.solve()
- list
- 비가변매개변수
- Math Function
- 작업형
- np.savetxt()
- kaggle
- array
- set_index
- 빅데이터
- matplotlib
- 빅분기
- deg2rad
- os.path.join
- Python
- Collections
- 실기
- 빅데이터분석기사
- namedTuple
- np.save()
- 가변매개변수
- request Method
- coding
- heapmerge
- BASIC
- 필답형
- Heapreplace
- np.load()
- DEEPLEARNING
- numpy
- Today
- Total
맞춤형 플랫폼 개발 도전기 (웹개발, 딥러닝, 블록체인)
빅데이터분석기사 실기 Basic 3 (작업형 : Machine Learning Process) 본문
머신러닝 프로세스는 크게
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)이고,
Accuracy( TP+TN / 전체), error rate( 1- Accuracy), Sensitivity(TP/TP+FN) 등의 다양한 지표를 이용한다.
회귀에서 대표적인 모델 성능 결과는 R²과 RMSE가 있다. R²는 0과 1 사이의 값으로 1에 가까울수록 실제값과 예측값이 일치하는 정도가 높고, RMSE는 실제값과 예측값의 차이를 평균적으로 계산한 값이기 때문에 낮을수록 좋다.
이런 기초를 바탕으로, 머신러닝 프로세스를 직접 해보며 실력을 다져보도록 하자!
'빅데이터분석기사' 카테고리의 다른 글
빅데이터분석기사 실기 Basic 2 (필답형) (0) | 2021.11.12 |
---|---|
빅데이터분석기사 실기 Basic 1 (작업형 : Numpy, Pandas, EDA, Cleansing) (0) | 2021.11.11 |