概念
“近朱者赤,近墨者黑”,由你的邻居来推断出你的类别。
从训练集中找到和测试数据最接近的k条记录,然后根据他们的主要分类来决定新数据的类别。该算法涉及3个主要因素:训练集、距离或相似的度量、k的大小。
步骤
- 算距离:给定测试对象,计算它与训练集中的每个对象的距离
- 找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
- 做分类:根据这k个近邻归属的主要类别,确定测试对象的分类
主要问题
k的大小
如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。
距离计算
- 欧式距离: d=(a−b)T(a−b)−−−−−−−−−−−−√
- 夹角余弦: cos(θ)=aTb|a||b|
分类策略
- 投票决定:少数服从多数,近邻中哪个类别的点最多就分为该类。
- 加权投票法:根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)
评价
优点
- 思想简单
- 适用非线性分类
- 特别适合于多分类问题
缺点
- 样本不均衡
- 计算量大,内存开销大
- 可解释性差