当前位置:   article > 正文

[学习笔记] [机器学习] 3. KNN( K-近邻算法、距离度量:曼哈顿距离,切比雪夫距离、K值选择、kd树、鸢尾花种类预测、特征工程、交叉验证、网格搜索、Facebook签到位置、数据分割)_sklearn knn 曼哈顿距离

sklearn knn 曼哈顿距离
  1. 视频链接
  2. 数据集下载地址:《3. KNN及练习案例》配套数据集

1. K-近邻算法(KNN)概念

学习目标:

  • 掌握K-近邻算法实现过程
  • 知道K-近邻算法的距离公式
  • 知道K-近邻算法的超参数 K K K值以及取值问题
  • 知道kd树实现搜索的过程
  • 应用KNeighborsClassifier实现分类
  • 知道K-近邻算法的优缺点
  • 知道交叉验证实现过程
  • 知道超参数搜索过程
  • 应用GridSearchCv实现算法参数的调优

K Nearest Neighbor 算法又叫 KNN 算法,这个算法是机器学习里面一个比较经典的算法,总体来说 KNN 算法是相对比较容易理解的算法。

KNN 算法是一种基于实例的机器学习算法,用于分类和回归问题。在分类问题中,KNN 算法使用训练数据集中最接近目标样本的 K 个最近邻居的标签来预测目标样本的标签。在回归问题中,KNN 算法使用训练数据集中最接近目标样本的 K 个最近邻居的数值来预测目标样本的数值。

KNN 算法的核心思想基于距离度量来判断样本之间的相似性。常用的距离度量包括欧几里得距离、曼哈顿距离等。

  • KNN 算法的优点:简单易懂、易于实现,并且适用于各种类型的数据。
  • KNN 算法的缺点:需要保存所有的训练数据集,计算复杂度高,对异常值敏感,以及对于高维数据的处理比较困难。

1.1 KNN 的定义

如果一个样本在特征空间中的 k k k 个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

不是说最近的是哪个类别就是哪个类别了,而是最近的 k k k 个哪个类别多就属于哪个类别。

来源:KNN 算法最早是由 Cover 和 Hart 提出的一种分类算法

1.2 距离公式

两个样本的距离可以通过如下公式计算,又叫欧式距离、欧几里得距离或欧几里得度量,欧氏距离是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。较早的文献称之为毕达哥拉斯度量。

对于二维平面上的两个点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2),它们之间的欧式距离为:

d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d_{12}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2} d12=(x1x2)2+(y1y2)2

对于三维空间中的两个点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1) ( x 2 , y 2 , z 2 ) (x_2,y_2,z_2) (x2,y2,z2),它们之间的欧式距离为:

d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 d_{12}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2} d12=(x1x2)2+(y1y2)2+(z1z2)2

对于n 维空间中的两个点 p = ( p 1 , p 2 , . . . , p n ) p=(p_1,p_2,...,p_n) p=(p1,p2,...,pn) q = ( q 1 , q 2 , . . . , q n ) q=(q_1,q_2,...,q_n) q=(q1,q2,...,qn),它们之间的欧式距离为:

d 12 = ∑ i = 1 n ( p i − q i ) 2 d_{12}=\sqrt{\sum_{i=1}^n(p_i-q_i)^2} d12=i=1n(piqi)2

求的是两个点之间的距离,不能是多个点之间的距离。

1.3 例子:电影类型分析

假设我们现在有几部电影:

在这里插入图片描述

其中 ? 表示电影不知道类别,如何去预测?

我们可以利用 K 近邻(KNN)算法的思想。

在这里插入图片描述

分别计算每个电影和被预测电影的距离,然后求解。

在这里插入图片描述

根据上面的定义,我们知道《唐人街探案》与《美人鱼》的距离最近。 K = 5 K=5 K=5 表明是否为最近的 5 部电影。最近的 5 部电影中,“喜剧片”有 3 个,“爱情片”有 2 个,因此《唐人街探案》的电影类型应该是“喜剧片”。

1.4 KNN 算法流程总结

  1. 计算已知类别数据集中的点与当前点之间的距离
  2. 按距离升序排序
  3. 选取与当前点距离最小的 k k k 个点
  4. 统计前 k k k 个点所在类别出现的频率
  5. 返回前 k k k 个点出现频率最高的类别作为当前点的预测分类

