一.概述
1.概念:
"K-最近邻算法"(K-Nearest Neighbor;KNN)是1种常用的监督学习分类算法,属于"基于实例的学习"(Instance-Based Learning)和
"懒惰学习"(Lazy Learning).该算法对每个点都使用距该点最近的K个点(称为"K个最近邻")的类别来表示该点的类别
2.步骤:
①选择参数K
②计算未知实例到所有已知实例的距离
③选择K个最近邻
④根据少数服从多数的原则,将未知实例归类为K个最近邻中最多数的类别
3.注意事项
(1)参数K的选择:
KNN的结果对K的选择十分敏感,K过小时容易被噪音干扰;过大时会使较远的实例产生影响,出现错误.流行的选择方法包括交叉验证/贝叶斯/bootstrap
(2)距离的衡量:
"欧几里得距离"(Euclidean Distance)
"余弦值"(Cosine)
"相关度"(Correlation)
"曼哈顿距离"(Manhattan Distance)
4.优缺点
(1)优点:
①易于理解且容易实现
②K的选择合适时,对异常点不敏感,健壮性较好
③没有显式的训练(即"懒惰学习"),因而训练时间为0
④适合多分类问题
(2)缺点:
①空间复杂度高且计算量大
②属于懒惰学习,基本上不学习,导致预测时速度慢
③样本数量不平衡时,会偏向实例数量较多的类别
④对训练数据依赖度大且容错性差
(3)改进:
根据距离给实例加上权重,如1/distance
二.实例