병렬 트리 숲을 이용한 픽셀 중요도 분석

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 scikit-learn 라이브러리를 사용하여 Olivetti 얼굴 데이터셋에 랜덤 포레스트를 학습하고 불순도 기반의 특징 중요도를 평가합니다. 특징 중요도를 사용하여 픽셀 중요도의 히트맵을 생성합니다. 또한 여러 작업에서 예측의 생성 및 계산을 병렬화합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

데이터 로드 및 모델 적합

Olivetti 얼굴 데이터셋을 로드하고 데이터셋을 첫 5 개 클래스만 포함하도록 제한합니다. 그런 다음 데이터셋에 랜덤 포레스트를 학습하고 불순도 기반의 특징 중요도를 평가합니다. 작업에 사용할 코어 수를 설정합니다.

from sklearn.datasets import fetch_olivetti_faces

## 병렬적으로 포레스트 모델을 적합하는 데 사용할 코어 수를 선택합니다.
## `-1` 은 사용 가능한 모든 코어를 사용함을 의미합니다.
n_jobs = -1

## 얼굴 데이터셋을 로드합니다.
data = fetch_olivetti_faces()
X, y = data.data, data.target

## 데이터셋을 5 개 클래스로 제한합니다.
mask = y < 5
X = X[mask]
y = y[mask]

## 특징 중요도를 계산하기 위해 랜덤 포레스트 분류기를 적합합니다.
from sklearn.ensemble import RandomForestClassifier

forest = RandomForestClassifier(n_estimators=750, n_jobs=n_jobs, random_state=42)

forest.fit(X, y)

특징 중요도 평가

불순도 감소량 (MDI) 을 기반으로 특징 중요도를 평가합니다. 특징 중요도는 맞춰진 속성 feature_importances_에 의해 제공되며, 각 트리 내 불순도 감소량의 누적 평균과 표준 편차로 계산됩니다.

import time
import matplotlib.pyplot as plt

start_time = time.time()
img_shape = data.images[0].shape
importances = forest.feature_importances_
elapsed_time = time.time() - start_time

print(f"Elapsed time to compute the importances: {elapsed_time:.3f} seconds")
imp_reshaped = importances.reshape(img_shape)
plt.matshow(imp_reshaped, cmap=plt.cm.hot)
plt.title("불순도 값을 사용한 픽셀 중요도")
plt.colorbar()
plt.show()

히트맵 해석

히트맵은 픽셀의 중요도를 보여줍니다. 픽셀의 색이 더 밝을수록 더 중요한 픽셀입니다. Olivetti 얼굴 데이터셋의 분류에 기여하는 중요한 픽셀을 관찰할 수 있습니다.

요약

이 실험에서 우리는 Olivetti 얼굴 데이터셋에 랜덤 포레스트를 학습하고 불순도 기반 특징 중요도를 평가하는 방법을 배웠습니다. 픽셀 중요도의 히트맵을 생성하고 Olivetti 얼굴 데이터셋의 분류에 기여하는 중요한 픽셀을 관찰했습니다.