AI人工智能 K-近邻分类器

2026-02-12 15:07 更新

K-近邻(KNN)分类器是一种使用最近邻算法对给定数据点进行分类的分类模型。我们在上一节中已经实现了 KNN 算法,现在我们将使用该算法构建一个 KNN 分类器。

KNN 分类器的概念

K-近邻分类的基本概念是找到预定数量的训练样本(即 'k' 个)——这些样本在距离上与待分类的新样本最接近。新样本的标签将从这些邻居本身获得。KNN 分类器有一个固定的用户定义常数,用于确定邻居的数量。对于距离计算,最常用的选择是标准欧几里得距离。KNN 分类器直接作用于已学习的样本,而不是创建学习规则。KNN 算法是所有机器学习算法中最简单的之一。它在大量分类和回归问题中非常成功,例如字符识别或图像分析。

示例

我们正在构建一个 KNN 分类器来识别数字。为此,我们将使用 MNIST 数据集。我们将在 Jupyter Notebook 中编写此代码。

导入必要的包,如下所示。

这里我们从 sklearn.neighbors 包中使用 KNeighborsClassifier 模块:

from sklearn.datasets import *
import pandas as pd
%matplotlib inline
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
import numpy as np

以下代码将显示数字图像,以验证我们要测试的图像:

def Image_display(i):
   plt.imshow(digit['images'][i], cmap = 'Greys_r')
   plt.show()

现在,我们需要加载 MNIST 数据集。实际上总共有 1797 张图像,但我们使用前 1600 张图像作为训练样本,剩余的 197 张用于测试目的。

digit = load_digits()
digit_d = pd.DataFrame(digit['data'][0:1600])

现在,显示图像时,我们可以看到如下输出:

Image_display(0)

Image_display(0)

数字 0 的图像显示如下:

Image_display(9)

数字 9 的图像显示如下:

digit.keys()

现在,我们需要创建训练和测试数据集,并将测试数据集提供给 KNN 分类器。

train_x = digit['data'][:1600]
train_y = digit['target'][:1600]
KNN = KNeighborsClassifier(20)
KNN.fit(train_x, train_y)

以下输出将创建 K 近邻分类器构造函数:

KNeighborsClassifier(algorithm = 'auto', leaf_size = 30, metric = 'minkowski',
   metric_params = None, n_jobs = 1, n_neighbors = 20, p = 2,
   weights = 'uniform')

我们需要通过提供任意大于 1600 的数字来创建测试样本,这些是训练样本。

test = np.array(digit['data'][1725])
test1 = test.reshape(1, -1)
Image_display(1725)

Image_display(6)

数字 6 的图像显示如下:

现在我们将预测测试数据,如下所示:

KNN.predict(test1)

上述代码将生成以下输出:

array([6])

现在,考虑以下内容:

digit['target_names']

上述代码将生成以下输出:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

以上内容完整翻译了 TutorialsPoint 教程中 K-Nearest Neighbors Classifier 部分的核心内容,包括 KNN 分类器的概念、原理以及使用 Python 和 scikit-learn 实现手写数字识别的完整示例代码。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号