반응형
강의 목표
- 모델 해석의 중요성 및 필요성 이해
- Explainable AI (XAI) 기법 학습
- PyTorch 모델을 해석하기 위한 다양한 도구와 기법 적용
강의 내용
1. 모델 해석의 중요성
- 모델 해석이란?
- 모델이 예측을 어떻게 수행했는지 이해하는 과정
- 블랙박스 모델의 투명성 향상
- 모델 해석의 필요성
- 신뢰성 및 투명성 증대
- 규제 준수
- 모델 성능 향상에 도움
2. Explainable AI (XAI) 개념
- XAI란?
- AI 시스템의 예측 결과를 이해하고 설명할 수 있도록 하는 기법
- 다양한 이해관계자 (개발자, 사용자, 규제 기관 등)에게 모델의 작동 원리를 설명
- XAI 주요 기법
- Feature Importance
- Partial Dependence Plot (PDP)
- SHAP (SHapley Additive exPlanations)
- LIME (Local Interpretable Model-agnostic Explanations)
3. Feature Importance
- Feature Importance 개념
- 각 특성이 모델 예측에 미치는 영향도를 측정
- PyTorch 모델에서의 Feature Importance 계산
- Scikit-learn의 RandomForestClassifier를 사용한 예시
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
# 데이터 로드
data = load_iris()
X, y = data.data, data.target
# 모델 학습
model = RandomForestClassifier()
model.fit(X, y)
# Feature Importance 계산
importances = model.feature_importances_
indices = np.argsort(importances)[::-1]
# Feature Importance 시각화
plt.figure()
plt.title("Feature importances")
plt.bar(range(X.shape[1]), importances[indices], align="center")
plt.xticks(range(X.shape[1]), data.feature_names, rotation=90)
plt.xlim([-1, X.shape[1]])
plt.show()
4. Partial Dependence Plot (PDP)
- PDP 개념
- 특정 특성의 값 변화에 따른 모델 예측의 변화 시각화
- PDP 구현
- Scikit-learn의 partial_dependence를 사용한 예시
from sklearn.inspection import plot_partial_dependence
# Partial Dependence Plot
features = [0, 1, 2, 3]
plot_partial_dependence(model, X, features, feature_names=data.feature_names, grid_resolution=10)
plt.show()
5. SHAP (SHapley Additive exPlanations)
- SHAP 개념
- 게임 이론 기반의 기법으로, 각 특성이 예측에 기여한 정도를 계산
- SHAP 라이브러리 사용
- PyTorch 모델을 위한 SHAP 값 계산
import shap
import torch
import torch.nn as nn
# 간단한 PyTorch 모델 정의
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(4, 10)
self.fc2 = nn.Linear(10, 3)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleNN()
model.eval()
# 데이터 로드 및 변환
X, y = load_iris(return_X_y=True)
X = torch.tensor(X, dtype=torch.float32)
# SHAP 값 계산
explainer = shap.DeepExplainer(model, X)
shap_values = explainer.shap_values(X)
# SHAP 값 시각화
shap.summary_plot(shap_values, X.numpy(), feature_names=data.feature_names)
6. LIME (Local Interpretable Model-agnostic Explanations)
- LIME 개념
- 개별 예측에 대한 로컬 선형 모델을 생성하여 모델 예측을 설명
- LIME 라이브러리 사용
- PyTorch 모델을 위한 LIME 설명 생성
from lime import lime_tabular
# 데이터 로드
X, y = load_iris(return_X_y=True)
# 간단한 PyTorch 모델 정의
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(4, 10)
self.fc2 = nn.Linear(10, 3)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleNN()
model.eval()
# 예측 함수 정의
def predict_proba(X):
X = torch.tensor(X, dtype=torch.float32)
with torch.no_grad():
outputs = model(X)
return nn.Softmax(dim=1)(outputs).numpy()
# LIME 설명 생성
explainer = lime_tabular.LimeTabularExplainer(X, feature_names=data.feature_names, class_names=data.target_names, discretize_continuous=True)
i = 0 # 첫 번째 샘플 선택
exp = explainer.explain_instance(X[i], predict_proba, num_features=4)
exp.show_in_notebook(show_all=False)
7. 프로젝트 설명 및 진행
- 프로젝트 개요
- 모델 해석 및 XAI 기법을 활용한 실전 프로젝트 수행
- 모델의 예측 결과를 설명하고 해석
- 데이터셋 선택
- Kaggle 또는 기타 오픈 데이터셋에서 프로젝트 데이터셋 선택
- 예시: 타이타닉 생존 예측, 손글씨 숫자 분류 등
- 프로젝트 단계
- 데이터 전처리 및 준비
- 모델 설계 및 구현
- XAI 기법 적용
- 모델 예측 결과 해석 및 설명
8. 프로젝트 예시
- 예시 프로젝트: 타이타닉 생존 예측
- 데이터셋 로드 및 전처리
- 모델 학습 및 해석
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
import shap
# 데이터 로드
data = pd.read_csv('titanic.csv')
# 데이터 전처리
data = data.drop(['Name', 'Ticket', 'Cabin'], axis=1)
data = pd.get_dummies(data, drop_first=True)
X = data.drop('Survived', axis=1)
y = data['Survived']
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 데이터 스케일링
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# SHAP 값 계산
explainer = shap.LinearExplainer(model, X_train)
shap_values = explainer.shap_values(X_test)
# SHAP 값 시각화
shap.summary_plot(shap_values, X_test, feature_names=X.columns)
9. 프로젝트 발표 및 코드 리뷰
- 프로젝트 발표
- 각 그룹 또는 개인은 프로젝트 결과 발표
- 모델 설계, 훈련 과정, 성능 평가 결과 및 모델 해석 결과 공유
- 코드 리뷰 및 피드백
- 각 그룹의 코드를 리뷰하고 피드백 제공
- 개선할 점 및 좋은 점 공유
10. 실습 및 과제
- 실습 과제
- 학습된 모델을 해석하기 위한 XAI 기법 적용
- 모델 해석 결과 분석 및 설명
# 실습 과제 예시
import shap
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 데이터 로드 및 분할
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# SHAP 값 계산
explainer = shap.LinearExplainer(model, X_train)
shap_values = explainer.shap_values(X_test)
# SHAP 값 시각화
shap.summary_plot(shap_values, X_test, feature_names=load_iris().feature_names)
- 과제 제출
- Jupyter Notebook 파일 및 프로젝트 코드 제출
- 제출 기한: 다음 강의 시작 전까지
반응형
'AI Framework > PyTorch' 카테고리의 다른 글
[PyTorch] 14주차: 모델 배포 및 운영 (0) | 2024.05.30 |
---|---|
[PyTorch] 13주차: 모델의 성능 평가 및 개선 (0) | 2024.05.30 |
[PyTorch] 11주차: 모델의 성능 향상 기법 (0) | 2024.05.30 |
[PyTorch] 10주차: 모델 배포 및 최종 프로젝트 발표 (0) | 2024.05.30 |
[PyTorch] 9주차: 모델 최적화 및 고급 주제 (0) | 2024.05.30 |