小结

  1. K-近邻算法简介【了解】
  2. 定义:就是通过你的“邻居”来判断你属于哪个类别
  3. 如何计算你到你的“邻居”的距离:一般时候,都是使用欧氏距离

2. KNN 算法API的初步使用

学习目标:

  • 了解 sklearn 工具的优点和包含内容
  • 应用 sklearn 中的 API 实现 KNN 算法的简单使用

机器学习流程:

在这里插入图片描述

  1. 获取数据集
  2. 数据基本处理
  3. 特征工程
  4. 机器学习
  5. 模型评估

2.1 Scikit-learn 工具介绍

在这里插入图片描述

sklearn 是一个开源的 Python 机器学习库,提供了许多用于建立和分析机器学习模型的工具和算法。主要功能包括:

  1. 数据预处理:提供了数据标准化、特征缩放、特征选择等预处理工具,能够帮助用户更好地处理数据。
  2. 监督学习:提供了许多经典的监督学习算法,如线性回归、逻辑回归、决策树、支持向量机、随机森林等,并提供了交叉验证(Cross Validation)、网格搜索(Grid Search)等模型调参工具
  3. 无监督学习:提供了无监督学习算法,如聚类、降维、异常检测等,其中最常用的算法可能是 K-Means 聚类和主成分分析(PCA)等。
  4. 模型评估:提供了常见的模型评估指标,如混淆矩阵、精度、召回率、F1 值等,并且可以使用交叉验证等方法来评估模型的性能。
  5. 数据可视化:提供了一些数据可视化工具,如 t-SNE、PCA 等,以帮助用户更好地理解数据。

总之,sklearn 是一个强大的机器学习库,可用于解决各种机器学习问题,并且易于使用,适合各种程度的用户。

  • Python 语言的机器学习工具
  • Scikit-learn 包括许多知名的机器学习算法的实现
  • Scikit-learn 文档完善,容易上手,丰富的 API

sklearn 的全称是 scikit-learn。scikit 表示 SciPy Toolkit,因为它依赖于 SciPy 库(Science Python)。而 learn 则表示机器学习。


安装

pip install scikit-learn
  • 1

注:安装 scikit-learn 需要 Numpy、Scipy 等库

2.2 KNN 算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
  • 1

其中 n_neighbors:查询使用的邻居数,int,默认为 5。

2.3 练习案例

2.3.1 步骤分析

  1. 获取数据集
  2. 数据基本处理(该案例中省略)
  3. 特征工程(该案例中省略)
  4. 机器学习
  5. 模型评估(该案例中省略)

2.3.2 代码过程

  1. 导入模块
from sklearn.neighbors import KNeighborsClassifier
  • 1
  1. 构造数据集
x = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
  • 1
  • 2
  1. 机器学习:训练模型
# 实例化API
estimator = KNeighborsClassifier(n_neighbors=2)

# 使用ift方法进行训练
estimator.fit(x, y)

# 预测
estimator.predict([[1]])  # array([0])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

小结

  • sklearn 的优势:
    • 文档多,且规范
    • 包含的算法多
    • 实现起来容易
  • KNN 中的 API:
    • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

问题

  1. 距离公式,除了欧式距离,还有哪些距离公式可以使用?
  2. 如何选取 K K K 值的大小?
  3. API 中其他参数的具体含义?

3. 距离度量

学习目标:

  1. 了解距离公式的基本性质
  2. 知道机器学习中常见的距离计算公式

3.1 距离公式的基本性质

