KNN(k近邻算法)
这份文档围绕机器学习中的 K 近邻算法(KNN) 展开,以电影分类为核心案例引入,结合理论讲解、距离度量方法和鸢尾花分类实践,系统介绍了 KNN 算法的原理与应用
一。K 近邻算法(KNN)核心理论
算法定义
KNN(k-Nearest Neighbor,K 近邻算法)的核心逻辑是:每个样本可由其最接近的 K 个 “邻居”(相似样本)来代表,未知样本的类别由这 K 个邻居中出现频率最高的类别决定。
核心步骤
输入无标签的新数据,将其每个特征(如电影的 “打斗 / 接吻镜头数”)与样本集中的数据特征逐一对比;
计算新数据与所有已知样本的距离,按距离从小到大排序;
选取距离最小的K 个样本(K 常不大于 20);
统计这 K 个样本中各分类的出现频率;将频率最高的分类作为新数据的预测类别。
K 值的影响(关键示例)
文档通过可视化案例展示了 K 值对分类结果的影响:
当K=3时,未知样本(图中 “X”)的 3 个最近邻居中 “蓝三角” 占比更高,故判定为 “蓝三角” 类;
当K=5时,未知样本的 5 个最近邻居中 “红圆” 占比更高,故判定为 “红圆” 类。 这说明 K 值的选择会直接影响分类结果,需根据场景合理设定。
二、距离度量:KNN 的 “相似性标准”
判断样本是否为 “邻居”,需通过距离度量量化样本间的相似度,文档重点介绍两种常用方法:
欧式距离(最常用)
欧式距离即 “多维空间中两点的绝对距离”,适用于连续型特征:
二维空间(如电影的 “打斗 / 接吻镜头”):距离公式为 \(d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\)(文档中公式表述略有笔误,核心是 “坐标差平方和的平方根”);、
三维空间:需加入 z 轴坐标差的平方项;n 维空间(如多特征数据):公式扩展为 \(d=\sqrt{\sum_{i=1}^n (x_{1i}-x_{2i})^2}\),即所有特征维度坐标差平方和的平方根。
曼哈顿距离
由闵可夫斯基提出,又称 “出租车距离”,指 “两点在坐标系上的绝对轴距总和”:
平面上两点\((x_1,y_1)\)与\((x_2,y_2)\)的曼哈顿距离为 \(d=|x_1-x_2|+|y_1-y_2|\),更适用于特征值为整数或离散型的场景。
三、实践练习:KNN 的实际应用
鸢尾花分类(基于 sklearn 工具)
文档以经典的 “鸢尾花分类” 为例,展示了 KNN 算法的代码实现流程:
数据加载:加载 sklearn 内置的鸢尾花数据集(iris=datasets.load_iris()
),数据集包含 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和 3 个类别(山鸢尾、变色鸢尾、维吉尼亚鸢尾);
数据划分:用train_test_split
将数据按 7:3 划分为训练集(x_train,y_train
)和测试集(x_test,y_test
);
模型训练:创建 KNN 实例(设 K=5,距离度量为欧式距离),通过fit(x_train,y_train)
训练模型;
模型评估与预测:用score
计算训练集 / 测试集准确率,用predict(x_test)
预测测试集样本类别。
总结
文档以 “案例引入→理论讲解→实践落地” 的逻辑,清晰阐释了 KNN 算法的核心(“找邻居定类别”)、关键参数(K 值)、距离度量方法,并用鸢尾花分类、电影分类两个实例,让算法从理论走向应用,突出了 KNN“简单直观、无需训练过程(lazy learner)” 的特点,适合作为机器学习入门的基础教学内容。