Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

XGBoost XGBClassifier의 feature_importances_를 맷플롯립(matplotlib)으로 시각화하는 방법

xgboost.plot_importance에서 플롯 크기를 조절하고 특성 중요도(feature importance)를 시각화하려면 다음 단계를 따르면 됩니다.

주요 단계

  • 그림(figure) 크기를 설정하고 서브플롯 간의 여백을 조정합니다.
  • CSV 파일에서 데이터를 불러옵니다.
  • 불러온 데이터셋에서 x(입력 변수)와 y(타깃 변수) 데이터를 분리합니다.
  • XGBClassifier 모델 인스턴스를 생성합니다.
  • x와 y 데이터를 모델에 학습(fit)시킵니다.
  • 모델의 feature_importances_ 속성을 출력합니다.
  • 막대 그래프(bar plot)로 중요도를 시각화합니다.
  • show() 메서드를 사용해 그림을 화면에 표시합니다.

예제 코드

from numpy import loadtxt
from xgboost import XGBClassifier
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# data.csv는 다음과 같은 형식의 데이터를 포함 -> 13, 145, 82, 19, 110, 22.2, 0.245, 57, 0
dataset = loadtxt('data.csv', delimiter=",")
X = dataset[:, 0:8]
y = dataset[:, 8]

model = XGBClassifier()
model.fit(X, y)

print(model.feature_importances_)

plt.bar(range(len(model.feature_importances_)), model.feature_importances_)

plt.show()

실행 결과

[13:46:53] WARNING: ../src/learner.cc:1095: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.
[0.10621197 0.2424023 0.08803366 0.07818192 0.10381887 0.1486732
0.10059207 0.13208601]

위 코드를 실행하면 각 특성(feature)별 중요도 값이 배열 형태로 출력되고, 이를 막대 그래프로 한눈에 확인할 수 있습니다. 출력 결과에서 볼 수 있듯이 두 번째 특성이 약 0.24로 가장 높은 중요도를 가지며, 세 번째 특성은 약 0.088로 상대적으로 낮은 기여도를 보입니다.

참고로 XGBoost 1.3.0 버전부터 'binary:logistic' 목적 함수의 기본 평가 지표가 'error'에서 'logloss'로 변경되었다는 경고 메시지가 표시될 수 있습니다. 이전 동작을 유지하고 싶다면 eval_metric 파라미터를 명시적으로 설정하면 됩니다.

또한 plt.rcParams["figure.figsize"] 값을 조정하면 플롯의 가로·세로 크기를 자유롭게 변경할 수 있어, 특성 개수가 많은 데이터셋에서도 가독성 좋은 그래프를 만들 수 있습니다.