机器学习中KNN算法介绍

一、核心思想

1.定义

K - 近邻算法(K Nearest Neighbor,KNN)是一种基于实例的学习方法,通过样本的 "邻居" 来推断其类别,例如一个样本在特征空间中的 k 个最相似(距离最近)的样本中,大多数属于某一类别,则该样本也属于此类别。

根据样本间的距离衡量相似性,距离越近则越相似。

2.分类与回归流程

分类流程

1.计算未知样本与所有训练样本的距离;

2.按距离升序排列训练样本;

  1. 选取距离最近的 k 个样本;

4.对这 k 个样本的类别进行多数表决,未知样本归属到出现次数最多的类别。

回归流程

1.计算未知样本与所有训练样本的距离;

2.按距离升序排列训练样本;

3.选取距离最近的 k 个样本;

4.计算k 个样本目标值的平均值;

5.以此平均值作为未知样本的预测值。

3.K值选择

若K值过小:模型复杂,易受异常点的影响,可能会照成过拟合

若K值过大:模型简单,易受样本均值影响,可能会照成欠拟合

极端情况:当K值等于训练样本总数时,会直接选取训练集中数量最多的那个而忽视了其他信息。

二:KNN算法API介绍

1.分类API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

参数n_neighbors:指定邻居数量(默认5)

示例:通过简单数据集训练模型,预测新样本类别。

2.回归API

sklearn.neighbors.KNeighborsRegressor(n_neighbors=5)

功能:用于回归问题,预测连续值

示例:通过多特征数据集训练,预测新样本的目标值。

3.常见错误

预测输入格式错误:如predict([1])应改为predict([[1]])(需要传入二维数组)

三、距离度量

1.欧式距离

定义:空间中两点的直线距离,是最常用的距离度量方式。

二维空间:d12​=(x1​−x2​)2+(y1​−y2​)2​

n维空间:d12​=∑k=1n​(x1k​−x2k​)2​

2.曼哈顿距离

别称:城市街区距离

定义:两点在各维度上的绝对差值之和

二维空间:d12​=∣x1​−x2​∣+∣y1​−y2​∣

n维空间:d12​=∑k=1n​∣x1k​−x2k​∣

3.切比雪夫距离

定义:两点在各维度上绝对差值的最大值。

二维空间:d12​=max(∣x1​−x2​∣,∣y1​−y2​∣)

n维空间:d12​=max(∣x1k​−x2k​∣)

4.闵可夫斯基距离

定义:对多种距离的概括性表述,公式为d=(∑k=1n​∣x1k​−x2k​∣p)**1/p

当 p=1 时,为曼哈顿距离;

当p=2 时,为欧氏距离;

当 p→∞时,为切比雪夫距离。

四、特征预处理

1.必要性

当特征单位或大小差异大时,可能导致模型受某一特征支配,需通过预处理消除这种影响。

2.归一化

定义:将数据映射到 [0,1](默认)或指定区间 [mi, mx]。

公式:x` = (x-min)/(max-min) ,x`` = x`*(max - min)+min

API:sklearn.preprocessing.MinMaxScaler(feature_range=(0,1))

缺点:受异常值的影响大,鲁棒性差,适合小数据场景

3.标准化

定义:将数据转换为均值为 0、标准差为 1 的标准正态分布数据。

公式:x` = (x-mean)/σ(mean 为均值,σ 为标准差)

API:sklearn.preprocessing.StandardScaler()

优点:受异常值影响小,适合大数据场景。

4.鸢尾花案例

流程:获取数据集→划分训练集和测试集→标准化处理→训练 KNN 模型→评估准确率(如使用score函数或accuracy_score方法)→预测新样本。

五、超参数选择方法

1.交叉验证

定义:将训练集划分为 n 份,轮流用 1 份作为验证集、其余 n-1 份作为训练集,多次评估取平均值,提高模型评分的可信度。

作用:更可靠地评估模型性能,减少数据划分带来的误差。

2.网格搜索

定义:自动尝试超参数的不同组合,结合交叉验证评估,选出最优参数组合。

API:sklearn.model_selection.GridSearchCV(estimator,param_grid,cv)

cv:交叉验证的折数。

结果分析:通过best_score_(最优交叉验证得分)、best_estimator_(最优模型)等属性查看结果。

3.手写数字案例

数据:MNIST 数据集,包含 0-9 的手写数字图像(28×28 像素,784 个特征)。

流程:加载数据→归一化(像素值缩放到 [0,1])→划分数据集→网格搜索调优超参数→训练模型→评估与预测。

六、KNN模型评估

1.KNN的优缺点

优点:简单易懂,无需训练过程,可处理多分类问题。

缺点:计算复杂度高(需计算与所有样本的距离),对高维数据敏感(维度灾难)。

2.特征预处理的选择

标准化在大多数机器学习场景中更常用,因其对异常值更稳健;归一化适用于特征取值范围明确的场景。

3.超参数调优的重要性

K 值等超参数直接影响模型性能,交叉验证结合网格搜索是实用的调优手段,尤其适合小到中等规模的数据集。