본문 바로가기
프로그래밍/Scikit-Learn

[Scikit-Learn] 15. Partial Dependence Plot, Individual Conditional Expectation Plot 그리기 with PartialDependenceDisplay

by 부자 꽁냥이 2022. 9. 2.

Scikit-Learn에서는 PartialDependenceDisplay을 이용하여 Partial Dependence Plot(PDP), Individual Conditional Expectation(ICE) Plot을 그릴 수 있다. 이번 포스팅에서는 그 방법을 알아본다.

 

Partial Dependence Plot, Individual Conditional Expectation Plot에 대한 개념은 아래 포스팅을 참고하기 바란다.

 

27. Partial Dependence Plot (부분 의존도 그림), Individual Conditional Expectation Plot (개별 조건부 평균 그림)에 대해서 알아보자 with Python

 

27. Partial Dependence Plot (부분 의존도 그림), Individual Conditional Expectation Plot (개별 조건부 평균 그림)

이번 포스팅에서는 머신러닝 예측 모형의 해석을 도와주는 시각화 방법인 Partial Dependence Plot (부분 의존도 그림), Individual Conditional Plot (개별 조건부 평균 그림)에 대해서 소개한다. 또한 파이썬

zephyrus1111.tistory.com

 


   PartialDependenceDisplay 사용법

여기서는 보스턴 집값 데이터를 사용하며 모형 클래스는 랜덤 포레스트로 정했다.

 

import pandas as pd

from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import PartialDependenceDisplay
from sklearn.datasets import load_boston

boston = load_boston() ## 보스턴 데이터
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.target
feature_names = ['AGE', 'RAD', 'LSTAT', 'B', 'INDUS', 'CHAS']

X = df[feature_names].values ## 설명 변수
y = df['MEDV'].values ## 반응 변수

## 모형 학습
model = RandomForestRegressor(max_depth=3, random_state=0).fit(X, y)

 

PartialDependenceDisplay은 from_estimator를 이용하여 PDP, ICE Plot을 그릴 수 있다. from_estimator는 기본적으로 학습된 모델, 의존도 계산 시 필요한 데이터, 관심 변수 인덱스 등을 인자로 받는다. 또한 kind 인자가 'average'인 경우 PDP, 'ice'인 경우 ICE Plot 그리고 'both'인 경우에는 PDP, ICE Plot 모두 그려준다. 

 

아래 코드를 통해 PartialDependenceDisplay 사용법을 익혀보자.

 

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()

feature_idx = 2
PartialDependenceDisplay.from_estimator(model, ## 학습 모델
                                        X, ## 의존도 계산시 필요한 데이터
                                        [feature_idx], ## 관심 변수
                                        feature_names=feature_names, ## 변수 이름
                                        kind='average', ## average = pdp, ice = ice
                                        ax=ax
                                       )

 

이번엔 kind='both'로 설정하여 PDP, ICE Plot을 그려보자. 

 

fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()
PartialDependenceDisplay.from_estimator(model, ## 학습 모델
                                        X, ## 의존도 계산시 필요한 데이터
                                        [feature_idx], ## 관심 변수
                                        feature_names=feature_names, ## 변수 이름
                                        kind='both', ## average = pdp, ice = ice
                                        ax=ax
                                       )

 

PDP, ICE Plot 모두 색상이 같으므로 구분이 되지 않는다. 구분을 해주기 위하여 ice_lines_kw, pd_line_kw를 이용하여 선 스타일을 바꿔보자.

 

fig = plt.figure(figsize=(8, 8))
fig.set_facecolor('white')
ax = fig.add_subplot()
PartialDependenceDisplay.from_estimator(model, ## 학습 모델
                                        X, ## 의존도 계산시 필요한 데이터
                                        [feature_idx], ## 관심 변수
                                        feature_names=feature_names, ## 변수 이름
                                        kind='both', ## average = pdp, ice = ice
                                        ice_lines_kw={'color':'k', 'alpha':0.5}, ## ice 선 스타일
                                        pd_line_kw={'color':'r', 'linewidth':4}, ## pdp 선 스타일
                                        ax=ax
                                       )

 


여기서 다루지 않는 인자에 대해서는 여기를 참고하기 바란다. 부디 이번 포스팅이 도움이 되었으면 좋겠다.


댓글


맨 위로