算法学习之K邻近算法((k-Nearest Neighbor,KNN))

真实项目中需要解决的问题:

算出客户下单地点,最近的三个自助咖啡机。利用客户收件地址的经纬度,算出最近的三个点。解决这个问题,就需要KNN(K邻近算法)。分析这个只是简单的邻近求值算法步骤;

1、计算测试数据与各个训练数据之间的距离;

2、按照距离的递增关系进行排序;

3、选取距离最小的K个点;

4、确定前K个点所在类别的出现频率;

5、返回前K个点中出现频率最高的类别作为测试数据的预测分类。

其实,1、2、3步骤已经算出来三个自助咖啡机了,但是为了取到最优解,还要算出这三个点出货的频率,选取最高的作为设备最优的点。

KNN算法的优缺点:

优点:简单,易于理解,无需建模与训练,易于实现;适合对稀有事件进行分类;适合与多分类问题,例如根据基因特征来判断其功能分类,kNN比SVM的表现要好。

缺点:惰性算法,内存开销大,对测试样本分类时计算量大,性能较低;可解释性差,无法给出决策树那样的规则,样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少)。

注意点:

1、距离度量方法不同,找到的“近邻”也可能有显著区别,进而导致分类结果不同。通常是用欧式距离,即平方和开根号。在实际工作中使用余弦相似度来判断两个对象是不是邻居(余弦相似度,不是计算两个的距离;计算两个矢量的夹角,角度越小越接近;反之,相反)。

2、k在其中是一个相当重要的参数,k取值不同时,分类结果会有显著不同。训练时间复杂度为O(n);对数据没有假设,准确度高,对outlier不敏感;

算法需要解决的第一步:

如何判断两个点相邻呢?项目中,相邻是利用了经纬度。经度、维度就是对象模型的特征。所以KNN算法特征的选取对结果的影响很大。项目中利用了两个维度,算法可以拓展到3,4,5或者更多个维度。

KNN算法两项基本工作:分类和回归

分类就是编组,一个对象归为某一类;回归就是预测一个结果,预测未来要发送的事或将要改变的状态。

 

 

 

你可能感兴趣的:(算法学习,K邻近算法(KNN))