[KT AIVLE] KT 에이블스쿨 5기 DX트랙 10주차 후기(AICE Associate 대비 4차 미니 프로젝트)

728x90

10주차 4차 미니 프로젝트 (4월 22일 ~ 23일)

4차 미니 프로젝트에서는 AICE Associate 시험 대비를 위한 시간을 가졌습니다. 데이터 전처리부터 머신러닝, 딥러닝까지 여태껏 배웠던 교육과정을 한번에 정리할 수 있어서 좋았습니다! 다만 분명 배웠음에도 기억이 나지를 않아서 구글링을 멈출 수가 없었습니다.. 시험 합격하려면 잊어버리지 않게 꾸준히 준비해야할 거 같습니다!!

 

AICE Associate 시험 대비

1. 라이브러리 설치 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
!pip install seaborn
import seaborn as sns
import sklearn as sk

 

2. 데이터 로드

df = pd.read_csv('파일 경로')

 

3. 한글 폰트 깨짐 현상 해결

font_list = [font.name for font in fm.fontManager.ttflist]
font_list
plt.rcParams['font.family'] = 'Malgun Gothic'

 

4. 데이터프레임 정보 확인

  • 인덱스: df.index
  • 컬럼: df.columns
  • 값: df.values
  • 각 범주별 빈도수 확인: df.value_counts()
    • normalize = True를 주면 정규화된 값
  • 행, 열 개수: df.shape
  • 데이터프레임 컬럼 타입 확인: df.dtypes
  • 원하는 데이터 타입 확인: df.select_dtypes()

 

5. 데이터 전처리

# 데이터 프레임 제거
df.drop(axis=0/1, inplace = False/True)

# 값 변경
df.replace({'바꾸고자 하는 값': '바뀌는 값'}, inplace = False/True)

# 결측값 대체
df['열이름'].fillna('바뀌는 값', inplace = False/True)

# 데이터 프레임 열 타입 변환
df['열이름'] = df['열이름'].astype(type)

 

그룹 집계

df.groupby(by=['그룹기준 열'])['집계 대상 열'].집계함수()

 

정규화/표준화 (스케일링)

# import
from sklearn.preprocessing import MinMaxScaler

# 객체 생성
scaler = MinMaxScaler()

# 스케일링 적용
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

 

인코딩

# 라벨 인코딩 Label Encoding
from sklearn.preprocessing import LabelEncoder
 
# 선언
int_encoder = LabelEncoder()

# 인코딩 적용
df['범주형 열'] = int_encoder.fit_transform(df['범주형 열'])


# 원-핫 인코딩 One-Hot Encoding
from sklearn.preprocessing import OneHotEncoder
 
df = pd.get_dummies(df, columns=['범주형 열'], drop_first=True)

 

6. 모델링, 성능 평가

# import
from sklearn.model_selection import train_test_split

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.2, stratify=y, random_state=42)

# 모델 학습
model.fit(X_train, y_train)

# 모델 검증
model.score(X_test, y_test)

# 모델 예측
model.predict(X_test)

 

# 모델 검증

from sklearn.metrics import * 

# 분류 모델 평가 지표
from sklearn.metrics import accuracy_score 		# 정확도
from sklearn.metrics import precision_score 	# 정밀도
from sklearn.metrics import recall_score 		# 재현율
from sklearn.metrics import f1_score 			# f1 score
from sklearn.metrics import confusion_matrix 	# 혼동행렬
from sklearn.metrics import accuracy_score 		# 모든 지표 한번에

# 회귀 모델 평가 지표
from sklearn.metrics import r2_score			# R2 결정계수
from sklearn.metrics import mean_squared_error	# MSE

 

7. 머신러닝 모델링

# 라이브러리 불러오기
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.linear_model import LinearRegression

 

confusion matrix를 구하고 heatmap 그래프 시각화, classification_report를 활용하여 성능을 출력

y_pred = lgbm.predict(X_valid)
cm = confusion_matrix(y_valid, y_pred)
sns.heatmap(cm, annot=True)

print(classification_report(y_valid, y_pred, zero_division=1))

 

8. 딥러닝 모델링

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

 

model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', 
              loss='binary_crossentropy', 
              metrics=['accuracy']) 

es = EarlyStopping(monitor='val_loss', patience=5) 

checkpoint_path = 'best_model.keras'
mc = ModelCheckpoint(checkpoint_path, monitor='val_loss', verbose=1, save_best_only=True)

history = model.fit(X_train, y_train, epochs=30, batch_size=16,
                   validation_data = (X_valid, y_valid),
                    callbacks=[es, mc]
                    )

 

딥러닝 시각화

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()
728x90