在机器学习过程中,对于函数 d i s t ( ∗ , ∗ ) \mathrm{dist}(*, *) dist(,),若它是“距离度量”(Distance Measure),则需满足一些基本性质:

  1. 非负性: d i s t ( x i , x j ) ≥ 0 \mathrm{dist}(x_i, x_j) \ge 0 dist(xi,xj)0 —— 两点之间的距离必须 ≥ 0 \ge 0 0
  2. 同一性: d i s t ( x i , x j ) = 0 \mathrm{dist}(x_i, x_j) = 0 dist(xi,xj)=0(当且仅当 x i = x j x_i = x_j xi=xj) —— 同一个位置距离为 0 0 0
  3. 对称性: d i s t ( x i , x j ) = d i s t ( x j , x i ) \mathrm{dist}(x_i, x_j) = \mathrm{dist}(x_j, x_i) dist(xi,xj)=dist(xj,xi)
  4. 直递性: d i s t ( x i , x j ) ≤ d i s t ( x i , x k ) + d i s t ( x k , x i ) \mathrm{dist}(x_i, x_j) \le \mathrm{dist}(x_i, x_k) + \mathrm{dist}(x_k, x_i) dist(xi,xj)dist(xi,xk)+dist(xk,xi) —— 三角不等式

直递性常被直接称为“三角不等式”

3.2 常见的距离公式

3.2.1 欧式距离(Euclidean Distance)

欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。

对于二维平面上的两个点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2),它们之间的欧式距离为:

d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d_{12}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2} d12=(x1x2)2+(y1y2)2

对于三维空间中的两个点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1) ( x 2 , y 2 , z 2 ) (x_2,y_2,z_2) (x2,y2,z2),它们之间的欧式距离为:

d 12 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 d_{12}=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2} d12=(x1x2)2+(y1y2)2+(z1z2)2

对于n 维空间中的两个点 p = ( p 1 , p 2 , . . . , p n ) p=(p_1,p_2,...,p_n) p=(p1,p2,...,pn) q = ( q 1 , q 2 , . . . , q n ) q=(q_1,q_2,...,q_n) q=(q1,q2,...,qn),它们之间的欧式距离为:

d 12 = ∑ i = 1 n ( p i − q i ) 2 d_{12}=\sqrt{\sum_{i=1}^n(p_i-q_i)^2} d12=i=1n(piqi)2

举例:

X = [[1, 1], [2, 2], [3, 3], [4, 4]];

经计算得:
d = 1.4142  2.8284  4.2426  1.4142  2.8284  1.4142
  • 1
  • 2
  • 3
  • 4

3.2.2 曼哈顿距离(Manhattan Distance)

在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block Distance)。

在这里插入图片描述

曼哈顿距离是指在一个二维平面上,从点 A A A 到点 B B B 沿着网格线走的最短距离。也就是说,曼哈顿距离是指两个点横坐标差的绝对值与纵坐标差的绝对值之和。例如,如果点 A A A 的坐标为 ( x 1 , y 1 ) (x_1, y_1) (x1,y1),点 B B B 的坐标为 ( x 2 , y 2 ) (x_2, y_2) (x2,y2),则它们之间的曼哈顿距离为 ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ | x_1 - x_2 | + | y_1 - y_2 | x1x2+y1y2。曼哈顿距离得名于美国纽约曼哈顿区的城市规划,因为这个地区的街道呈网格状布局,人们往往需要沿着网格线行走。曼哈顿距离广泛应用于计算机科学、数据分析以及城市规划等领域。

  • 二维平面两点 a ( x 1 , y 1 ) a(x_1, y_1) a(x1,y1) b ( x 2 , y 2 ) b(x_2, y_2) b(x2,y2) 间的曼哈顿距离:

d 12 = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d_{12} = |x_1 - x_2| + |y_1 - y_2| d12=x1x2+y1y2

  • n n n 维空间点 a ( p 1 , p 2 , p 3 , . . . , p n ) a(p_1, p_2, p_3, ..., p_n ) a(p1,p2,p3,...,pn) b ( q 1 , q 2 , q 3 , . . . , q n ) b(q_1, q_2, q_3, ..., q_n ) b(q1,q2,q3,...,qn) 的曼哈顿距离:

d 12 = ∑ k = 1 n ∣ p k − q k ∣ d_{12} = \sum^n_{k=1}|p_k - q_k| d12=k=1npkqk

举例

x = [[1, 1], [2, 2], [3, 3], [4, 4]]

经计算得:

d = 2   4   6   2   4   2
  • 1
  • 2
  • 3
  • 4
  • 5

3.2.3 切比雪夫距离(Chebyshev Distance)

切比雪夫距离是指在数学中,两个 n n n 维向量之间的度量方式。它定义为两个向量各个维度差值的绝对值的最大值

