赞
踩
学习目标:
K Nearest Neighbor 算法又叫 KNN 算法,这个算法是机器学习里面一个比较经典的算法,总体来说 KNN 算法是相对比较容易理解的算法。
KNN 算法是一种基于实例的机器学习算法,用于分类和回归问题。在分类问题中,KNN 算法使用训练数据集中最接近目标样本的 K 个最近邻居的标签来预测目标样本的标签。在回归问题中,KNN 算法使用训练数据集中最接近目标样本的 K 个最近邻居的数值来预测目标样本的数值。
KNN 算法的核心思想:基于距离度量来判断样本之间的相似性。常用的距离度量包括欧几里得距离、曼哈顿距离等。
如果一个样本在特征空间中的 k k k 个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
不是说最近的是哪个类别就是哪个类别了,而是最近的 k k k 个哪个类别多就属于哪个类别。
来源:KNN 算法最早是由 Cover 和 Hart 提出的一种分类算法
两个样本的距离可以通过如下公式计算,又叫欧式距离、欧几里得距离或欧几里得度量,欧氏距离是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。较早的文献称之为毕达哥拉斯度量。
对于二维平面上的两个点 ( 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=(x1−x2)2+(y1−y2)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=(x1−x2)2+(y1−y2)2+(z1−z2)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=1∑n(pi−qi)2
求的是两个点之间的距离,不能是多个点之间的距离。
假设我们现在有几部电影:
其中 ?
表示电影不知道类别,如何去预测?
我们可以利用 K 近邻(KNN)算法的思想。
分别计算每个电影和被预测电影的距离,然后求解。
根据上面的定义,我们知道《唐人街探案》与《美人鱼》的距离最近。 K = 5 K=5 K=5 表明是否为最近的 5 部电影。最近的 5 部电影中,“喜剧片”有 3 个,“爱情片”有 2 个,因此《唐人街探案》的电影类型应该是“喜剧片”。
小结:
学习目标:
机器学习流程:
sklearn 是一个开源的 Python 机器学习库,提供了许多用于建立和分析机器学习模型的工具和算法。主要功能包括:
总之,sklearn 是一个强大的机器学习库,可用于解决各种机器学习问题,并且易于使用,适合各种程度的用户。
sklearn 的全称是 scikit-learn。scikit 表示 SciPy Toolkit,因为它依赖于 SciPy 库(Science Python)。而 learn 则表示机器学习。
安装:
pip install scikit-learn
注:安装 scikit-learn 需要 Numpy、Scipy 等库
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
其中 n_neighbors
:查询使用的邻居数,int
,默认为 5。
from sklearn.neighbors import KNeighborsClassifier
x = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
# 实例化API
estimator = KNeighborsClassifier(n_neighbors=2)
# 使用ift方法进行训练
estimator.fit(x, y)
# 预测
estimator.predict([[1]]) # array([0])
小结:
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
问题:
学习目标:
在机器学习过程中,对于函数 d i s t ( ∗ , ∗ ) \mathrm{dist}(*, *) dist(∗,∗),若它是“距离度量”(Distance Measure),则需满足一些基本性质:
直递性常被直接称为“三角不等式”
欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。
对于二维平面上的两个点 ( 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=(x1−x2)2+(y1−y2)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=(x1−x2)2+(y1−y2)2+(z1−z2)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=1∑n(pi−qi)2
举例:
X = [[1, 1], [2, 2], [3, 3], [4, 4]];
经计算得:
d = 1.4142 2.8284 4.2426 1.4142 2.8284 1.4142
在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(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 | ∣x1−x2∣+∣y1−y2∣。曼哈顿距离得名于美国纽约曼哈顿区的城市规划,因为这个地区的街道呈网格状布局,人们往往需要沿着网格线行走。曼哈顿距离广泛应用于计算机科学、数据分析以及城市规划等领域。
d 12 = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d_{12} = |x_1 - x_2| + |y_1 - y_2| d12=∣x1−x2∣+∣y1−y2∣
d 12 = ∑ k = 1 n ∣ p k − q k ∣ d_{12} = \sum^n_{k=1}|p_k - q_k| d12=k=1∑n∣pk−qk∣
举例:
x = [[1, 1], [2, 2], [3, 3], [4, 4]]
经计算得:
d = 2 4 6 2 4 2
切比雪夫距离是指在数学中,两个 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(∣x1−y1∣,∣x2−y2∣,...,∣xn−yn∣)
也就是说,切比雪夫距离是各个维度差值的绝对值的最大值。例如,对于二维平面上的点 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(∣x1−y1∣,∣x2−y2∣)
切比雪夫距离常用于衡量两个向量之间的相似性或差异性,特别是在聚类、异常检测和分类等机器学习领域中经常被使用。
国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。国王从格子 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)走到格子 ( x 2 , y 2 ) (x_2, y_2) (x2,y2)最少需要多少步?这个距离就叫切比雪夫距离。
闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。闵可夫斯基距离是一种用于度量两个 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=1∑n∣xi−yi∣p
其中, p p 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 划等号。
闵氏距离的缺点:
标准化欧氏距离是一种基于欧氏距离的距离度量方式,用于在处理数据时将不同维度上的特征值进行标准化处理。其计算方式是对每个特征值减去该特征值的均值并除以该特征值的标准差,从而将特征值转换为标准正态分布,然后再计算欧氏距离。
具体而言,对于两个 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=1∑n(sixi−xˉi−siyi−yˉ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
几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。余弦距离是一种用于度量两个向量之间相似性的距离度量方式。其定义为两个向量之间的夹角的余弦值,即:
d ( x , y ) = 1 − x ⋅ y ∥ x ∥ ∥ y ∥ d(x,y) = 1 - \frac{ x \cdot y }{ \|x\| \|y\| } d(x,y)=1−∥x∥∥y∥x⋅y
其中, x x x 和 y y y 分别表示两个向量, ⋅ \cdot ⋅ 表示向量的内积运算, ∥ x ∥ \|x\| ∥x∥ 和 ∥ y ∥ \|y\| ∥y∥ 分别表示两个向量的模长。余弦距离的取值范围在0到1之间:
在机器学习领域,余弦距离常被用于文本分类、推荐系统和图像处理等任务中,特别是在需要考虑向量之间的方向而不仅仅是大小时,余弦距离能够提供更好的距离度量方式。
举例:
X=[[1, 1], [1, 2], [2, 5], [1, -4]]
经计算得:
d = 0.9487 8.9191 -0.5145 0.9965 -0.7593 -0.8107
汉明距离是衡量两个等长字符串在相同位置上不同字符的个数,即通过对比这两个字符串对应位置上的字符是否相同来计算它们之间的“距离”。
设有两个长度为 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=1∑n(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.
“1011101” 和 "1081881"的汉明距离是2,是因为它们在二进制下只有两个位置上的数字不同。
具体来说,在这两个字符串中,第3个和第7个字符不同。对应到二进制位上,"1011101"中第3个字符是1,而"1081881"中是0;“1011101"中第7个字符是0,而"1081881"中是8(转换成二进制后是"1000”)。
因此,这两个字符串的汉明距离是2,即它们只需要进行2次单个字符的修改(例如替换、插入、删除等操作),就可以互相转换。
汉明距离是用于比较两个等长字符串之间的差异程度的度量方式,通常被应用在以下场景中:
错误校验与纠错码: 汉明距离可以用来检测并纠正传输或存储过程中的数据错误。例如,在网络传输中,发送方将信息编码成特定的纠错码,接收方通过计算汉明距离进行错误检测和自动纠错。
基因组学:在基因序列比对中,汉明距离被广泛应用于比较不同物种之间的基因组序列。这有助于了解生物进化和变异的原因以及疾病的相关性。
数据库索引:在数据库中,可以使用汉明距离作为索引键来实现模糊搜索。例如,可以使用哈希函数计算所有文本字符串的汉明距离,并将其用作索引键,从而实现更快的模糊查询。
图像处理:在图像处理中,汉明距离可以用于比较不同图片之间的相似度。例如,可以将图像分割成多个区域,并计算每个区域内像素值的汉明距离,从而确定两张图片之间的相似度。
机器学习:在机器学习中,汉明距离可以用于计算特征向量之间的相似性或差异性,从而确定不同数据点之间的分类或聚类关系。
杰卡德距离(Jaccard distance)是衡量两个集合之间差异性的一种度量方法,它定义为两个集合中不同元素的比例。
假设有两个集合 A A A 和 B B B,它们的交集大小为 ∣ A ∩ B ∣ |A\cap B| ∣A∩B∣,并集大小为 ∣ A ∪ B ∣ |A \cup B| ∣A∪B∣,则它们的杰卡德距离可以表示为:
d J ( A , B ) = 1 − ∣ A ∩ B ∣ ∣ A ∪ B ∣ d_{J}(A,B) = 1 - \frac{|A\cap B|}{|A\cup B|} dJ(A,B)=1−∣A∪B∣∣A∩B∣
其中, ∣ ⋅ ∣ |\cdot| ∣⋅∣ 表示集合的元素个数。
举例:
X=[[1, 1, 0], [1, -1, 0], [-1, 1, 0]]
经计算得(注:以下计算中,把杰卡德距离定义为不同的维度的个数占“非全零维度”的比例):
d = 0.5000 0.5000 1.0000
马氏距离(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)=(x−y)TS−1(x−y)
其中, S S S 为协方差矩阵。当样本集合的协方差矩阵 S S S 已知时,可以利用上述公式计算任意两个样本点之间的马氏距离。需要注意的是,当协方差矩阵是单位矩阵时,马氏距离退化为欧几里得距离。
我们常将属性划分为“连续属性”(continuous attribute)和“离散属性” (categorical attribute),前者在定义域上有无穷多个可能的取值,后者在定义域上是有限个取值。
在距离中,序关系通常指的是点之间的大小(或者称为“比较”)关系。具体来说,在欧几里得空间中,两个点之间的距离是由它们在空间中的位置所决定的。因此,我们可以比较两个点的距离,即确定哪一个点更接近另一个点。
在序关系中,有三种可能的情况:等于、小于和大于。如果两个点之间的距离相同,则它们之间的序关系是等于。如果一个点比另一个点距离更近,则它们之间的序关系是小于。反之,如果一个点比另一个点距离更远,则它们之间的序关系是大于。
需要注意的是,序关系只能应用于可比较的对象。在距离中,任意两个点都是可比较的,因为它们之间的距离可以被确定。
小结:
学习目标:
之前说到过这个表,当时选择的 K K K 是 5。 K = 5 K=5 K=5 意味着我们需要选取距离最近的 5 部电影作为参考,然后选择数量最多的类别。
如果我们将 K K K 设置为 6,此时结果如下表:
此时我们发现,爱情片和喜剧片的数量都是 3,数量是相等的,那么《唐人街探案》属于爱情片还是喜剧片呢?此时模型也不知道了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。