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) # 训练模型
4. 模型评估与预测:
训练集得分: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
2. 待分类数据
未知电影:打斗镜头18次,接吻镜头90次。
3. 分类思路
1. 选择距离度量(如欧式距离/曼哈顿距离),计算未知电影与所有已知电影的距离。
2. 按距离递增排序,选取k个(如k=3或k=5)最近邻的已知电影。
3. 统计k个电影中“爱情片”“动作片”的出现频率,频率高的类型即为未知电影的分类。
四、补充说明
1. KNN算法无需提前训练模型(“惰性学习”),直接通过样本信息的相似度判断新材料类别。
2. k值选择是关键:k过小易受异常值影响,k过大易忽略局部特征,通常需借助实验调整(如k=3、5、7等)。
3. 特征缩放:若特征量纲差异大(如“镜头数”与“评分”),需先对特征归一化/标准化,避免某一特征对距离计算的影响过大。
浙公网安备 33010602011771号