具体而言,对于两个 n n n 维向量 x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1,x2,...,xn) y = ( y 1 , y 2 , . . . , y n ) y = (y_1, y_2, ..., y_n) y=(y1,y2,...,yn),它们之间的切比雪夫距离 d ( x , y ) d(x,y) d(x,y) 是:

d ( x , y ) = max ⁡ ( ∣ x 1 − y 1 ∣ , ∣ x 2 − y 2 ∣ , . . . , ∣ x n − y n ∣ ) d(x,y) = \max(|x_1-y_1|, |x_2-y_2|, ..., |x_n-y_n|) d(x,y)=max(x1y1,x2y2,...,xnyn)

也就是说,切比雪夫距离是各个维度差值的绝对值的最大值。例如,对于二维平面上的点 x = ( x 1 , x 2 ) x=(x_1,x_2) x=(x1,x2) y = ( y 1 , y 2 ) y=(y_1,y_2) y=(y1,y2),它们之间的切比雪夫距离是:

d ( x , y ) = m a x ( ∣ x 1 − y 1 ∣ , ∣ x 2 − y 2 ∣ ) d(x,y) = max(|x_1-y_1|, |x_2-y_2|) d(x,y)=max(x1y1,x2y2)

切比雪夫距离常用于衡量两个向量之间的相似性或差异性,特别是在聚类、异常检测和分类等机器学习领域中经常被使用。

国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。国王从格子 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)走到格子 ( x 2 , y 2 ) (x_2, y_2) (x2,y2)最少需要多少步?这个距离就叫切比雪夫距离。

在这里插入图片描述

3.2.4 闵可夫斯基距离(Minkowski Distance)

闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。闵可夫斯基距离是一种用于度量两个 n n n 维向量之间相似性或差异性的距离度量方式,它可以看做是将欧几里得距离和切比雪夫距离作为特例的一般化形式

其定义为:对于两个 n n n 维向量 x = ( x 1 , x 2 , . . . , x n ) x = (x_1, x_2, ..., x_n) x=(x1,x2,...,xn) y = ( y 1 , y 2 , . . . , y n ) y = (y_1, y_2, ..., y_n) y=(y1,y2,...,yn),它们之间的闵可夫斯基距离 d ( x , y ) d(x, y) d(x,y)为:

d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ p p d(x,y) = \sqrt[p]{\sum_{i=1}^{n}|x_i-y_i|^p} d(x,y)=pi=1nxiyip

其中, p p p 为正实数,表示闵可夫斯基距离的阶数。

  • p = 1 p=1 p=1 时,就是曼哈顿距离;
  • p = 2 p=2 p=2 时,就是欧氏距离;
  • p → ∞ p \to \infty p 时,就是切比雪夫距离。

根据 p p p 的不同,闵氏距离可以表示某一类/种的距离。在机器学习领域,闵可夫斯基距离同样被广泛应用于聚类、异常检测和分类等任务中。


小结

闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离,都存在明显的缺点。

  • 欧氏距离的主要缺点是对异常值敏感,即如果某个特征明显偏离其他特征的分布,那么该特征对欧氏距离的计算结果会产生较大的影响。此外,在高维数据中,欧氏距离会出现所谓的“维数灾难”,即随着维度的增加,样本之间的距离变得越来越相似,这会导致聚类效果不佳。
  • 曼哈顿距离的缺点是在处理高维数据时,由于数据点之间的距离计算只考虑每个维度上的差异,因此随着维度的增加,其计算量会快速增加,而且容易受到噪声数据的影响,使得聚类效果变差。
  • 切比雪夫距离的主要缺点是它只考虑维度之间的最大差异,而忽略了各个维度之间的协同作用。因此,当数据点在多个维度上都存在轻微差异时,切比雪夫距离可能会产生不合理的结果。此外,切比雪夫距离对于对称分布的数据集可能会失效。

因此,在实际应用中,需要根据具体的问题和数据特征选择适当的距离度量方式,或者采用多种距离度量方式综合考虑。

