这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
算法概述
k-近邻算法就是采用测量不同特征值之间的距离进行分类的方法。它的思路是:如果一个样本在特征空间中的k个最相似(邻近)的样本中大多数属于一个类别,则该样本也属于这个类别。在K-近邻算法当中,所选择的邻近点都已经是正确分类的对象。我们只依据k个(通常不大于20)邻近样本的类别来决定待分样本的类别。
算法流程
k-近邻算法的一般流程是:
- 收集数据
- 计算待测数据与训练数据之间的距离(一般采用欧式距离)
- 将计算的距离排序
- 找出距离最小的k个值
- 计算找出值中每个类别的频次
- 返回最高频次的类别
算法特点
优点:
- 原理简单,易于理解,没有高深的数学理论;
- 没有假定条件,适用范围广;
- 受异常值的影响小。
缺点:
- 对计算机的运算速度与存储空间要求高,尤其在数据量很大的情况下;
- 样本不平衡问题。某个标签的数量特别大的时候,会造成偏差;然而现实中,某些数据难以获取,它的量确实比较小的。
k的选择
K值是可以直接影响预测效果。关于如何选择合适的K,没有固定的计算方法,而是依赖经验,比如,可以利用交叉验证法来得到最优的K值。
距离的计算
度量距离值的方法有很多,包括曼哈顿距离、马氏距离、切比雪夫距离等等,一般情况都会采用经典的欧氏距离,它的计算量小,容易解释,也足够准确。
问题改进
(一)、加权距离
找出k个近邻点之后,直接投票决策未必准确。这样就等同于认为各近邻点对待测点有一样的影响力。但是一般来说,待测点应该更“像”离它近的样本点,更“不像”较远的样本点。这就需要对距离值进一步分析了,给近点加大权重,同时减少远点的决策影响力。下面介绍两种度量权重的方法。
- 反函数
- 高斯函数