✅ 오늘 한 것
머신러닝의 이해와 라이브러리 활용 심화, 머신러닝 특강
✏️ 오늘 배운 점
머신러닝의 이해와 라이브러리 활용 심화
딥러닝: 자연어처리와 이미지 처리에 뛰어난 발전
- 딥러닝과 머신러닝
- 공통점: 데이터로부터 가중치를 학습하여 패턴을 인식하고 결정을 내리는 알고리즘 개발과 관련된 인공지능(AI)의 하위 분야
- 차이점
- 머신러닝: 데이터 안의 통계적 관계를 찾아내며 예측이나 부류를 하는 방법
- 딥러닝: 머신러닝의 한 분야로 신경세포 구조를 모방한 인공 신경망을 사용함.
경사 하강법(Gradient Descent): 모델의 손실 함수를 최소화하기 위해 모델의 가중치를 반복적으로 조정하는 최적화 알고리즘
- 인공 신경망의 학습
- 입력 데이터가 신경망의 각 층을 통과하면서 최종 출력까지 생성되는 과정을 순전파(Propagation)
- 신경망의 오류를 역방향으로 전파하여 각 층의 가중치를 조절하는 과정을 역전파(Backpropagation)
- epoch: 전체 데이터가 신경망을 통과하는 한 번의 사이클
- 1000 epoch: 데이터 전체를 1000번 학습
- batch: 전체 훈련 데이터 셋을 일정한 크기의 소 그룹으로 나눈 것
- iteration: 전체 훈련 데이터 셋을 여러 개(=batch)로 나누었을 때 배치가 학습되는 횟수
머신러닝 특강
랜덤 포레스트: "한 사람의 판단보다 여러 사람의 판단이 더 정확하다"는 아이디어를 머신러닝에 적용한 것
핵심 아이디어:
- 배깅(Bagging): 부트스트랩 샘플링으로 다양한 훈련 데이터 생성
- 특성 무작위성: 각 분할에서 일부 특성만 고려
- 투표 방식: 여러 트리의 예측을 종합 (분류: 다수결, 회귀: 평균)
1단계: 부트스트랩 샘플링(원본 데이터에서 복원 추출로 새로운 데이터셋을 만드는 방법)
2단계: 특성 무작위성(Random Feature Selection, 각 노드 분할 시 전체 특성 중 일부만 랜덤하게 선택하여 고려하는 방법)
3단계: 투표 방식 (Votiong Mechanism)
1단계: 랜덤 포레스트 모델 생성
# RandomForestClassifier import
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 랜덤 포레스트 모델 생성
rf_model = RandomForestClassifier(
n_estimators=100, # 트리 개수
max_depth=10, # 최대 깊이
min_samples_split=20, # 분할 최소 샘플
min_samples_leaf=10, # 리프 최소 샘플
max_features='sqrt', # 특성 무작위성 루트
bootstrap=True, # 부트스트랩 사용
random_state=42,
)
2단계: 모델 학습 과정
# 학습 시간 측정
import time
start_time = time.time()
rf_model.fit(X_train, y_train)
end_time = time.time()
training_time = end_time - start_time
3단계: 기본 성능 평가
rf_train_pred = rf_model.predict(X_train)
rf_test_pred = rf_model.predict(X_test)
# 정확도 계산
rf_train_acc = accuracy_score(y_train, rf_train_pred)
rf_test_acc = accuracy_score(y_test, rf_test_pred)
rf_overfit = rf_train_acc - rf_test_acc
# 특성 중요도 추출
feature_importance = pd.DataFrame({
'feature': X.columns,
'importance': rf_model.feature_importances_
}).sort_values('importance', ascending=False)
for idx, row in feature_importance.iterrows():
print(f"{row['feature']:15}: {row['importance']:.3f}")
트리 시각화
first_tree = rf_model.estimators_[0] # 첫 번째 트리를 가져옴
for i in range(0, 100):
first_tree = rf_model.estimators_[i]
# 첫 번째 트리 시각화
plt.figure(figsize=(20, 12))
plot_tree(first_tree,
feature_names=X.columns,
class_names=['사망', '생존'],
filled=True,
rounded=True,
fontsize=10)
plt.title('랜덤 포레스트 내 첫 번째 디시전 트리', fontsize=16)
plt.show()
XGBoost: 그래디언트 부스팅을 극한으로 최적화한 알고리즘
1단계: 첫 번째 기본 트리 만들기(약한 분류기)
첫 번째 모델의 시도 + 결과 분석
2단계: 첫 번째 모델의 오차 분석하기
오차패턴 찾기 + 가중치 부여 메커니즘
3단계: 두 번째 약한 분류기 만들기 (실수 보완에 집중)
두 번째 모델의 학습 + 결과
4단계: 세 번째 약한 분류기 만들기 (남은 실수 더 보완)
앞선 모델들에서 계속해서 틀리는 요소들에 집중하여(가중치를 부여하여) 분류기 생성
무한정 모델을 추가하면 훈련 데이터(train)에만 과적합되기에 별도 검증 데이터(test)를 활용하여 검증 성능이 하락하면 조기 종료를 한다.
5단계: 최종 예측 - 모든 모델의 지혜 결합
1단계: XGBoost 라이브러리 import
import xgboost as xgb
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score, roc_auc_score
import time
2단계: XGBoost 모델 생성 및 하이퍼파라미터 설정
xgb_model = XGBClassifier(
n_estimators=100, # 부스팅 라운드 수 (트리 개수)
max_depth=6, # 트리 최대 깊이
learning_rate=0.1, # 학습률 (각 트리의 기여도)
subsample=0.8, # 샘플 서브샘플링 비율
colsample_bytree=0.8, # 특성 서브샘플링 비율
random_state=42,
eval_metric='logloss', # 평가 지표
)
3단계: 조기 종료를 위한 검증 세트 준비
X_train, y_train, X_test, Y_text =>
8:2
100
x_train 80
20%
60% 20% 20% => 100%
X_train_split, X_val_split, y_train_split, y_val_split = train_test_split(
X_train, y_train,
test_size=0.2, # 훈련 데이터의 20%를 검증용으로
random_state=42,
stratify=y_train # 클래스 비율 유지
)
4단계: XGBoost 모델 학습
# 학습 시간 측정
start_time = time.time()
# 학습
xgb_model.fit(
X_train_split, y_train_split,
eval_set=[(X_val_split, y_val_split)], # 검증 세트 지정
)
end_time = time.time()
training_time = end_time - start_time
5단계: XGBoost 기본 성능 평가
xgb_train_pred = xgb_model.predict(X_train)
xgb_test_pred = xgb_model.predict(X_test)
# 정확도 계산
xgb_train_acc = accuracy_score(y_train, xgb_train_pred)
xgb_test_acc = accuracy_score(y_test, xgb_test_pred)
xgb_overfit = xgb_train_acc - xgb_test_acc
6단계: 특성 중요도 평가
feature_importance = pd.DataFrame({
'feature': X.columns,
'importance': xgb_model.feature_importances_
}).sort_values('importance', ascending=False)
✏️ 오늘의 핵심
오늘은 머신러닝의 핵심 알고리즘(랜덤 포레스트·XGBoost)과 딥러닝의 기본 원리, 그리고 모델 성능 향상을 위한 하이퍼파라미터 조정과 평가 기법(ROC 커브)를 배웠습니다.
📌추가로 해야할 점
프로젝트, 졸업 시험
'품질관리(QAQC) 데이터 부트캠프(본캠프)' 카테고리의 다른 글
| 본캠프_8주차(금)_TIL(심화 프로젝트) (0) | 2025.11.07 |
|---|---|
| 본캠프_8주차(목)_TIL(2차 프로젝트 시작) (0) | 2025.11.06 |
| 본캠프_8주차(화)_TIL (0) | 2025.11.04 |
| 본캠프_8주차(월)_TIL (0) | 2025.11.03 |
| 본캠프_7주차(금)_TIL (0) | 2025.10.31 |