교육/SK네트웍스 Family AI 캠프

[플레이데이터 SK네트웍스 Family AI캠프 14기] 6주차 회고

shining park 2025. 5. 18. 19:21

Class Daily Log

 

 

⭐Hyper Parameter

  • 하이퍼파라미터
  • 모델의 성능을 결정하는 사용자가 직접 지정하는 매개변수들
  • 모델의 성능에 영향을 미치는 사용자가 직접 지정하는 설정 값들로, 학습 전에 결정해야 하며 학습 중에 자동으로 조정되지 않음.
  • ex) 학습률, 에폭 수, 배치 크기, 은닉층 개수, 뉴런 수, 정규화 강도, 드롭아웃 비율 등
  • ↔ 반대로, 학습을 통해 모델이 자동으로 조정하는 값들(예: 가중치, 편향)은 모델 파라미터(parameter)
    • ex) 회귀계수, 절편

 

⭐Machine Learning > classificaton evaluation > Confusion Matrix⭐

  • 혼동행렬
  • 행 → 실제 값 긍정(양성)/부정(음성)
  • 열 → 예측 값 긍정(양성)/부정(음성)
  • 실제값내용+예측
    • TP ⇒ 양성(P)이라고 예측, 실제로 양성 (예측성공 T)
    • FN ⇒ 음성(N)이라고 예측, 실제로 양성 (예측실패 F)
     

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression # 분류모델
from sklearn.metrics import confusion_matrix ✅

# 타이타닉 데이터 로드
titanic_df = pd.read_csv('data/titanic_train.csv')
titanic_df.head()

# 타이타닉 전처리
# 입력/라벨 분할
y_titanic = titanic_df['Survived'] # 이진분류(살았다 죽었다)
X_titanic = titanic_df.drop(['Survived'], axis=1)
X_titanic = preprocess_titanic(X_titanic)
X_titanic.info()

# 학습/평가 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X_titanic, y_titanic, random_state=42, test_size=.2, stratify=y_titanic) # 8:2 비율 => test_size=.2, 분류는 stratify 생각해야함

# 학습
lr_clf = LogisticRegression(max_iter=10000) # 반복횟수를 늘려줌..?

confusion_matrix(y_test, my_clf.predict(X_test)) # 혼동행렬 반환 ✅

 

⭐Machine Learning > Cross Validation > cross_val_score()⭐

  • K-Fold 또는 StratifiedKFold의 작동 방식 + 모델 학습/평가까지 한 번에 처리해주는 간편 함수
  • cross_val_score() ⇒ return 각 fold의 평가 점수들
  • 최종 검증점수 ⇒ np.mean(cross_val_score() 리턴값) 평균
  • cross_val_score()는 복제 모델로 내부에서 학습함
  • 따라서 원래의 classifier 객체는 여전히 fit()되지 않은 상태이므로 원본의 모델 학습은 별도로 진행
from sklearn.model_selection import cross_val_score

# - estimator: 모델 객체
# - X: 학습 데이터 (입력)
# - y: 학습 데이터 (라벨)
# - cv: 반복횟수 (or 내부적으로 사용할 KFold 객체)
# - scoring: 평가지표
classifier = DecisionTreeClassifier(random_state=42)

# cv=5 : KFold(n_splits=5)
skfold = StratifiedKFold(n_splits=5)
acc_scores = cross_val_score(classifier, X_train, y_train, cv=skfold, scoring='accuracy')

# 학습 -> ⭐모델 학습은 별도로 진행
classifier.fit(X_train, y_train)

print('검증점수: ', np.round(np.mean(acc_scores), 4)) # => 검증점수:  0.9417

print('평가점수: ', np.round(classifier.score(X_test, y_test), 4))
# 훈련을 시키지 않고, classifier.score 를 호출하면 => NotFittedError: This DecisionTreeClassifier instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

 

