基础算法原理和推导
KNN
(1)根据给定的距离度量,在训练集 T T T 中找出与 x x x 最邻近的 k k k个点,涵盖这 k k k 个点的邻域记作 N k ( x ) N_k(x) Nk(x);
(2)在
N
k
(
x
)
N_k(x)
Nk(x)中根据分类决策规则(如多数表决)决定
x
x
x 的类别
y
y
y:
y
=
arg
max
c
j
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
,
i
=
1
,
2
,
⋯
,
N
i
j
=
1
,
2
,
⋯
,
K
y=\arg \max _{c_{j}} \sum_{x_{i} \in N_{k}(x)} I\left(y_{i}=c_{j}\right), \quad i=1,2, \cdots, N_{i} \quad j=1,2, \cdots, K
y=argcjmaxxi∈Nk(x)∑I(yi=cj),i=1,2,⋯,Nij=1,2,⋯,K
在上式中,
I
I
I为指示函数,即当
y
i
=
c
j
y_{i}=c_{j}
yi=cj时为1,否则为0
knn优点:
-
理论成熟,思想简单,既可以用来做分类又可以做回归
-
KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练
-
可用于非线性分类(数据集不要求线性可分)
-
和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
knn缺点:
- 计算量大,尤其是数据集非常大的时候
- 样本不平衡的时候,对稀有类别的预测准确率低
- KD树,球树之类的模型建立需要大量的内存
- k值大小的选择很重要
-
通常最近邻分类器使用于特征与目标类之间的关系为比较复杂的数字类型,或者说二者关系难以理解,但是相似类间特征总是相似。
数据要求归一化,统一各个特征的量纲。
-
2-2-4 常用的距离衡量公式都有哪些?具体说明它们的计算流程,以及使用场景?
特征空间 X \mathcal X X 是n维实数向量空间 R n \mathbf{R}^n Rn , x i , x j ∈ X , x i = ( x i ( 1 ) , x i ( 2 ) , ⋯ x i ( n ) ) , x j = ( x j ( 1 ) , x j ( 2 ) , ⋯ , x j ( n ) ) x_i,x_j\in \mathcal{X}, x_i = (x_i^{(1)}, x_i^{(2)},\cdots x_i^{(n)} ), x_j = (x_j^{(1)}, x_j^{(2)}, \cdots, x_j^{(n)}) xi,xj∈X,xi=(xi(1),xi(2),⋯xi(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 ) ∣ ) 1 p L_p(x_i, x_j) = (\sum_{l=1}^n |x_i^{(l)}-x_j^{(l)}|)^{\frac{1}{p}} Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣)p1
这里 $p \geq 1 $。
1.欧式距离
当 p = 2 p=2 p=2时,称为欧氏距离,强调数值上的绝对误差
是严格定义的距离,满足正定性、对称性、三角不等式
L
2
(
x
i
,
x
j
)
=
(
∑
l
=
1
n
∣
x
i
(
l
)
−
x
j
(
l
)
∣
)
1
p
L_2(x_i, x_j) = (\sum_{l=1}^n |x_i^{(l)}-x_j^{(l)}|)^{\frac{1}{p}}
L2(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣)p1
2.曼哈顿距离(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)∣
3.切比雪夫距离(
p
=
∞
p = \infty
p=∞),各个坐标距离数值差的绝对值的最大值
L
∞
(
x
i
,
x
j
)
=
max
l
∣
x
i
(
l
)
−
x
j
(
l
)
∣
L_{\infty}(x_i, x_j) = \mathop{\max}_{l} \ |x_i^{(l)}-x_j^{(l)}|
L∞(xi,xj)=maxl ∣xi(l)−xj(l)∣
4.马氏距离
考虑各个分量(特征)之间的相关性并与各个分量的尺度无关。给定一个样本集合
X
X
X,
X
=
(
x
i
j
)
m
×
n
X=(x_{ij})_{m\times n}
X=(xij)m×n,其协方差矩阵记为
S
S
S。样本
x
i
x_i
xi与样本
x
j
x_j
xj之间的马氏距离
d
i
j
d_{ij}
dij定义为
d
i
j
=
[
(
x
i
−
x
j
)
T
S
−
1
(
x
i
−
x
j
)
]
1
2
d_{ij} = [(x_i - x_j)^TS^{-1}(x_i - x_j)]^{\frac{1}{2}}
dij=[(xi−xj)TS−1(xi−xj)]21
当
S
S
S为单位矩阵时,即样本数据的各个分量互相独立且各个分量的方差为1时,马氏距离就是欧氏距离。
汉明距离
两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数
1011101 与 1001001 之间的汉明距离是 2。
2143896 与 2233796 之间的汉明距离是 3。
“toned” 与 “roses” 之间的汉明距离是 3。
5.相关系数(correlation coefficient)
相关系数的绝对值越接近1,表示样本越相似;越接近0,表示样本越不相似。
x
i
x_i
xi与
x
j
x_j
xj之间的相关系数定义为
r
i
j
=
∑
k
=
1
m
(
x
k
i
−
x
‾
i
)
(
x
k
j
−
x
‾
j
)
[
∑
k
=
1
m
(
x
k
i
−
x
‾
i
)
2
∑
k
=
1
m
(
x
k
j
−
x
‾
j
)
2
]
1
2
r_{ij} = \frac{\sum_{k=1}^{m}\left(x_{k i}-\overline{x}_{i}\right)\left(x_{k j}-\overline{x}_{j}\right)}{\left[\sum_{k=1}^{m}\left(x_{k i}-\overline{x}_{i}\right)^{2} \sum_{k=1}^{m}\left(x_{k j}-\overline{x}_{j}\right)^{2}\right]^{\frac{1}{2}}}
rij=[∑k=1m(xki−xi)2∑k=1m(xkj−xj)2]21∑k=1m(xki−xi)(xkj−xj)
x ‾ i = 1 m ∑ k = 1 m x k i , x ‾ j = 1 m ∑ k = 1 m x k j \overline{x}_{i}=\frac{1}{m} \sum_{k=1}^{m} x_{k i}, \quad \overline{x}_{j}=\frac{1}{m} \sum_{k=1}^{m} x_{k j} xi=m1k=1∑mxki,xj=m1k=1∑mxkj
4.余弦相似度
强调方向上的相对误差
不是严格定义的距离,满足正定性、对称性,不满足三角不等式
c
o
s
(
A
,
B
)
=
A
⋅
B
∣
∣
A
∣
∣
2
∣
∣
B
∣
∣
2
cos(A,B) = \frac{A \cdot B}{||A||_2 ||B||_2}
cos(A,B)=∣∣A∣∣2∣∣B∣∣2A⋅B
5.KL散度
计算两个分布的差异性
不是严格定义的距离,满足正定性,不满足对称性、三角不等式
使用场景
欧氏距离:适用于向量各分量的度量标准统一的情况;当某些特征比其他特征取值大很多时,精确度会变差,很多特征值为0,即稀疏矩阵,结果不准,数据点的分布是某个圆心的半径,用欧式距离就不能比较了。
曼哈顿距离:适用于计算类似街区距离这样的实际问题。异常值对分类结果影响比欧式距离小。量纲不同时使用曼哈顿距离比欧式距离好。
总结
用距离度量相似度时,距离越小样本越相似;用相关系数时,相关系数越大样本越相似。
如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。
K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。
在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。