使用并行决策树森林的像素重要性

Machine LearningMachine LearningBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将使用scikit-learn库在Olivetti Faces数据集上训练一个随机森林,并评估基于杂质的特征重要性。我们将使用特征重要性来创建像素重要性的热图。我们还将在多个作业中并行化预测的构建和计算。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问Jupyter Notebook进行练习。

有时,你可能需要等待几秒钟让Jupyter Notebook完成加载。由于Jupyter Notebook的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向Labby提问。课程结束后提供反馈,我们会及时为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-49131{{"使用并行决策树森林的像素重要性"}} sklearn/datasets -.-> lab-49131{{"使用并行决策树森林的像素重要性"}} ml/sklearn -.-> lab-49131{{"使用并行决策树森林的像素重要性"}} end

加载数据与模型拟合

我们首先加载 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:.3f} 秒")
imp_reshaped = importances.reshape(img_shape)
plt.matshow(imp_reshaped, cmap=plt.cm.hot)
plt.title("使用杂质值的像素重要性")
plt.colorbar()
plt.show()

解读热图

热图展示了像素的重要性。像素越红,其重要性越高。我们可以观察到对Olivetti Faces数据集分类有贡献的重要像素。

总结

在本实验中,我们学习了如何在Olivetti Faces数据集上训练随机森林,并评估基于杂质的特征重要性。我们创建了像素重要性的热图,并观察到了对Olivetti Faces数据集分类有贡献的重要像素。