深度学习—KNN算法

KNN算法简介

KNN算法,即k近邻法(k-nearest neighbor,k-NN)是一种基本的分类和回归方法,是监督学习方法里的一种常用方法。k近邻算法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例类别,通过多数表决等方式进行预测。

KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。

图中绿色的点就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个例子中是蓝色三角形多一些,新来的绿色点就归类到蓝三角了。
 

但是,当K=5的时候,判定就变成不一样了。这次变成红圆多一些,所以新来的绿点被归类成红圆。从这个例子中,我们就能看得出K的取值是很重要的。

KNN实现原理  

  1. 计算想要分类的点到其余点的距离
  2. 按距离升序排列,并选出前K(KNN的K)个点,也就是距离样本点最近的K个点
        K的取值
             K太大:导致分类模糊
             K太小:受个例影响,波动较大
  3. 加权平均,得到答案

 KNN实战应用

         KNN算法求病人癌症检测的正确率

​​​​​​​ 

import csv
import random# 读取数据
with open(".\Prostate_Cancer.csv", "r") as f:render = csv.DictReader(f)datas = [row for row in render]# 分组,打乱数据
random.shuffle(datas)
n = len(datas) // 3test_data = datas[0:n]
train_data = datas[n:]# print (train_data[0])
# print (train_data[0]["id"])# 计算对应的距离
def distance(x, y):res = 0for k in ("radius", "texture", "perimeter", "area", "smoothness", "compactness", "symmetry", "fractal_dimension"):res += (float(x[k]) - float(y[k])) ** 2return res ** 0.5# K=6
def knn(data, K):# 1. 计算距离res = [{"result": train["diagnosis_result"], "distance": distance(data, train)}for train in train_data]# 2. 排序sorted(res, key=lambda x: x["distance"])# print(res)# 3. 取前K个res2 = res[0:K]# 4. 加权平均result = {"B": 0, "M": 0}# 4.1 总距离sum = 0for r in res2:sum += r["distance"]# 4.2 计算权重for r in res2:result[r['result']] += 1 - r["distance"] / sum# 4.3 得出结果if result['B'] > result['M']:return "B"else:return "M"# print(distance(train_data[0],train_data[1]))
# 预测结果和真实结果对比,计算准确率
for k in range(1, 11):correct = 0for test in test_data:result = test["diagnosis_result"]result2 = knn(test, k)if result == result2:correct += 1print("k=" + str(k) + "时,准确率{:.2f}%".format(100 * correct / len(test_data)))


 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部