举例:二维样本(身高 [单位:cm],体重 [单位:kg]),现有三个样本: a ( 80 , 50 ) a(80, 50) a(80,50) b ( 190 , 50 ) b(190, 50) b(190,50) c ( 180 , 60 ) c(180, 60) c(180,60)

a a a b b b 的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于 a a a c c c 的闵氏距离。但实际上身高的 10cm 并不能和体重的 10kg 划等号。

闵氏距离的缺点:

  1. 将各个分量的量纲(scale),也就是将不同分量的“单位”相同地看待了;
  2. 未考虑各个分量的分布(期望,方差等)可能是不同的。

3.3 【拓展】其他距离公式

3.3.1 标准化欧氏距离(Standardized Euclidean Distance)

标准化欧氏距离是一种基于欧氏距离的距离度量方式,用于在处理数据时将不同维度上的特征值进行标准化处理。其计算方式是对每个特征值减去该特征值的均值并除以该特征值的标准差,从而将特征值转换为标准正态分布,然后再计算欧氏距离。

具体而言,对于两个 n n n 维向量 x = ( x 1 , x 2 , . . . , x n ) x=(x_1, x_2, ..., x_n) x=(x1,x2,...,xn) y = ( y 1 , y 2 , . . . , y n ) y=(y_1, y_2, ..., y_n) y=(y1,y2,...,yn),它们之间的标准化欧氏距离 d ( x , y ) d(x, y) d(x,y) 可以表示为:

d ( x , y ) = ∑ i = 1 n ( x i − x ˉ i s i − y i − y ˉ i s i ) 2 d(x,y) = \sqrt{\sum_{i=1}^{n}\left(\frac{x_i-\bar{x}_i}{s_i}-\frac{y_i-\bar{y}_i}{s_i}\right)^2} d(x,y)=i=1n(sixixˉisiyiyˉi)2

其中, x ˉ i \bar{x}_i xˉi y ˉ i \bar{y}_i yˉi 分别表示向量 x x x y y y 在第 i i i 个维度上的均值, s i s_i si 表示向量在第 i i i 个维度上的标准差。

标准化欧氏距离的优点是可以消除由于不同特征量纲和取值范围带来的影响,使得各个特征在距离度量中起到相同的作用。此外,标准化欧氏距离还可以减小异常值的影响。

在机器学习和数据挖掘领域,标准化欧氏距离常常被用于聚类、分类和异常检测等任务中,特别是在需要处理多个具有不同量纲和取值范围的特征时,标准化欧氏距离能够提高模型的鲁棒性和泛化能力

举例

X=[[1, 1], [2, 2], [3, 3], [4, 4]];(假设两个分量的标准差分别为0.5和1)

经计算得:

d = 2.2361  4.4721  6.7082  2.2361  4.4721  2.2361
  • 1
  • 2
  • 3
  • 4
  • 5

3.3.2 余弦距离(Cosine Distance)

几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。余弦距离是一种用于度量两个向量之间相似性的距离度量方式。其定义为两个向量之间的夹角的余弦值,即:

d ( x , y ) = 1 − x ⋅ y ∥ x ∥ ∥ y ∥ d(x,y) = 1 - \frac{ x \cdot y }{ \|x\| \|y\| } d(x,y)=1x∥∥yxy

其中, x x x y y y 分别表示两个向量, ⋅ \cdot 表示向量的内积运算, ∥ x ∥ \|x\| x ∥ y ∥ \|y\| y 分别表示两个向量的模长。余弦距离的取值范围在0到1之间:

  • 当两个向量方向相同时,余弦距离等于1;
  • 当两个向量方向完全相反时,余弦距离等于0;
  • 当两个向量之间不存在线性关系时,余弦距离接近于0。

在机器学习领域,余弦距离常被用于文本分类、推荐系统和图像处理等任务中,特别是在需要考虑向量之间的方向而不仅仅是大小时,余弦距离能够提供更好的距离度量方式。

举例

X=[[1, 1], [1, 2], [2, 5], [1, -4]]

经计算得:

d = 0.9487  8.9191  -0.5145 0.9965  -0.7593 -0.8107
  • 1
  • 2
  • 3
  • 4
  • 5

3.3.3 汉明距离(Hamming Distance)

