统计学习方法笔记(一)-k近邻算法原理及python实现
输入:训练集
$$T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}$$
其中,$x_i\in \mathcal {X} \subseteq \mathcal{R^n}$为实例的特征向量,$y_i \in \mathcal {Y}=\{c_1,c_2,...,c_K\}$为实例的类别,$i=1,2,...,N$;实例特征向量$x$;
输出:实例$x$所属的类$y$.
(1)根据给定的距离度量,在训练集$T$中找出与$x$最邻近的$k$个点,涵盖这$k$个点的$x$的邻域基座$N_k(x)$;
(2)在$N_k(x)$中根据分类决策规则(如多数表决)决定$x$的类别$y$:
$$y=\arg \max_{cj} \sum_{x_i \in N_k(x)} I(y_i=c_i),i=1,2,...,N;j=1,2,...,K$$
上式中,$I$为指数函数,即当$y_i=c_i$时$I$为1,否则$I$为0.
注:当$k=1$时,$k$近邻法又称为最近邻算法,它是$k$近邻算法的特殊情况。
import math from itertools import combinations #定义距离 def Distance(x,y,p=2): if len(x)==len(y) and len(x)>1: sum=0 for i in range(len(x)): sum+=math.pow(abs(x[i]-y[i]),p) return math.pow(sum,1/p) else: return 0