K近邻算法(KNN)学习笔记

一、KNN算法基础

1. 核心定义

K近邻算法(KNN,k-Nearest Neighbor):每个样本可由其最接近的K个邻近值代表,属于监督学习中的分类算法,核心逻辑是"近朱者赤,近墨者黑"。

2. 算法流程
  1. 输入无标签新数据,将新数据的每个特征与样本集中数据的对应特征进行比较。

  2. 提取样本集中特征最相似(最近邻)的数据的分类标签。

  3. 选择样本集中k个最相似的数据(k通常不大于20)。

  4. 统计k个数据中出现次数最多的分类,作为新数据的分类结果。

3. K值影响示例

当k=3时:根据新数据周围3个最近邻的类别(蓝三角占比更高),判定新数据为"蓝三角"类。

当k=5时:根据新数据周围5个最近邻的类别(红圆占比更高),判定新数据为"红圆"类。

结论:k值不同可能导致分类结果不同,需根据数据特点合理选择k值。

二、距离度量方法

距离度量是KNN算法中判断"相似度"的核心依据,常用两种方法:

1. 欧式距离(欧几里得距离)

定义:最常见的距离度量,衡量多维空间中两个点的绝对距离,对应二维/三维空间中两点间的直线距离。

公式:

二维空间:d=\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}

三维空间:d=\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2 + (z_1 - z_2)^2}

n维空间:d=\sqrt{\sum_{i=1}^{n}(x_{1i} - x_{2i})^2}(x_{1i}、x_{2i}分别为两个点在第i维的特征值)

2. 曼哈顿距离

定义:由赫尔曼·闵可夫斯基提出,衡量两个点在标准坐标系上的绝对轴距总和,又称"出租车几何"。

平面空间公式:对于坐标(x_1,y_1)的点i和坐标(x_2,y_2)的点j,距离d(i,j)=|x_1 - x_2| + |y_1 - y_2|。

三、KNN算法实操案例

案例1:鸢尾花分类(基于sklearn实现)

1. 数据准备

数据集:sklearn内置iris数据集,包含3类鸢尾花(Iris Versicolor、Iris Setosa、Iris Virginica)。

特征:4个数值型特征,分别是花萼长度(sepal length, cm)、花萼宽度(sepal width, cm)、花瓣长度(petal length, cm)、花瓣宽度(petal width, cm)。

标签:iris.target(对应3类鸢尾花的编号);类别名称:iris.target_names。

2. 代码步骤
  1. 加载数据集:iris = datasets.load_iris()

  2. 划分训练集与测试集:x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3)(测试集占比30%)

  3. 创建并训练模型:

knn = KNeighborsClassifier(n_neighbors=5, metric="euclidean") # k=5,使用欧式距离

knn_train = knn.fit(x_train, y_train) # 训练模型

  1. 模型评估与预测:

训练集得分:train_score = knn.score(x_train, y_train)

测试集得分:test_score = knn.score(x_test, y_test)

预测测试集标签:y_pred = knn.predict(x_test)

案例2:未知电影类型分类
  1. 已知样本数据(电影特征与类型)

电影类型 电影名称 打斗镜头数 接吻镜头数

爱情片 California Man 3 104

爱情片 He's Not Really into Dudes 2 100

爱情片 Beautiful Woman 1 81

动作片 Kevin Longblade 101 10

动作片 Robo Slayer 3000 99 5

动作片 Amped II 98 2

  1. 待分类数据

未知电影:打斗镜头18次,接吻镜头90次。

  1. 分类思路

  2. 选择距离度量(如欧式距离/曼哈顿距离),计算未知电影与所有已知电影的距离。

  3. 按距离递增排序,选取k个(如k=3或k=5)最近邻的已知电影。

  4. 统计k个电影中"爱情片""动作片"的出现频率,频率高的类型即为未知电影的分类。

四、补充说明

  1. KNN算法无需提前训练模型("惰性学习"),直接通过样本数据的相似度判断新数据类别。

  2. k值选择是关键:k过小易受异常值影响,k过大易忽略局部特征,通常需通过实验调整(如k=3、5、7等)。

  3. 特征缩放:若特征量纲差异大(如"镜头数"与"评分"),需先对特征归一化/标准化,避免某一特征对距离计算的影响过大。