Важность пикселей с параллельным лесом деревьев

Machine LearningMachine LearningBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии мы будем использовать библиотеку scikit-learn для обучения случайного леса на наборе данных Olivetti Faces и оценивать важность признаков на основе нечистоты. Мы будем использовать важность признаков для создания тепловой карты важности пикселей. Также мы будем параллелизировать построение и вычисление предсказаний в нескольких задачах.

Советы по использованию ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук, чтобы получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Загрузка данных и подгонка модели

Начнем с загрузки набора данных Olivetti Faces и ограничения набора данных так, чтобы он содержал только первые пять классов. Затем обучим случайный лес на наборе данных и оценим важность признаков на основе нечистоты. Зададим количество ядер, которые будут использоваться для задач.

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("Pixel importances using impurity values")
plt.colorbar()
plt.show()

Интерпретация тепловой карты

Тепловая карта показывает важность пикселей. Чем "горячее" пиксель, тем важнее он. Мы можем наблюдать важные пиксели, которые вносят вклад в классификацию набора данных Olivetti Faces.

Резюме

В этом лабораторном занятии мы научились обучать случайный лес на наборе данных Olivetti Faces и оценивать важность признаков на основе нечистоты. Мы создали тепловую карту важности пикселей и обнаружили важные пиксели, которые вносят вклад в классификацию набора данных Olivetti Faces.