最近质心分类

Beginner

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

简介

本实验将指导你使用 Scikit-learn 实现最近质心分类。最近质心分类是一种简单的分类方法,其工作原理是计算每个类别的质心,然后根据新数据点最接近哪个质心来对其进行分类。

虚拟机使用提示

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

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

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

导入所需库

首先,我们需要导入必要的库,其中包括 Numpy、Matplotlib、Scikit-learn 数据集、最近质心分类器(NearestCentroid)和决策边界显示工具(DecisionBoundaryDisplay)。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import datasets
from sklearn.neighbors import NearestCentroid
from sklearn.inspection import DecisionBoundaryDisplay

加载数据

接下来,我们从 Scikit-learn 中加载鸢尾花数据集,并仅选择前两个特征用于可视化。

iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target

创建颜色映射

我们使用 Matplotlib 的 ListedColormap 函数创建两个颜色映射用于可视化。

cmap_light = ListedColormap(["orange", "cyan", "cornflowerblue"])
cmap_bold = ListedColormap(["darkorange", "c", "darkblue"])

创建并拟合分类器

我们创建一个收缩阈值为 0.2 的最近质心分类器实例,并对数据进行拟合。

clf = NearestCentroid(shrink_threshold=0.2)
clf.fit(X, y)

预测并评估准确率

我们对输入数据预测类别标签,并评估分类器的准确率。

y_pred = clf.predict(X)
print("Accuracy: ", np.mean(y == y_pred))

可视化决策边界

我们使用 Scikit-learn 中的 DecisionBoundaryDisplay 函数来可视化分类器的决策边界。

_, ax = plt.subplots()
DecisionBoundaryDisplay.from_estimator(
    clf, X, cmap=cmap_light, ax=ax, response_method="predict"
)

绘制数据点

我们使用 Matplotlib 的 scatter 函数来绘制输入数据点。

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold, edgecolor="k", s=20)

添加标题和轴标签

我们使用 Matplotlib 的 title、xlabel 和 ylabel 函数为图表添加标题和轴标签。

plt.title("Nearest Centroid Classification")
plt.xlabel("Sepal length")
plt.ylabel("Sepal width")

显示图表

我们使用 Matplotlib 的 show 函数来显示图表。

plt.show()

总结

在本实验中,我们学习了如何使用 Scikit-learn 实现最近质心分类。我们加载了鸢尾花数据集,创建了一个分类器,预测了类别标签,测量了准确率,并可视化了决策边界和输入数据点。