[자격증] 머신러닝-딥러닝 (for AICE Associate)
머신러닝과 딥러닝 모델을 학습하고 결과를 확인하는
전반적인 과정에 대한 코드 맛보기 !
데이터 준비
@ 필요한 라이브러리 임포트 |
import numpy as np import pandas as pd import matplotlib.pyplot as plt |
@ cvs 데이터 읽어오기 : pandas의 read_csv로 읽어오면 dataframe 형식의 파일로 생성된다. |
df = pd.read_csv('data_v1_save.csv') |
@ 라벨 인코딩 : 특정 시리즈(컬럼)의 범주형 데이터에 0부터의 정수를 할당하여 변환 / fit-정수할당, transform-변환 |
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() le.fit(df['gender']) df['gender'] = le.transform(df['gender']) |
@ 원핫 인코딩 : 특정 칼럼의 범주형 데이터 개수만큼의 컬럼을 만들어 각 열에 해당하는 값이 1로 표시되도록 변환 |
pd.get_dummies(data=df, columns=['MultipleLines']) |
데이터 셋 분할 및 처리
@ 입력(X)과 레이블(y) 나누기 :X값은 분석에 사용할 feature, y값이 예측하고자 하는 값 |
X = df1.drop('Churn', axis=1) y = df1['Churn'] |
@ PCA(주성분 분석)으로 데이터 범주간 차이를 최대로 하는 주성분으로 차원축소 |
from sklearn.decomposition import PCA pca = PCA(n_components=38) pca_components = pca.fit_transform( X ) |
@ 성분별로 분산 비율을 확인 : 각 성분이 데이터의 분산을 어느정도로 설명할 수 있는지에 대한 값(0~1) |
pca.explained_variance_ratio_ |
@ 학습데이터(Train), 평가 데이터(Test) dataset 나누기 / stratify=y는 |
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y, random_state=42) |
@ 데이터를 0과 1의 범위로 만들어주는데이터 정규화/스케일링 : MinMaxScaler() |
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) |
머신러닝 모델 개발
@ 사용할 알고리즘 모델 선택 및 라이브러리 임포트 : 로지스틱 회귀 모델 |
from sklearn.linear_model import LogisticRegression |
@ 모델 정의 및 학습 : train data를 모델에 학습(fit)한다. |
lg = LogisticRegression() lg.fit(X_train, y_train) |
@ 분류기의 성능을 평가: score() : 기본적으로 정확도(accuracy)를 반환 / 성능평가 전 확인 |
lg.score(X_test, y_test) |
@ 분류기를 통한 test 데이터의 레이블 결과값을 반환 : predict(X_test) |
lg_pred = lg.predict(X_test) |
@ 성능평가를 위한 라이브러리 임포트 |
from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score from sklearn.metrics import classification_report |
@ 분류기 성능 평가 지표 : 오차행렬 / 정확도 / 정밀도 / 재현율 / f1 점수(정밀도 + 재현율) |
confusion_matrix(y_test, lg_pred) accuracy_score(y_test, lg_pred) precision_score(y_test, lg_pred) recall_score(y_test, lg_pred) f1_score(y_test, lg_pred) |
@ 여러가지 성능평가지표 한번에 확인 : accuracy_score / precision_score / f1_score |
print(classification_report(y_test, lg_pred)) |
머신러닝 여러 알고리즘 모델 임포트 정리
@ 로지스틱 회귀(분류) 모델 : 독립 변수와 종속 변수 간의 관계를 S자형 곡선으로 모델링하여 이진 분류를 수행 |
from sklearn.linear_model import LogisticRegression lg = LogisticRegression() |
@ KNN (K-Nearest Neighbor) : 새로운 데이터 포인트를 주변의 K개의 가장 가까운 데이터 포인트를 기반으로 분류 |
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=5) |
@ 결정트리(DecisionTree) : 트리 형태로 분할하여 의사 결정 규칙을 생성하고 분류 또는 회귀를 수행 |
from sklearn.tree import DecisionTreeClassifier dt = DecisionTreeClassifier(max_depth=10, random_state=42) |
@ 랜덤포레스트(RandomForest) : 여러개의 DecisonTree로 학습하고 다수결로 결정하는 Bagging 모델 |
from sklearn.ensemble import RandomForestClassifier rfc = RandomForestClassifier(n_estimators=3, random_state=42) |
@ XGBoost : 여러개의 DecisionTree를 결합하여 Strong Learner 만드는 Boosting 앙상블 기법 |
from xgboost import XGBClassifier, plot_importance xgb = XGBClassifier(n_estimators=3, random_state=42) |
@ Light GBM : DecisionTree 알고리즘 기반의 Boosting 앙상블 기법 |
from lightgbm import LGBMClassifier lgbm = LGBMClassifier(n_estimators=3, random_state=42) |
딥러닝 DNN 구조 정의 및 학습
@ 필요한 라이브러리 임포트 |
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout tf.random.set_seed(100) |
@ 하이퍼 파라미터 설정 : batch_size, epochs |
batch_size = 16 epochs = 20 |
@ Sequential 모델 정의 : ex) 이진분류 모델(출력층에 sigmoid 활성화 함수) |
-> 38개의 input L, 각각 4개 3개의 hidden L, 1개의 output L model = Sequential() model.add(Dense(4, activation='relu', input_shape=(38,))) model.add(Dense(3, activation='relu')) model.add(Dense(1, activation='sigmoid')) |
@ 모델의 과적합 방지를 위한 데이터 DropOut : Sequential 모델 정의할때 각 층 사이에 끼워넣음 |
model.add(Dropout(0.3)) |
@ 모델 구조 확인 |
model.summary() |
@ 모델 컴파일 - 이진분류 |
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) |
@ 모델 학습 |
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=10) |
@ 콜백 함수 추가 : 모델 학습 조기 종료 조건 |
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint early_stop = EarlyStopping(monitor='val_loss', verbose=1, patience=5) |
@ validation loss가 최저인 최적 모델 저장 : 최적 모델 저장 조건 |
check_point = ModelCheckpoint('best_model.h5', verbose=1, monitor='val_loss', save_best_only=True) |
@ 조기 종료 및 최적 모델 저장 옵션을 추가후 모델 학습 / history는 학습 과정중 다양한 지표 (ex. loss, accuracy) 값이 저장 |
history = model.fit(x=X_train, y=y_train, epochs=50 , batch_size=20, validation_data=(X_test, y_test), verbose=1, callbacks=[early_stop, check_point]) |
모델 성능평가
@ history에 저장된 모델 성능 평가 (시각화) : 학습 반복 과정 모니터링 |
plt.plot(history.history['accuracy']) plt.plot(history.history['val_accuracy']) plt.title('Accuracy') plt.xlabel('Epochs') plt.ylabel('Acc') plt.legend(['acc', 'val_acc']) plt.show() |
@ 다중 모델 성능 평가(정확도) |
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score from sklearn.metrics import classification_report pred = model.predict(X_test) y_pred = np.argmax(pred, axis=1) accuracy_score(y_test, y_pred) |
딥러닝 모델 출력층 - 모델 종류별
@ 이진 분류 모델 : 두가지 종류가 있는 데이터를 분류 |
model.add(Dense(1, activation='sigmoid')) |
@ 다중 분류 모델 (Y값을 One-Hot-Encoding 한경우) |
model.add(Dense(2, activation='softmax')) |
@ 다중 분류 모델 (Y값을 One-Hot-Encoding 하지 않은 경우) |
model.add(Dense(2, activation='softmax')) |
@ 예측 모델 : 수치형 데이터의 값을 예측 하는 회귀 모델 (활성화함수 생략가능) |
model.add(Dense(1, activation='linear')) |
딥러닝 모델 컴파일 - 모델 종류별
@ 이진 분류 모델 : 두가지 종류가 있는 데이터를 분류 |
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) |
@ 다중 분류 모델 (Y값을 One-Hot-Encoding 한경우) |
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) |
@ 다중 분류 모델 (Y값을 One-Hot-Encoding 하지 않은 경우) |
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) |
@ 예측 모델 : 수치형 데이터의 값을 예측 하는 회귀 모델 |
model.compile(optimizer='adam', loss='mse', metrics=['mse', 'mae']) |
* optimizer는 adam으로 동일 적용 (실제 모델 생성에서는 적절한 optimizer선택도 중요)
참고 자료(직접 작성)
***AICE를 위한 데이터 전처리 과정을 알고싶다면 ***
https://from-biology.tistory.com/39
[자격증] 데이터 전처리 (for AICE Associate)
AI에게 있어 데이터 전처리의 중요성은 말할 필요가 없을 정도로 중요하다. 데이터에 대한 이해를 통해 올바른 결과를 얻을 수 있다. 출제 범위 및 합격 기준문제 수 : 14문항 / 90분합격 점수 : 8
from-biology.tistory.com
***머신러닝의 개념들에 대한 설명을 보고싶다면 ***
https://from-biology.tistory.com/37
[ML] 머신러닝 기초개념 정리
머신러닝 기본 개념 스쳐가며 보기 (지도학습)## 모델학습이란- 목표: 최적 직선 구하기 -> 직선별 손실함수 구하기 -> 손실함수 최소값 구하기## 머신러닝 프로세스- 데이터 수집 -> 데이터 정리 ->
from-biology.tistory.com
***위에 나오는 딥러닝 용어들에 대해 확인하고 싶다면***
https://from-biology.tistory.com/40
[DL] 딥러닝 기초개념 정리
딥러닝을 위한 가장 기본적인 코드들1. tips2.csv 데이터 가공 및 불러오기import seaborn as snsfrom sklearn.preprocessing import LabelEncodertips = sns.load_dataset('tips')tips.sex.replace(['Female', 'Male'], [0,1], inplace=True) # 성
from-biology.tistory.com