汉明距离是衡量两个等长字符串在相同位置上不同字符的个数,即通过对比这两个字符串对应位置上的字符是否相同来计算它们之间的“距离”。

设有两个长度为 n n n 的字符串 A A A B B B,则它们的汉明距离 H D ( A , B ) HD(A, B) HD(A,B) 定义为将 A A A 转换成 B B B 所需的最小替换次数。也就是说,需要将 A A A 中的某些字符替换成另外的字符才能得到 B B B,而替换的次数就是它们的汉明距离。

计算公式如下:

D H ( A , B ) = ∑ i = 1 n ( A [ i ] ≠ B [ i ] ) D_H(A, B) = \sum_{i=1}^n (A[i] \neq B[i]) DH(A,B)=i=1n(A[i]=B[i])

其中, A [ i ] A[i] A[i] 表示 A A A 中第 i i i 个字符, B [ i ] B[i] B[i] 表示 B B B 中第 i i i 个字符。符号 ≠ \neq = 代表不等于。该公式表示将 A A A B B B 每个位置上的字符逐一比较,若不同则累加1。

举个例子,假设有两个字符串A="101110"和B=“100101”,它们的汉明距离为3,因为A[2]、A[4]和A[5]三个字符需要被替换成"0"才能得到B。

The Hamming distance between "1011101" and "1081881" is 2.
The Hamming distance between "2143896"" and "2233796"is 3.
The Hamming distance between "toned" and " roses" is 3.
  • 1
  • 2
  • 3

“1011101” 和 "1081881"的汉明距离是2,是因为它们在二进制下只有两个位置上的数字不同。

具体来说,在这两个字符串中,第3个和第7个字符不同。对应到二进制位上,"1011101"中第3个字符是1,而"1081881"中是0;“1011101"中第7个字符是0,而"1081881"中是8(转换成二进制后是"1000”)。

因此,这两个字符串的汉明距离是2,即它们只需要进行2次单个字符的修改(例如替换、插入、删除等操作),就可以互相转换。

在这里插入图片描述

汉明距离是用于比较两个等长字符串之间的差异程度的度量方式,通常被应用在以下场景中:

  1. 错误校验与纠错码: 汉明距离可以用来检测并纠正传输或存储过程中的数据错误。例如,在网络传输中,发送方将信息编码成特定的纠错码,接收方通过计算汉明距离进行错误检测和自动纠错。

  2. 基因组学:在基因序列比对中,汉明距离被广泛应用于比较不同物种之间的基因组序列。这有助于了解生物进化和变异的原因以及疾病的相关性。

  3. 数据库索引:在数据库中,可以使用汉明距离作为索引键来实现模糊搜索。例如,可以使用哈希函数计算所有文本字符串的汉明距离,并将其用作索引键,从而实现更快的模糊查询。

  4. 图像处理:在图像处理中,汉明距离可以用于比较不同图片之间的相似度。例如,可以将图像分割成多个区域,并计算每个区域内像素值的汉明距离,从而确定两张图片之间的相似度。

  5. 机器学习:在机器学习中,汉明距离可以用于计算特征向量之间的相似性或差异性,从而确定不同数据点之间的分类或聚类关系。

3.3.4 杰卡德距离(Jaccard Distance)

杰卡德距离(Jaccard distance)是衡量两个集合之间差异性的一种度量方法,它定义为两个集合中不同元素的比例。

  • 如果两个集合完全相同,则杰卡德距离为0;
  • 如果两个集合没有共同元素,则杰卡德距离为1。

假设有两个集合 A A A B B B,它们的交集大小为 ∣ A ∩ B ∣ |A\cap B| AB,并集大小为 ∣ A ∪ B ∣ |A \cup B| AB,则它们的杰卡德距离可以表示为:

d J ( A , B ) = 1 − ∣ A ∩ B ∣ ∣ A ∪ B ∣ d_{J}(A,B) = 1 - \frac{|A\cap B|}{|A\cup B|} dJ(A,B)=1ABAB

其中, ∣ ⋅ ∣ |\cdot| 表示集合的元素个数。

举例

X=[[1, 1, 0], [1, -1, 0], [-1, 1, 0]]

经计算得(注:以下计算中,把杰卡德距离定义为不同的维度的个数占“非全零维度”的比例):

