任务描述 本关任务:学会如何使用sklearn构建KNN模型。 相关知识 为了完成本关任务,你需要掌握:1.KNN算法的原理,2.KNN算法的使用。 KNN算法的原理 KNN算法的原理其实就是:新数据点离谁最近,就和谁属于同一类。 图1 如图1所示,平面上有三大类分别为:w1、w2、w3,还有一个新数据点Xu,新数据点Xu最近的一个点为w1类的点(也就是红色的点),理所应当地,Xu属于w1类。看起来,KNN算法真是够简单的,这么轻松就完成了分类工作。但是,刚才只是一个最简单的例子,选最近邻数等于一。我们如果在训练模型时让最近邻数等于1的话,可能会导致模型达不到指定的效果,为什么呢?试想一下,万一和新数据点最近的数据恰好是一个测量错误的点呢?如图2所示。 图2 当我们最近邻数为1时,中间的问号数据点(新数据点)属于红色类,而当最近邻数设为5时,也就是找出离新数据点最近的5个点,我们可以看到离新数据点最近的蓝色有3个点,红色是2个点,那么KNN算法就会把新数据点划分到蓝色类。 以上就是KNN算法的基本原理,实际上K这个字母的含义就是近邻个数。在scikit-learn中,KNN算法的K值是通过n_neighbors参数来调试的,默认值是5,我们可以通过设置K值来提高我们模型的准确率。 KNN算法的使用 KNN算法在python中的代码如下: from sklearn.datasets import make_blobs # 数据集生成器 from sklearn.neighbors import KNeighborsClassifier # KNN分类器 import matplotlib.pyplot as plt # 画图工具 from sklearn.model_selection import train_test_split # 数据集拆分工具 import numpy as np # 生成数据,并自动分类 # (比如某一类别设定为红色,则会把所有红色类别的都集中在一起) # centers 分类数(centers=2生成两个类别,分成是 0 和 1 类) data = ma
时间: 2025-06-25 09:07:44 浏览: 13
### 如何使用 `sklearn` 的 `KNeighborsClassifier` 构建和训练 KNN 模型
在机器学习领域,K近邻算法(K-Nearest Neighbors, KNN)是一种简单有效的分类方法。通过 `scikit-learn` 提供的 `KNeighborsClassifier` 类,可以轻松实现该模型的构建、训练和预测。
以下是具体的操作过程:
#### 1. 导入必要的库
为了使用 `KNeighborsClassifier`,需要先导入相关的 Python 库。通常会用到 `numpy` 和 `pandas` 处理数据,以及 `train_test_split` 划分训练集和测试集。
```python
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
```
#### 2. 加载并准备数据
这里以经典的鸢尾花数据集为例来演示如何加载数据,并将其划分为训练集和测试集。
```python
# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# 数据划分
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
```
#### 3. 创建 KNN 模型实例
调用 `KNeighborsClassifier()` 方法创建一个 KNN 模型对象。可以通过设置参数调整模型行为,比如指定邻居数 `n_neighbors` 或距离度量方式 `metric`。
```python
knn = KNeighborsClassifier(n_neighbors=3) # 设置 k 值为 3
```
#### 4. 训练模型
利用 `.fit()` 方法将训练数据传递给模型完成训练。此时,模型已经记住了整个训练集[^2]。
```python
knn.fit(x_train, y_train) # 使用训练数据拟合模型
```
#### 5. 预测新样本
经过训练后的 KNN 模型可以直接用于预测未知数据类别。通过 `.predict()` 方法获取预测结果并与真实标签对比验证效果。
```python
predictions = knn.predict(x_test) # 对测试集进行预测
print(predictions) # 输出预测值
print(y_test) # 打印真实的标签
```
以上就是完整的流程展示,涵盖了从数据预处理到最终评估的所有环节。
---
### 关于 KNN 工作机制的理解
值得注意的是,KNN 属于一种懒惰学习算法,在训练阶段仅存储输入特征及其对应的输出标记而不执行任何计算操作;当接收到新的查询请求时才依据已知样本来决定其归属类别[^3]。
```python
def example_knn():
"""
A simple function demonstrating the use of KNeighborsClassifier.
"""
from sklearn.metrics import accuracy_score
iris_data = load_iris()
X, Y = iris_data['data'], iris_data['target']
# Split dataset into training set and testing set with a ratio of 7:3
X_trn, X_tst, Y_trn, Y_tst = train_test_split(X, Y, stratify=Y, shuffle=True, test_size=.3)
classifier = KNeighborsClassifier(n_neighbors=5).fit(X_trn, Y_trn)
predicted_labels = classifier.predict(X_tst)
accu = accuracy_score(Y_tst, predicted_labels)*100
print(f'Accuracy on Test Set is {accu:.2f}%')
example_knn()
```
此代码片段进一步展示了如何衡量模型性能指标之一 —— 准确率 (accuracy)[^1]。
---
阅读全文
相关推荐



















