机器学习基础:基于样本的学习——KNN

目录

1. 基于样本的学习

2. 比较样本

2.1 特征向量

2.2 特征向量的度量(Similarity / Distance)

2.2.1 特征向量的度量——向量

2.2.2 特征向量的度量——距离

2.2.3 特征向量的度量——非数值型距离

3. Instance-Based 分类器

3.1 最近邻分类器(Nearest Neighbor Classifier)

3.2 K最近邻(K-Nearest Neighbor)算法(KNN)

3.3 加权(Weighted KNN)

3.4 不同加权KNN示例

3.5 KNN的复杂度分析

3.6 KNN与Naive Bayes/Decision Tree的比较


1. 基于样本的学习

对于一个机器学习系统,输入有下面三个方面的内容组成:

  • 样本 (instance)
  • 特征(attributes / features)
  • 标签 (classes / labels)

什么是样本

对监督学习来说,每个样本可以看做是一个包含n个特征的元组同时拥有一个表明类别的标签。

机器学习的目的

根据数据提供的label标签,试图构建一个模型,这个模型可以代表整个数据集的输入和输出关系。

基于样本的学习(instance-based learning):

需要将进行标注的instance保存在内存中,直接从instance中学习(而不建立任何的模型),也称为memory-based \: \: learning

2. 比较样本

如何比较样本(Comparing Instances)呢?

机器学习基础:基于样本的学习——KNN_第1张图片

对于每个instance,因为它的特征是一个n元组,那么我们总是可以把这个n元组看成是一个向量\vec{f}

机器学习基础:基于样本的学习——KNN_第2张图片

机器学习基础:基于样本的学习——KNN_第3张图片

机器学习基础:基于样本的学习——KNN_第4张图片

2.1 特征向量

特征的类型

  • nomial / categorial / discrete: 例如颜色,性别。
  • ordinal: 这类特征是有严格顺序的,例如描述温度程度的特征cool < mild < hot
  • numeric / continuous: 这种是连续的数值特征:例如身高、体重、年龄。

特征向量根据之前的描述,我们可以看做一个n元组,那么我们可以将描述这个向量的n维空间看做是向量的特征空间。通过这种方式,我们可以衡量任意两个具有相同维度的特征向量的相似度、长度等很多指标来实现对向量定量计算和判断的目的。

机器学习基础:基于样本的学习——KNN_第5张图片

2.2 特征向量的度量(Similarity / Distance)

2.2.1 特征向量的度量——向量

相似度 (Similarity)

两个向量的相似度:衡量两个向量之间有多像。

相似度的值越大代表相似度越高。通常相似度的取值范围在[0,1]之间

余弦相似度(Cosine Similarity)

给定两个instance,他们的特征向量分别是\vec{a}, \vec{b},可以通过计算两个特征向量的角度作为余弦相似度:
cos(A,B)=\frac{\sum_ia_ib_i}{\sqrt{\sum_ia_i^2}\sqrt{\sum_ib_i^2}}=\frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|}

机器学习基础:基于样本的学习——KNN_第6张图片

机器学习基础:基于样本的学习——KNN_第7张图片

2.2.2 特征向量的度量——距离

距离(Distance)

两个向量之间的距离distance

衡量两个向量之间有多不像distance越小表明两个向量越像 ,两个向量的最小距离是0

欧几里得距离 (Euclidean Distance)

机器学习基础:基于样本的学习——KNN_第8张图片

机器学习基础:基于样本的学习——KNN_第9张图片

曼哈顿距离(Manhattan Distance)

机器学习基础:基于样本的学习——KNN_第10张图片

机器学习基础:基于样本的学习——KNN_第11张图片

 

2.2.3 特征向量的度量——非数值型距离

机器学习基础:基于样本的学习——KNN_第12张图片

Hamming距离

上面说的两个特征向量距离的度量方式必须要求每一个维度的特征都要是数值类型的,那么如果对于下面这种包含nomial类型的instance之间,如何衡量distance。首先应该将所有的nomial特征都使用one-hot编码的方式进行转换。

机器学习基础:基于样本的学习——KNN_第13张图片

one-hot

one-hot就是一种将非数值特征转换成数值特征的方式。而且能够保证特征在转换之后,不同的取值在距离上都是完全一样的。

例如color这列特征,在进行one-hot编码之后,所有的特征取值都变成了用3个位表示的向量;无论是redorange还是redyellow或是orangeyellow之间,都只有一个bit位的不同,因此他们相互之间都是公平的。

如果不用one-hot可能会造成一种不公平的现象。假设还是对color,我们让red=1orange=2yellow=3;看起来他们之间还是彼此距离一样,但其实有一个问题,就是对机器来说,很可能认为yellow的优先级高于redorange,因为yellow的数值较大。而使用one-hot 就可以完美解决这个问题

one-hot存在的问题:

但是one-hot问题就是会造成特别系数的矩阵。对于color来说3个颜色还好,如果有一个特征有100种不同的取值,那么通过one-hot编码出的新特征就会是一个长度为100的值,里面除了某一个bit位上的值 =1之外,其他99个位置都是0。这个矩阵就过于稀疏了。


经过one-hot编码之后我们就可以衡量两个样本之间的距离了:

从图中可以看出Apple样本和Orange之间有4bit位是不同的,因此他们的距离就是4,而 AppleBanana的距离是6

机器学习基础:基于样本的学习——KNN_第14张图片

