【深度学习】KNN算法学习

一.定义

KNN(K-Nearest Neighbor)算法,意思是K个最近的邻居。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。

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

图中绿色的点就是我们要预测的那个点,假设K=3。

那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起),看看哪种类别多一些。

上图范围内,绿色方块对应的就是蓝三角。

二.KNN计算

1.计算距离(欧几里得距离或者马氏距离)

2.升序排列

对所有点的距离进行一个升序排列。

3.取前K个

 K的取值是十分重要的,应该合理科学结合有关数据去取K的值。

K太大:导致分类模糊

K太小:受个例影响,波动较大

4.加权平均去看那个点距离更近

三.KNN算法实战

病人的数据分析

 1.读取数据

import csv
import random
#读取数据
with open(".\Prostate_Cancer.csv","r") as f:
render = csv.DictReader(f)
datas = [row for row in render]

2.分组,打乱数据 (减小数据的偶然性,增加数据的随机性)

random.shuffle(datas)
n = len(datas)//3
test_data = datas[0:n]
train_data = datas[n:]
# print(train_data[e])
# print (train_data[e]["id"])

3.计算对应距离

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

#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个
result = res[0:K]


#4.加权平均
result = {"B":0,"M":0}


#4.1总距离
sum = 0
for 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"

4.预测结果和真实结果对比,计算准确率


for k in range(I,10):
    correct = 0
    for test in test_data:
        result = test["diagnosis_result"]
        result2 = knn(test,k)
        if result == result2:
            correct += 1
    print("k="+str(k)+"时,准确率{:.2f}%".format(100*correct/
    len(test_data)))

四.总结

KNN方法在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

KNN方法思路简单,易于理解,易于实现,无需估计参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值