欢迎访问宙启技术站
智能推送

使用sklearn.neighbors构建KNN分类器

发布时间:2024-01-01 21:47:33

K最近邻算法(K Nearest Neighbors,KNN)是一种基本的分类和回归算法。它的主要思想是,如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的邻居中的大多数属于某一个类别,则该样本也属于这个类别。在本文中,将介绍如何使用scikit-learn库中的KNN分类器(sklearn.neighbors)来进行分类任务,并提供一个实际的例子说明。

首先,需要安装scikit-learn库,并导入所需的模块和数据。下面的代码片段展示了如何导入所需模块和使用鸢尾花数据集进行分类任务:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 导入鸢尾花数据集
iris = load_iris()

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

在上述代码中,首先从scikit-learn库中导入load_iris函数和train_test_split函数,以及KNeighborsClassifier类。load_iris函数用于加载鸢尾花数据集,train_test_split函数用于将数据集划分为训练集和测试集。然后,使用load_iris函数加载鸢尾花数据集,并使用train_test_split函数将数据集分为训练集和测试集。

接下来,需要定义一个KNN分类器,并使用训练集对其进行训练。下面的代码片段展示了如何定义和训练KNN分类器:

# 定义KNN分类器,并设置邻居个数为3
knn = KNeighborsClassifier(n_neighbors=3)

# 对KNN分类器进行训练
knn.fit(X_train, y_train)

在上述代码中,首先使用KNeighborsClassifier类定义了一个KNN分类器,并将邻居个数设置为3。然后,使用fit函数对KNN分类器进行训练,其中X_train表示训练集的特征数据,y_train表示训练集的标签数据。

训练完成后,可以使用训练好的KNN分类器对测试集进行预测,并计算准确率。下面的代码片段展示了如何对测试集进行预测和计算准确率:

# 对测试集进行预测
y_pred = knn.predict(X_test)

# 计算准确率
accuracy = (y_pred == y_test).mean()
print("准确率:", accuracy)

在上述代码中,首先使用predict函数对测试集进行预测,其中X_test表示测试集的特征数据。然后,使用比较运算符将预测结果与测试集的标签数据进行比较,并使用mean函数计算准确率。

最后,可以根据需要调整KNN分类器的参数(如邻居个数)来提高分类器的性能。例如,可以通过交叉验证来选择最优的邻居个数。下面的代码片段展示了如何使用交叉验证选择最优的邻居个数:

from sklearn.model_selection import cross_val_score

# 定义不同邻居个数的KNN分类器
knn_1 = KNeighborsClassifier(n_neighbors=1)
knn_3 = KNeighborsClassifier(n_neighbors=3)
knn_5 = KNeighborsClassifier(n_neighbors=5)

# 使用交叉验证选择最优的邻居个数
scores_1 = cross_val_score(knn_1, iris.data, iris.target, cv=5)
scores_3 = cross_val_score(knn_3, iris.data, iris.target, cv=5)
scores_5 = cross_val_score(knn_5, iris.data, iris.target, cv=5)

# 输出不同邻居个数的准确率平均值
print("邻居个数为1时的准确率:", scores_1.mean())
print("邻居个数为3时的准确率:", scores_3.mean())
print("邻居个数为5时的准确率:", scores_5.mean())

在上述代码中,首先从scikit-learn库中导入cross_val_score函数。然后,使用KNeighborsClassifier类定义了不同邻居个数的KNN分类器,分别为1、3和5。接下来,使用cross_val_score函数对每个KNN分类器进行交叉验证,并通过mean函数计算准确率的平均值。

以上就是使用sklearn.neighbors构建KNN分类器的全部过程,通过上述代码的示例,可以对KNN算法有更深入的理解。实际运用中,可以根据具体的数据集和任务调整KNN分类器的参数,以获得更好的性能。