机器学习中KNN算法介绍
一、核心思想
1.定义
K - 近邻算法(K Nearest Neighbor,KNN)是一种基于实例的学习方法,通过样本的 “邻居” 来推断其类别,例如一个样本在特征空间中的 k 个最相似(距离最近)的样本中,大多数属于某一类别,则该样本也属于此类别。
根据样本间的距离衡量相似性,距离越近则越相似。
2.分类与回归流程
分类流程
1.计算未知样本与所有训练样本的距离;
2.按距离升序排列训练样本;
3. 选取距离最近的 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 值等超参数直接影响模型性能,交叉验证结合网格搜索是实用的调优手段,尤其适合小到中等规模的数据集。