자격증

[자격증] 머신러닝-딥러닝 (for AICE Associate)

haebogu 2025. 2. 14. 10:13
머신러닝과 딥러닝 모델을 학습하고 결과를 확인하는
전반적인 과정에 대한 코드 맛보기 ! 

 

데이터 준비 
@ 필요한 라이브러리 임포트
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(1activation='sigmoid'))
@ 다중 분류 모델 (Y값을 One-Hot-Encoding 한경우)
model.add(Dense(2, activation='softmax'))
@ 다중 분류 모델 (Y값을 One-Hot-Encoding 하지 않은 경우)
model.add(Dense(2, activation='softmax'))
@ 예측 모델 : 수치형 데이터의 값을 예측 하는 회귀 모델  (활성화함수 생략가능) 
model.add(Dense(1activation='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