Regression > Gradient Descent

  • 경사하강법
  • 손실 함수(Loss Function)를 최소화하는 가중치(파라미터)를 찾는 것
  • RSS (Residual Sum of Squares)
    • 잔차 제곱합 → 값이 작을수록 예측이 실제에 가까운 좋은 모델
    • ⭐RSS를 기반으로 만든 함수는 회귀에서 비용 함수 = 손실 함수 = 로스 함수 라고 부름
    • ⭐y = w0 + w1 * X
      • w0 : 절편 (intercept)
      • w1 : 회귀계수 (coef) → 기울기(가중치)
      • 변수 2개 w0, w1에 대해 각각 편미분하여 이 두 방향의 변화율을 각각 계산하고 이를 곱함

# 경사하강법 구현
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 데이터 준비
np.random.seed(42) # 데이터 생성, 노이즈 추가 목적

# 입력 데이터 생성 (특성 하나, 데이터 갯수는 100개)
# 0과 1 사이의 균등분포를 따르는 난수 반환
# -> 0 ~ 2 사이의 균등분포 난수
X = 2 * np.random.rand(100, 1) # 균등분포 (randn은 정규분포)
print(X.shape) # => (100, 1)

# 타겟 데이터 생성
# 모델이 찾아야하는 모델 기울기(가중치), 절편 (모른다고 가정)
true_w = 6
true_b = 4
y = true_w * X + true_b
# 노이즈 추가 -> 평균0, 표준편차1인 정규분포를 따르는 난수 (100, 1)를 노이즈로 추가
y += np.random.randn(100, 1)

# 시각화
plt.scatter(X, y)
plt.show()

 

 

 

Keep

  • 실습과제를 빼먹지 않은 것
  • 복습을 그 날 못한 경우 다음날에라도 진행한 것
  • 머신러닝 강의를 진행하면서 모르는 부분은 쉬는 시간을 이용해서 강시님께 꼭 질문하고 이해하려 노력한 것
  • 주 3일은 도시락을 싸간 것

Problem

  • 점심 이후 오후 강의시간에 집중을 잘 못하는 것
  • 평일 운동을 자주 하지 못한 것

Try

  • 지하철 이용 시간에 독서나 Daily Log를 통한 복습을 진행할 것
  • 팀프로젝트와 스터디로 인해 복습을 미루지 말 것
  • 평일에도 5/31 SQLD 시험 준비를 위한 공부 꼭 할 것
  • 운동을 꾸준히 해서 체력을 늘릴 것

 

 

🤔💭

이번 주차부터 ML 머신러닝을 배우기 시작하면서 어려움의 체감이 확 올라갔다.

복습을 진행하는데에도 꽤 많은 시간이 소요됐고 거기에 EDA 팀프로젝트를 함께 진행하면서 5/31에 있을 SQLD 시험 준비를 잘 하지 못했다는 아쉬움이 큰 한 주 였다.

목요일에는 교육 시작 이후 처음으로 그날 복습을 당일에 하지 못하는 경험도 했는데, 금요일에 전날 복습까지 함께 진행하며 너무 모든 것을 다 완벽하게 해내려고 아등바등 하지 말자 깨달음을 얻었다.

교육 과정 자체도 6개월로 절대로 짧지 않은 시간이라고 생각한다. 이 시간동안 쭉 열심히 하는 걸 유지하려면 나의 최선을 다하는 것에 초점을 두고 앞으로의 교육 과정에 임하며 완벽주의 성향은 버려야겠다는 생각이 들었다. 완벽주의 성향을 많이 고쳤다고 생각했었는데, 공부와 취업에 대한 조급함이 예전의 안좋은 습관들을 부르고 있다는 느낌을 이번주에 받게 되어서 스스로에게 더 여유를 주고 열심히 참 잘했다고 칭찬해야겠다.

다시 힘을 내고, 긍정적인 방향으로 생각을 전환하게 된데에는 교육 동기들의 영향이 커서 나도 동기들에게 좋은 영향을 주는 사람이고 싶다는 생각까지 했던 한주였다! 아자자자 화이팅 :)