d = 0.5000  0.5000  1.0000
  • 1
  • 2
  • 3
  • 4
  • 5

3.3.5 马氏距离(Mahalanobis Distance)

马氏距离(Mahalanobis distance)是一种常用的度量两个样本点之间距离的方法,它考虑了不同特征之间的相关性。该距离度量方法通常用于聚类、分类和异常检测等机器学习任务中。

马氏距离可以看作是欧几里得距离的一种推广,它在计算时除了考虑各个特征之间的差异,还考虑了各个特征之间的相关性。具体来说,对于两个样本点 x x x y y y,它们之间的 Mahalanobis 距离 D M ( x , y ) D_M(x,y) DM(x,y) 可以通过以下公式进行计算:

D M ( x , y ) = ( x − y ) T S − 1 ( x − y ) D_M(x,y) = \sqrt{(x-y)^T S^{-1} (x-y)} DM(x,y)=(xy)TS1(xy)

其中, S S S 为协方差矩阵。当样本集合的协方差矩阵 S S S 已知时,可以利用上述公式计算任意两个样本点之间的马氏距离。需要注意的是,当协方差矩阵是单位矩阵时,马氏距离退化为欧几里得距离


3.4 “连续属性”和“离散属性”的距离计算

我们常将属性划分为“连续属性”(continuous attribute)和“离散属性” (categorical attribute),前者在定义域上有无穷多个可能的取值,后者在定义域上是有限个取值

  • 若属性值之间存在序关系,则可以将其转化为连续值。例如:身高属性“高”“中等”“矮”,可转化为 { 1 , 0.5 , 0 } \{1, 0.5, 0\} {1,0.5,0}
    • 闵可夫斯基距离可以用于有序属性。
  • 若属性值之间不存在序关系,则通常将其转化为向量的形式,例如:性别属性“男”“女”,可转化为 { ( 1 , 0 ) , ( 0 , 1 ) } \{(1, 0), (0, 1)\} {(1,0),(0,1)}

在距离中,序关系通常指的是点之间的大小(或者称为“比较”)关系。具体来说,在欧几里得空间中,两个点之间的距离是由它们在空间中的位置所决定的。因此,我们可以比较两个点的距离,即确定哪一个点更接近另一个点。

在序关系中,有三种可能的情况:等于、小于和大于。如果两个点之间的距离相同,则它们之间的序关系是等于。如果一个点比另一个点距离更近,则它们之间的序关系是小于。反之,如果一个点比另一个点距离更远,则它们之间的序关系是大于。

需要注意的是,序关系只能应用于可比较的对象。在距离中,任意两个点都是可比较的,因为它们之间的距离可以被确定。


小结

  1. 距离公式的基本性质:
    • 非负性
    • 统一性
    • 对称性
    • 直递性
  2. 常见距离公式:
    1. 欧式距离(Euclidean Distance):通过距离平方值进行计算
    2. 曼哈顿距离(Manhattan Distance):通过距离的绝对值进行计算
    3. 切比雪夫距离(Chebyshev Distance):维度的最大值进行计算
    4. 闵可夫斯基距离(Minkowski Distance):
      • p = 1 p=1 p=1 时,就是曼哈顿距离
      • p = 2 p=2 p=2 时,就是欧氏距离
      • p → ∞ p\to \infty p 时,就是切比雪夫距离
  3. 属性
    1. 连续属性
    2. 离散属性:
      • 存在序关系,可以将其转化为连续值
      • 不存在序关系,通常将其转化为向量的形式

4. KNN 算法中 K 值的选择

学习目标:

  • 知道KNN中K值大小选择对模型的影响

4.1 K 值选择说明

在这里插入图片描述

之前说到过这个表,当时选择的 K K K 是 5。 K = 5 K=5 K=5 意味着我们需要选取距离最近的 5 部电影作为参考,然后选择数量最多的类别。

如果我们将 K K K 设置为 6,此时结果如下表:

在这里插入图片描述

此时我们发现,爱情片和喜剧片的数量都是 3,数量是相等的,那么《唐人街探案》属于爱情片还是喜剧片呢?此时模型也不知道了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/703079
推荐阅读
相关标签