Distance(Apple,Orange)=4

机器学习基础:基于样本的学习——KNN_第15张图片

Distance(Apple,Banana)=6

3. Instance-Based 分类器

3.1 最近邻分类器(Nearest Neighbor Classifier)

基于的假设:空间中两个样本的距离越相近,那么他们越可能拥有相同的标签。

机器学习基础:基于样本的学习——KNN_第16张图片


算法细节:

对于一个样本x(测试样本,没有label),离他最近的一个训练样本(有label的样本)是y,它所有的邻居样本是z\in Y;在所有邻居样本中通过距离/相似度测算得到距离最小或者相似度最大的邻居样本:

d(x,y)=min(d(x,z)|z \in Y)

用这个最近邻居样本的label作为当xlabel

通过最近邻算法得到的决策边界是非线性的:

机器学习基础:基于样本的学习——KNN_第17张图片

3.2 K最近邻(K-Nearest Neighbor)算法(KNN)

最近邻是通过找最近的一个带标签的训练样本y,把y的标签当做自己的预测标签,将一个邻居扩展到k个邻居,也就是通过k个训练样本的标签来决定当前这个预测样本的标签,这样的算法叫K最近邻。

机器学习基础:基于样本的学习——KNN_第18张图片

机器学习基础:基于样本的学习——KNN_第19张图片


如何选择K:不同的K会导致算法的表现差异很大。

机器学习基础:基于样本的学习——KNN_第20张图片

  • K值越小,由于对噪声过拟合,分类器性能越低,泛化能力越差。
  • K很大的时候K值越大,分类器性能越趋向于0-R的性能;因为0-R其实可以看成将所有的样本数N一起考虑的N-最近邻。
  • 一般来说,对训练数据进行试错是得到合适K的唯一方法。
  • 我们需要考虑数据点的密度。

打破平局

一定会出现一种情况,假设是1-最近邻,但在当前需要预测样本x的周围恰好有两个标签不同的样本dh距离x完全相同。

机器学习基础:基于样本的学习——KNN_第21张图片

打破平局的方式3种:

  • 随机选一个
  • 选哪个具有更高先验概率的样本:例如d的类别标签是0h的类别标签是1,而在整体的训练集的样本分布中,标签为0的样本占了60\%1的样本占了40\%,这时候以0为标签的样本的先验概率就是0.6所以这时候x的标签为0
  • 将当前的K-NN增加到(K+1)-NN

3.3 加权KNN(Weighted KNN)

假设在这种情境中,对于一个样本x周围有多个样本点,如果按照传统的KNN就会判定x的标签和蓝色的样本一样。但明明有一个红色的样本点离这个x比其他的所有蓝色样本点都更近,这样的情景我们应该怎么处理呢?

机器学习基础:基于样本的学习——KNN_第22张图片

给数量和距离都分配一定的权重,最后得到的加权值比较大的样本类作为x的标签。


加权KNN使用的加权策略有以下常用的三种: 

平等权重(Equal weight)

这种方式就是传统的KNN,即x周围的每个样本点权重都一样,哪个类标签的样本数多就把x分为哪一类。

机器学习基础:基于样本的学习——KNN_第23张图片

距离倒数(Inverse distance)

每个x周围的样本\{x_j|j\in K\},他们与x之间的距离表示为d_j,那么他们的权重分别是:

w_j=\frac{1}{d_j+\epsilon}

其中\epsilon是一个非零但是极小的值,为了避免w_j

计算过程中出现了除0问题。

机器学习基础:基于样本的学习——KNN_第24张图片

存在的问题

x近到一定程度的样本的倒数会非常大,大到哪怕其他类在附近的样本很多也可以忽略不计。

 

缩放的距离倒数(Inverse linear distance)

w_j=\frac{d_{max}-d_j}{d_{max}-d_{min}}
 
这里的d_{max}, d_{min}分别是x周围的点距离x的最大值和最小值。

通过这种放缩方式可以保证没有非常大的值出现。

机器学习基础:基于样本的学习——KNN_第25张图片

3.4 不同加权KNN示例

机器学习基础:基于样本的学习——KNN_第26张图片

3.5 KNN的复杂度分析

因为这是一种instance-basedmemory-based)的计算方式,因此需要非常暴力地对所有的样本同时加载到内存中进行计算。

对于一个包含N个样本,每个样本D个特征的数据集,这种算法的复杂度为O ( D N )

对于规模较小的数据集,这种方法效果很好。

但对于大数据集,几乎不考虑这种方法。

3.6 KNN与Naive Bayes/Decision Tree的比较

KNN是一种非常lazy的算法,因为它不存在训练,所有的操作都在测试阶段完成,所以KNN不存在需要训练的参数.

给定一个C个类别,D个不同特征的数据集,对于一个test样本,NB需要的计算时间为O ( C D ),而DT只需要O(D)

KNN的优点

  • 简单,基于样本,不需要建立模型。
  • 可以产生很灵活的决策边界。
  • 可以随时增加新的训练或者测试样本而不用重新生成模型。

KNN的缺点

  • 需要规划一个很好的距离函数才能最大发挥算法的性能
  • K 值需要自己设定
  • 所有的计算都发生在预测阶段,不可能预先训练模型并保存使用
  • 容易受到噪音干扰,在高维数据上很难应用

你可能感兴趣的:(机器学习基础,机器学习,学习,深度学习,KNN)