参考:
1.《统计学习方法》李航
2.https://baike.baidu.com/item/k%E8%BF%91%E9%82%BB%E7%AE%97%E6%B3%95/9512781?fr=aladdin
3.https://www.cnblogs.com/ybjourney/p/4702562.html
4.http://blog.csdn.net/shenbo2030/article/details/44219577
算法基本思想:物以类聚,人以群分
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最相邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类(可理解为:k个邻居对未知标签数据分类进行一个投票选择)。
算法举例:
根据电影中出现的接吻镜头和打斗镜头的次数来判断一个未知电影是爱情片还是动作片。
首先,根据打斗镜头和接吻镜头的次数(两个特征),将所有电影映射到坐标轴上:
然后,计算未知电影与样本集中其他电影的距离(这里,可以采用欧式距离):
此时,我们根据距离对所有电影进行排序(其实,这里的距离就类似于两部电影的相似度)。假定k=3,那么《He’s Not Really into Dudes》、《Beautiful Woman》和《California Man》分别被选定为未知电影的邻居(最为相近的3部电影)。
最后,我们统计邻居中的分类结果(邻居进行投票选择),并将最多的分类结果定为未知电影的分类结果。上述的3部电影均属于爱情片,因此未知电影被判断为一部爱情片。
算法的优缺点及适用范围:
优点:精度高、对异常值不敏感、无数据输入假定;
缺点:计算复杂度高、空间复杂度高。(PS:上述例子仅为最为简单二分类,所以是二维问题,一旦分类数目增加,相应的空间复杂度也会骤增;此外,对未知量进行分类,需要对其与所有训练样本的距离进行求解,对于大规模问题,计算复杂度高);
适应数据范围:数值型和标称型。
相关问题:
1.参数k的选择:参数k选择的太小或者太大,都会影响KNN结果的精度,一般k<20。
2.距离的选择:常用的两种距离分别为欧氏距离和曼哈顿距离。
3.分类判断决策:在邻居中进行投票选择无疑是最为简单,且最为直观的方法。但是,k个邻居中可能包含很多中不同的分类,而且通常情况下越是接近的邻居越更加可靠,所以我们也可以选择带权重的方法。
根据距离,为每一个邻居赋以不同的权值,距离越小的权值越大,距离越大的权值越小,然后再根据每一分类的加和做出分类判断。
算法流程:
KD树