KNN算法原理图
时间: 2025-05-25 08:16:00 浏览: 19
### KNN算法的工作原理
KNN(K-Nearest Neighbor)是一种简单而有效的监督学习方法,其核心思想在于通过分析训练集中与目标样本最近的 \( k \) 个邻居来预测新数据点的类别或数值。具体而言,当给定一个新的输入样本时,它会根据这些邻居的主要类别标签来进行分类[^4]。
#### 工作流程概述
以下是KNN算法的一般工作过程:
1. **选择参数\( k \)**
首先确定要使用的邻居数量 \( k \),这通常是用户定义的一个正整数[^3]。
2. **距离度量**
计算测试样本与训练集中每一个已知样本之间的距离。常用的距离度量方式有欧氏距离、曼哈顿距离等。
3. **选取最近邻**
找出离当前测试样本最近的 \( k \) 个训练样本作为它的“近邻”。
4. **多数表决原则**
对于分类问题,统计这 \( k \) 个近邻中各个类别的频率;对于回归问题,则取它们的目标变量平均值。
5. **返回结果**
将上述步骤得到的结果分配给新的未知样本。
---
### 图表形式展示KNN算法
为了更直观理解KNN算法的过程,可以借助如下图表解释:
#### 流程图解说明
```plaintext
+-------------------+
| 输入: |
| 数据集D |-----> (1) 初始化参数k
| 新样本X_new |
+-------------------+
↓
+----------------------------------+
| 步骤(2): 距离计算 |
| 使用某种距离函数测量X_new与其他样|
| 本间的相似程度 |
+----------------------------------+
↓
+--------------------------------------+
| 步骤(3): 寻找最近的k个邻居 |
| 排序并选出前k个最小距离对应的样本 |
+--------------------------------------+
↓
+---------------------------------------+
| 步骤(4): 多数投票 |
| 如果是分类任务, 则采用众数; 若为回 |
| 归则求均值 |
+---------------------------------------+
↓
+-------------------------------+
| 输出 |
| 返回最终预测类别/数值 |
+-------------------------------+
```
此图为逻辑上的操作顺序描述了整个KNN运行机制从接收原始数据到最后得出结论的整体框架结构。
---
### Python代码实现示例
下面是一个简单的Python代码片段用于演示如何利用`scikit-learn`库执行基本的KNN分类任务:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
# 加载鸢尾花数据集
data = load_iris()
X = data.data[:, :2] # 只选用两个特征以便可视化
y = data.target
# 数据分割成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 特征标准化处理
scaler = StandardScaler().fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建KNN模型对象并拟合数据
clf = KNeighborsClassifier(n_neighbors=3).fit(X_train_scaled, y_train)
# 绘制决策边界
h = .02 # 网格步长
x_min, x_max = X_train_scaled[:, 0].min() - 1, X_train_scaled[:, 0].max() + 1
y_min, y_max = X_train_scaled[:, 1].min() - 1, X_train_scaled[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure(figsize=(8, 6))
plt.contourf(xx, yy, Z, alpha=0.8, cmap=plt.cm.Paired)
plt.scatter(X_train_scaled[:, 0], X_train_scaled[:, 1], c=y_train, edgecolor='k', s=50, label="Training Data")
plt.title('KNN Decision Boundary with Iris Dataset')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
```
以上脚本不仅实现了基础功能还提供了图形化界面帮助观察不同区域划分情况。
---
阅读全文
相关推荐


















