一、什么是KNN
KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类型来判断x属于哪个类别。
二、KNN中的距离
KNN属于距离类模型,原因在于它的样本之间的远近是靠数据距离来衡量的。KNN中使用的是欧氏距离和马氏距离。
欧式距离二维空间的公式为:
使用python代码实现
def distance(x, y):
res = 0
for k in ("radius","texture","perimeter","area","smoothness","compactness","symmetry","fractal_dimension"):
res += (float(x[k]) - float(y[k]))**2
return res ** 0.5
三、实现步骤
1.升序排列
2.取前k个
k的取值太大会导致分类模糊
k的取值太小会受个例影响,波动较大结果不准确
3.加权平均
代码实现
#1.升序排列
sorted(upresult,key=lambda x:x["distance"])
# 2. 取前K个
forresult = upresult[0:k]
# 3. 加权平均
everresult = {"B":0,"M":0}
# 3.1 计算权重
for r in forresult :
result[r['result']] += 1-r["distance"]/sum
四、KNN的优缺点
KNN算法优点
1.简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理
2.模型训练时间快
3.预测效果好
4.对异常值不敏感
KNN算法缺点
1.对内存的要求较高,因为该算法储存了所有训练数据
2.预测阶段可能很慢
4.对不相关的数据或功能规模不敏感