个人感觉k近邻应该是所有统计学习方法里最好理解的了,通俗来说就是在数据集中找距离测试数据x最近的k个数据样本,如果A类的数量大于B类的数量,则将测试数据x归为A类,书中也仅用了不到10页来论述这个理论,除基本k近邻理论,还有kd树的阐述。
k近邻法
- 输入:训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中, x i ∈ X ⊆ R n x_i \in X\sube \R^n xi∈X⊆Rn为实例特征向量, y i ∈ Y ⊆ { c 1 , c 2 , . . . , c K } y_i\in Y\sube \{c_1,c_2,...,c_K\} yi∈Y⊆{c1,c2,...,cK}为实例的类别;实例 x x x
- 输出:实例 x x x的类别
(1) 计算距离,在 T T T中找出与 x x x最近邻的k个点,以及包含着k个点的 x x x的邻域 N k ( x ) N_k(x) Nk(x);
(2) 在 N k ( x ) N_k(x) Nk(x)中根据分类决策规则(如少数服从多数)决定 x x x的类别 y y y;
1、常见的距离度量方法都有哪些?
- L p L_p Lp距离定义为: L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_p(x_i,x_j)=\Big(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^p\Big)^{\frac{1}{p}} Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)p1
- 曼哈顿距离,此时
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)=\Big(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|\Big) L1(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣) - 欧氏距离,此时
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)=\Big(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^2\Big)^{\frac{1}{2}} L2(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣2)21
2、影响k近邻法的三个要素是什么?
- 距离度量方法
- k值的选择:一般取一个较小的数值,通常采用交叉验证法来选取最优的k值。
- 当选择的k值较小时,近似误差(approximation error)会减小,估计误差(estimation error)会变大,k值的减小意味着整体模型变得复杂,容易发生过拟合。
- k值的增大与上述正好相反,估计误差变小,同时近似误差变大,意味着模型变得太简单。当模型过于简单,会忽略掉数据中大量有用的信息。
- 分类决策规则:一般采用多数表决规则。
3、给定一个二维空间的数据集: T = { ( 2 , 3 ) T , ( 5 , 4 ) T , ( 9 , 6 ) T , ( 4 , 7 ) T , ( 8 , 1 ) T , ( 7 , 2 ) T } T=\{(2,3)^T,(5,4)^T,(9,6)^T,(4,7)^T,(8,1)^T,(7,2)^T\} T={(2,3)T,(5,4)T,(9,6)T,(4,7)T,(8,1)T,(7,2)T},构造一个平衡kd树?
假设每个数据样本对应
x
(
1
)
,
x
(
2
)
x^{(1)},x^{(2)}
x(1),x(2)两个坐标轴,
(1) 先选择
x
(
1
)
x^{(1)}
x(1)轴的中位数建立超平面,将样本空间分成两个子空间
a
,
b
a,b
a,b;
(2) 针对子空间
a
a
a,选择子空间中样本的
x
(
2
)
x^{(2)}
x(2)轴的中位数建立超平面,进一步划分子空间;针对子空间
b
b
b,选择子空间中样本的
x
(
2
)
x^{(2)}
x(2)轴的中位数建立超平面,进一步划分子空间;
(3) 递归调用(1)、(2),直到每个子空间中均无样本点为止,即所有样本点都在分割超平面上。