교육/KT 에이블스쿨

[KT AIVLE School(에이블스쿨)] - 4주차 후기(머신러닝)

aaaahy 2023. 9. 3. 14:08

에이블 스쿨 4주차(8.28 ~ 9.1) - 4기 AI트랙

에이블 스쿨 시작한지 한 달이 다 되가는 4주차 !! 

벌써 9월이라니,,😑

 

 

머신러닝

 

5일동안 진행된 머신러닝 수업이다. 

학교다닐 때 한 학기동안 머신러닝 수업을 수강한 적이 있었는데 처음부터 어렵게 느껴져서 갈피를 못잡고 질질 끌려다녔던(?) 경험이 있다. 그래서 약간 겁 먹은 상태였지만 강사님이 천천히 너어무 잘 가르쳐주셔서 걱정할 필요가 없단 생각을 첫 날 느꼈다🤭 

아, 졸지 말고 열심히 해야지 ~~ 

 

 강사님께서 머신러닝을 소개해주 실 때, 드라마에 나온 대사를 보여주셨다. 

대사 첫 마디 보자마자 드라마광인 나는 바로 스타트업인걸 알았다 ( ˙◞˙ ) 

컴공과 천재인 도산이가 멋있었다.. 그리고 드라마에서 해커톤 대회도 나오고 달미가 발표하는 부분도 인상 깊게 볼 수 있었다. 전공 관련 드라마인지 모르고 보기 시작했었는데 나름 흥미롭게 시청했다 !! 추천 드립니다.

 

간단한 내용 정리

학습 방법에 따른 분류

  • 지도학습 
  • 비지도학습
  • 강화학습

 

과제에 따른 분류

  • 분류 문제 - 지도 학습
  • 회귀 문제 - 지도 학습
  • 클러스터링 - 비지도 학습

 

이번 과정은 지도학습인 분류문제와 회귀 문제를 다루었다.

문제 유형이 분류 문제 인지 회귀 문제인지 유형 파악 ➝ 알고리즘과 평과 방법 선택 ➝ 관련함수로 모델링 진행

# 1단계: 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

# 2단계: 선언하기
model = LinearRegression()

# 3단계: 학습하기
model.fit(x_train, y_train)

# 4단계: 예측하기
y_pred = model.predict(x_test)

# 5단계: 평가하기
print('MAE:',mean_absolute_error(y_test, y_pred))

↪ 모델링 코드 구조

5일동안 지겹도록 작성한 코드!! 이젠 눈 감고도 작성 가능(?)

 

회귀 모델 성능 평가

➭ 값이 작을수록 모델 성능이 좋음

 

➭ 0 ~ 1 사이의 값, 1이면 모델 완벽히 학습한 것

 

분류 모델 성능 평가

Confusion Matrix

Confusion Matrix 형태 Predicted Value
Negative 0 Positive 1
Actual Value Negative 0 TN FP
Positive 1 FN TP
  • 정확도(Accuracy) = (𝑇𝑁 + 𝑇𝑃) / (𝑇𝑁 + 𝐹𝑃 + 𝐹𝑁 + 𝑇𝑃)
  • 정밀도(Precision) = 𝑇𝑃 / (𝐹𝑃 + 𝑇𝑃)  ➫ 예측관점
  • 재현율(recall) = 𝑇𝑃 / (𝐹𝑁 + 𝑇𝑃) ➫ 실제관점

 

Classfication Report

 

알고리즘

  1. Linear Regression - 회귀 모델에만 사용, 변수가 많아지면 모델이 복잡해짐
  2. KNearest Neighbor - 회귀모델, 분류모델 사용, k값이 적을수록 모델이 복잡해짐, 스케일링 필요(정규화)
  3. Decision Tree - 회귀모델, 분류모델 사용, 트리 깊이가 클수록 모델이 복잡해짐(가지치기 필요!)
  4. Logistic Regression - 분류모델에만 사용

 

K- Fold Cross Validation

k개의 분할에 대한 성능 예측 ➟ 더 일반화된 모델 

모델 선언 후 cross_val_score()으로 사용 가능(기본 분할 개수 cv = 5)

# 1단계: 불러오기
frombsklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score

# 2단계: 선언하기
model = DecisionTreeClassifier(max_depth=3)

# 3단계: 검증하기
cv_score = cross_val_score(model, x_train, y_train, cv=10)

# 확인
print(cv_score)
print(cv_score.mean())

 

튜닝

Hyperparameter : 모델 성능을 최적화하기 위해 조절할 수 있는 매개변수

- KNN : k값(n_neighbors) 에 따라 성능이 달라진다

- Decision Tree : max_depth(트리 최대 깊이 제한), min_samples_leaf, min_samples_split 파라미터 값 조정

 

Grid Search : 파라미터 값 범위를 모두 사용하여 모든 경우의 성능 확인 ➤ 가장 좋은 성능을 보인 파라미터값으로 학습

Random Search : 파라미터 값 범위에서 몇 개 선택할지 지정하여 지정한 개수의 임의의 값에 대한 성능 확인

➤ 가장 좋은 성능을 보인 파라미터값으로 학습

 

앙상블

1) 보팅 : 모델들의 예측 결과를 투표를 통해 최종 예측 결과를 결정

2) 배깅 : 데이터로부터 부트스트랩한 데이터로 모델들을 학습 → 모델들의 예측 결과를 집계

* Random Forest 

 - 랜덤하게 데이터 샘플링

 - 개별 모델이 트리 구성 시 Feature 랜덤하게 선정

 - 트리 여러개가 모여 Forest 숲 구성

3) 부스팅 : 같은 유형의 알고리즘 기반 모델 여러 개에 대해 순차적으로 학습

* XGBoost

 - 회귀, 분류 문제를 모두 지원

4) 스태킹 : 여러 모델의 예측 값을 최종 모델의 학습 데이터로 사용하여 예측, 캐글같은 미세한 성능 차이로 승부를 결정하는 대회에서 사용