本文主要是介绍【机器学习笔记】——k近邻(k-nearest neighbor,k-NN),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目 录
- 1 k-NN
- 1.1 基本思路
- 1.1.1 距离度量
- 1.1.2 k值的选择
- 1.1.3 决策
- 1.2 基于kd树的k-NN算法
- 1.2.1 构造kd树
- 1.2.2 搜索kd树(基于kd树的k-NN算法)
- 1.2.2.1 基于kd树的最近邻算法
- 1.2.2.2 基于kd树的k-NN算法
- 1.3 k-NN的优缺点
- 1.3.1 优点
- 1.3.2 缺点
- 1.1 基本思路
- 2 算法实现
- 2.1 原始形式1——自定义二维特征分类数据
- 2.2 原始形式2——自定义二维特征分类数据
- 2.3原始形式3——改进约会网站的配对效果(三维特征)
- 2.3.1 导入数据
- 2.3.2归一化处理
- 2.3.3构建k-NN分类模型
- 2.3.4预测
- 2.4 基于kd树的k-NN算法——自定义二维分类特征数据
- 2.5 sklearn学习k-NN分类
- 3 参考文献
1 k-NN
k近邻法(k-nearest neighbor,k-NN)是一种基本分类与回归算法。是一种消极学习法(直到给出新的数据才开始进行学习,否则仅存储训练集数据。而积极学习法是根据训练集数据提前训练好模型,当新的数据输入时通过模型进行预测)。
1.1 基本思路
k-NN的想法非常简单,就是根据最近的k个样本来判断新的样本的分类或值,当模型是分类时用投票原则,当模型是回归时取平均数。显然有三个影响模型效果的三个因素:怎么衡量距离、怎么确定k值、怎么进行决策(如何投票)。此外因为算法是基于距离进行的,因此为了避免某些维度的尺度较大对结果产生额外的影响,需要对数据进行标准化处理
1.1.1 距离度量
L p L_p Lp距离(又称Minkowski距离)是一组距离。设特征空间 X \mathcal{X} X 是 n n n 维向量空间 R n \mathbf{R}^n Rn , x i , x j ∈ X x_i,x_j \in \mathcal{X} xi,xj∈X , x i = ( x i ( 1 ) , x i ( 2 ) , ⋯   , x i ( n ) ) x_i = (x_i^{(1)}, x_i^{(2)}, \cdots, x_i^{(n)}) xi=(xi(1),xi(2),⋯,xi(n)) , x j = ( x j ( 1 ) , x j ( 2 ) , ⋯   , x j ( n ) ) x_j = (x_j^{(1)}, x_j^{(2)}, \cdots, x_j^{(n)}) xj=(xj(1),xj(2),⋯,xj(n)) , x i , x j x_i,x_j xi,xj 的 L p L_p Lp 距离定义为
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p , p ≥ 1 L_p(x_i,x_j) = {\left( \sum_{l = 1}^{n} |x_i^{(l)} - x_j^{(l)} |^p \right)}^{\frac{1}{p}} \quad , p \ge 1 Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)p1,p≥1
特别地,当 p = 2 p = 2 p=2 时,称为欧氏距离,这也是我们比较常用的距离(当特征维度增加时,欧氏距离的结果会变差):
L 2 ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 ) 1 2 L_2(x_i,x_j) = {\left( \sum_{l = 1}^{n} |x_i^{(l)} - x_j^{(l)} |^2 \right)}^{\frac{1}{2}} L2(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣2)21
当 p = 1 p = 1 p=1 时,称为曼哈顿距离:
L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ L_1(x_i,x_j) = \sum_{l = 1}^{n} |x_i^{(l)} - x_j^{(l)} | L1(xi,xj)=l=1∑n∣xi(l)−xj(l)∣
当 p = ∞ p = \infty p=∞ 时,称为切比雪夫距离:
L ∞ ( x i , x j ) = lim p → ∞ ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p = max l ∣ x i ( l ) − x j ( l ) ∣ L_{\infty}(x_i,x_j) = \lim_{p \to \infty}{\left( \sum_{l = 1}^{n} |x_i^{(l)} - x_j^{(l)} |^p \right)}^{\frac{1}{p}} = \max_l |x_i^{(l)} - x_j^{(l)} | L∞(xi,xj)=p→∞lim(l=1∑n∣xi(l)−xj(l)∣p)p1=lmax∣xi(l)−xj(l)∣
1.1.2 k值的选择
当 k k k 比较小时,学习的训练误差比较小,只有与输入实例较近的训练样本才会起作用,但是测试误差会比较大,模型的鲁棒性较差。一旦邻近的实例点恰巧是噪声,那么预测就会出错。也即是说模型会比较复杂,容易发生过拟合。特别地当
这篇关于【机器学习笔记】——k近邻(k-nearest neighbor,k-NN)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!