机器学习算法完整版见fenghaootong-github
KNN算法
kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
三要素:k值选择、距离矢量、分类决策规则
k值选择
- 应用中,k值一般取一个较小的数值
如果k=3,在已有的分类样本上,这时来了一个新样本,那么这个新样本所属的类就是在最临近的三个样本中占较大比重的那一类。
距离矢量
- 特征空间中两个实例点的距离是两个实例点相似程度的反映
- K近邻模型的特征空间的距离一般为欧式距离,也可以是 L p L_p Lp距离:
L p ( x i ⃗ , x j ⃗ ) = ( ∑ l = 1 n ∣ x i ( l ) − x i ( l ) ∣ p ) 1 / p L_p(\vec{x_i},\vec{x_j}) = (\sum_{l=1}^n|x_i^{(l)}-x_i^{(l)}|^p)^{1/p} Lp(xi,xj)=(∑l=1n∣xi(l)−xi(l)∣p)1/p
$\vec{x_i},\vec{x_j} \in \chi = \mathbb{R}^n $
x
i
⃗
=
(
x
i
(
1
)
,
x
i
(
2
)
,
.
.
.
,
x
i
(
n
)
)
T
\vec{x_i} = (x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T
xi=(xi(1),xi(2),...,xi(n))T
x
j
⃗
=
(
x
j
(
1
)
,
x
j
(
2
)
,
.
.
.
,
x
j
(
n
)
)
T
\vec{x_j} = (x_j^{(1)},x_j^{(2)},...,x_j^{(n)})^T
xj=(xj(1),xj(2),...,xj(n))T
p
≥
1
p \ge 1
p≥1
- 当p=2时,为欧式距离: L 2 ( x i ⃗ , x j ⃗ ) = ( ∑ l = 1 n ∣ x i ( l ) − x i ( l ) ∣ 2 ) 1 / 2 L_2(\vec{x_i},\vec{x_j}) = (\sum_{l=1}^n|x_i^{(l)}-x_i^{(l)}|^2)^{1/2} L2(xi,xj)=(∑l=1n∣xi(l)−xi(l)∣2)1/2
- 当p=1时,为曼哈顿距离: L 1 ( x i ⃗ , x j ⃗ ) = ∑ l = 1 n ∣ x i ( l ) − x i ( l ) ∣ L_1(\vec{x_i},\vec{x_j}) = \sum_{l=1}^n|x_i^{(l)}-x_i^{(l)}| L1(xi,xj)=∑l=1n∣xi(l)−xi(l)∣
- 当p= ∞ \infty ∞无穷大时,为各维度距离中的最大值: L ∞ ( x i ⃗ , x j ⃗ ) = m a x l ∣ x i ( l ) − x i ( l ) ∣ L_\infty(\vec{x_i},\vec{x_j}) = max_l|x_i^{(l)}-x_i^{(l)}| L∞(xi,xj)=maxl∣xi(l)−xi(l)∣
分类决策规则
- 误分类率
1 k ∑ x i ⃗ ∈ N k ( x ⃗ ) I ( y i ≠ c j ) = 1 − 1 k ∑ x i ⃗ ∈ N k ( x ⃗ ) I ( y i = c j ) \frac{1}{k}\sum_{\vec{x_i}\in N_k(\vec{x})}I(y_i\ne c_j)=1-\frac{1}{k}\sum_{\vec{x_i}\in N_k(\vec{x})}I(y_i = c_j) k1∑xi∈Nk(x)I(yi=cj)=1−k1∑xi∈Nk(x)I(yi=cj)
c j c_j cj表示类别
- 多数表决
y = c j = a r g m a x c j ∑ x i ‾ ∈ N k ( x ‾ ) I ( y i ≠ c j ) , i = 1 , 2 , 3 , . . . , N ; j = 1 , 2 , 3 , . . . , K y = c_j = arg max_{c_j} \sum_{\overline{x_i}\in N_k(\overline{x})}I(y_i\ne c_j), i = 1,2,3,...,N; j = 1,2,3,...,K y=cj=argmaxcj∑xi∈Nk(x)I(yi=cj),i=1,2,3,...,N;j=1,2,3,...,K
**KNN算法经典实例 **