1 核心思想
K近邻学习(K Nearest Neighbor Learning,KNN)是一种常用的监督学习方法。其核心思想为:给定测试样本,按照某种距离计算规则从训练集中找到和测试集距离最近的k个样本,然后根据基于这最近的k个邻居的信息进行预测。如果是分类任务,则采用对k个邻居的类别进行“投票”,选取出现次数最多的类别作为测试样本的类别;若是回归任务,则采用对k个邻居的实值标记的输出取平均作为预测结果。还可以基于距离远近采用加权平均或加权投票,得到最终的预测结果。
KNN相比于前面学习的机器学习算法而言,是一种典型的 lazy learning,因为其只是记录了所有的训练样本,直到某一测试样本到来时,才去计算距离进行预测。而前面学习的大部分的机器学习算法,都是在拿到训练集样本之后随即开始训练过程得到模型的参数,称之为 eager learning。
KNN中的距离计算方式和 K 的取值可以被认为成是两个可以调节的超参数。
2 错误率
以 K = 1时的最近邻为例,计算KNN算法的错误率。
对于最近邻算法,只有当与测试样本距离最近的训练样本的类别与测试样本的实际类别不符时才会造成预测错误。即
P ( e r r ) = 1 − ∑ c ∈ y p ( c ∣ z ) p ( c ∣ x ) ≈ 1 − ∑ c ∈ y p ( c ∣ x ) 2 ≤ 1 − p ( c ∗ ∣ x ) = ( 1 − p ( c ∗ ∣ x ) ) ( 1 + p ( c ∗ ∣ x ) ) ≤ 2 ( 1 − p ( c ∗ ∣ x ) ) P(err) = 1 - \sum_{c \in y}p(c|z)p(c|x) \\ \approx 1 - \sum_{c \in y}p(c|x)^2 \\ \leq 1 - p(c^* | x) \\ = (1-p(c^*|x))(1+p(c^*|x)) \\ \leq 2(1-p(c^*|x)) P(err)=1−c∈y∑p(c∣z)p(c∣x)≈1−c∈y∑p(c∣x)2≤1−p(c∗∣x)=(1−p(c∗∣x))(1+p(c∗∣x))≤2(1−p(c∗∣x))
虽然KNN算法思想简单,但是其分类错误率不会超过最优贝叶斯分类器的两倍。
才疏学浅,若有错误,欢迎批评指正!