Nearest Neighbor Classifier
让临近的几个样本数据的类别作为当前目标数据的类别。
学习类型:
- Lazy learning,没有显示训练过程;
- Supervised learning
设定
- Input: $ \boldsymbol x \in R^D $
- Output: $ \boldsymbol y\in [C] $
- Learning: $\boldsymbol y=f(x)$
- Training data: $D^{train}={ (x_1,y_1),(x_2,y_2)\dots (x_N,y_N) } $
- Test Data: $D^{test}={ (x_1,y_1),(x_2,y_2)\dots (x_m,,y_m) } $
- $D^{train}\cap D^{test}=\phi$
过程
- $nn(x)=arg min_{n\in[N]}distant(\boldsymbol x,\boldsymbol x_{n})$
- $knn(x)=\{ nn_1(x),nn_2(x),\dots,nn_k(x) \}$ 不包含前一个点的最近点
- $ v_c=\sum_{n\in knn(x)}I(y_n==c), \forall c\in C $ 计算每个分类在k个训练数据中有多少个
- $y=argmax_{c\in C} v_c$ 标出数量最多的那一类
- 计算距离可以用欧拉距离等。
调参
K是要调整的参数
用development dataset选出最好的K值
没有development dataset,则用cross validaition的方法(把train set 分成N份,每次取其中一份作为development set,每个k训练出来之后,在那一份上求accuracy,对N次的情况取平均值,比较不同K值的在cross validate上的mean accuracy, 取最大)