KNN算法
KNN(K-Nearest Neighbor)算法,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹了。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。通俗来讲,KNN算法原理就是当预测一个新的值x时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
图中绿色的点就是我们要预测的那个点,假设K=3,那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个例子中是蓝色三角形多一些,新来的绿色点就归类到蓝三角了。
但是,当K=5的时候,判定就变成不一样了。这次变成红圆多一些,所以新来的绿 点被归类成红圆。从这个例子中,我们就能看得出K的取值是很重要的。
KNN的优缺点
KNN算法优点
1.简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理
2.模型训练时间快
3.预测效果好
4.对异常值不敏感
KNN算法缺点
1.对内存的要求较高,因为该算法储存了所有训练数据
2.预测阶段可能很慢
4.对不相关的数据或功能规模不敏感
KNN算法实现步骤
1.计算距离(欧几里得距离或马氏距离)
2.升序排列
3.去前K个
4.加权平均
代码实现
#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