[机器学习算法系列] KNN (k-近邻算法)
[机器学习算法系列] KNN (K-Nearest Neighbor, k-近邻算法)
算法分类
- 监督学习
目的
- 对数据进行分类
- eg. 下图中蓝色点是属于绿色阵营还是红色阵营?

优缺点分析
优点:
- 精度高
- 对异常值不敏感
缺点 :
- 计算复杂度十分高
算法核心
-
依靠欧式距离公式来计算距离,可以应用到多维
d=sqrt( ∑(xi1-xi2)^2 ) 这里i=1,2..n
-
k 的意义: 取离目标点最近的k个点
KNN 流程
- 数据准备:
- 样本点集
- 样本类别
- 算法过程:
- 为每个预测点计算与所有样本点之间的距离 (这就是为什么算法复杂度高, 数据不可复用,没有训练意义)
- 取离目标点最近的k个样本点,选择k中数量最多的类型作为目标点的类别
伪代码
/**
parameters:
inputVec: 输入向量
dataSet : 原始数据集(基本元素为样本向量)
dataClassVect: 样本类别向量
k : 取最近的k个点
return :
类别
*/
classify(inputVec, dataSet, dataClassVect, k):
//key->距离 value->类别
distances = {}
for i=0 to dataSet.len:
distances.add(calculateDistance(intputVec, data), dataClassVect[i])
distances.sortByKey_asc()
//key->类别 value->出现次数
classCount = {}
for i=0 to k:
classCount[distances[i]]++
classCount.sortByValue_desc()
return classCount.first().key()

浙公网安备 33010602011771号