【机器学习】K近邻#1基于Scikit-Learn的K近邻分类

主要参考学习资料:

《机器学习算法的数学解析与Python实现》莫凡 著

《机器学习实战 基于Scikit-Learn、Keras和TensorFlow》Aurélien Géron 著

前置知识:线性代数-Python

数学模型

参数模型与非参数模型

机器学习算法可以分为参数模型非参数模型。参数模型从数据集估计参数来学习,对新数据点的预测不再需要原始训练数据集。非参数模型不能用一组固定的参数来描述,参数的个数随着训练数据的增加而增长。

K近邻 (KNN)分类器与其他学习算法有本质的不同,属于惰性学习 算法,不是从训练数据中学习判别函数,而是靠记忆训练过的数据集来完成任务,是基于实例的学习,属于非参数模型。

距离度量

K近邻算法本身不涉及数学知识,但查找最近邻的过程用到了距离的数学度量方法。

闵可夫斯基距离对一类距离度量进行了统一定义,其数学表达式如下:

d P ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ P ) 1 / P d_P(x,y)=\displaystyle(\sum^n_{i=1}|x_i-y_i|^P)^{1/P} dP(x,y)=(i=1∑n∣xi−yi∣P)1/P

其中 x x x和 y y y代表两个点, n n n代表维数,下标 i i i代表点的第 i i i维坐标。

通过给 P P P设置不同的值可以得到不同的距离表达式。

当 P = 1 P=1 P=1时,得到曼哈顿距离

d ( x , y ) = ∑ k = 1 n ∣ x k − y k ∣ d(x,y)=\displaystyle\sum^n_{k=1}|x_k-y_k| d(x,y)=k=1∑n∣xk−yk∣

在二维空间下,曼哈顿距离的意义是从一点只沿横轴和纵轴方向行驶到另一点的轨迹长度。

当 P = 2 P=2 P=2时,得到欧几里得距离

d 2 ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d_2(x,y)=\displaystyle\sqrt{\sum^n_{i=1}(x_i-y_i)^2} d2(x,y)=i=1∑n(xi−yi)2

其意义为两点之间的直线距离。

K近邻算法

①选择个数K和一个距离度量。

②以待分类样本点为中心,分别测量它到其他点的距离,找出其中距离最近的K个,即K个最近邻。

③统计出每种类别在最近邻中的占比,选取占比最多的类别作为待分类样本的类别。

代码实现

KNN算法可视化代码与Logistic回归类似:

python 复制代码
from sklearn.datasets import load_iris  
#导入KNeighborsClassifier类
from sklearn.neighbors import KNeighborsClassifier  
import numpy as np  
import matplotlib.pyplot as plt  
iris = load_iris()  
X = iris.data[:, :2]
y = iris.target  
#训练KNN模型
clf = KNeighborsClassifier().fit(X, y)  
#可视化
def plot_decision_boundary(X, y, model):  
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1  
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1  
    xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))  
    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])  
    Z = Z.reshape(xx.shape)  
    plt.contourf(xx, yy, Z, alpha=0.8, cmap=plt.cm.coolwarm)  
    plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', cmap=plt.cm.coolwarm)  
    plt.xlabel('Feature 1')  
    plt.ylabel('Feature 2')  
    plt.title('KNN Decision Boundary')  
    plt.show()  
plot_decision_boundary(X, y, clf)

可视化结果:

特点

优点:理论形式简单,容易实现,新加入数据时不必对整个数据集进行重新训练,可以实现在线训练。

缺点:对样本分布比较敏感,正负样本不平衡时会对预测有明显影响,数据集规模大时计算量将加大。

应用领域:模式识别、文本分类、多分类领域。

相关推荐
小仙女的小稀罕16 小时前
适合企业行政开部门会议用的,会议同步行动项整理方法
大数据·人工智能
刀法如飞16 小时前
Palantir技术原理深度分析:Ontology 存储结构与读写方式
人工智能·算法·架构
想你依然心痛16 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“数字孪生工坊“——工业制造AI智能体协同平台
人工智能·制造·harmonyos
逸风尊者16 小时前
Robotaxi 行业日报 | 2026-05-18
人工智能
Lan_Se_Tian_Ma16 小时前
使用Cursor封装Flutter项目基建框架
前端·人工智能·flutter
白日做梦Q16 小时前
Miniconda 新手保姆级教程:从安装到熟练使用(全程无跳步,避坑指南附全)
人工智能·深度学习·算法·机器学习
碳基硅坊16 小时前
投标标书制作的新思路:OpenClaw能帮什么
人工智能·openclaw·智能投标
1892280486116 小时前
NV266固态MT29F32T08GSLBHL8-36QMES:B
大数据·服务器·人工智能·科技·缓存
吃好睡好便好16 小时前
在Matlab中绘制变半径柱面图
开发语言·人工智能·学习·算法·matlab
愚公搬代码16 小时前
【愚公系列】《AI漫剧创作一本通》026-Al 漫剧视频生成(首尾帧控制与镜头稳定性)
人工智能·音视频