KNN的学习

KNN的学习
Knn是什么:

寻找周围数据,来判断该数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzRqOu2Z-1629888088594)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20210825151830310.png)]

算法原理,要注意K值得大小,注意K值得选取方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeypeWlG-1629888088601)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20210825152049756.png)]

理论总结:KNN算法是解决由周围相似数据推断该数据得方法,一个数据未知,但是我们可以通过它周围得数据进行对该数据得推断,主要用到升序排列,取前K个(但要注意K值大小),加权平均。

实战演练

进行癌症数据集得处理:

读取csv数据,进行数据得随机处理和分割,进行距离得初步测算

import csv
import random
#读取数据
with open('prostate_Cancer.csv','r') as file:
    reader =csv.DictReader(file)
    datas=[row for row in reader]
   # for row in reader:
   #  print(row)   比较喽得遍历,数据读取

   #分组,三分之一,三分之二
random.shuffle(datas)
n = len(datas)//3 #进行整除
#进行数据得分割,测试数据test_set和训练数据train_set
test_set=datas[0:n]
train_set=datas[n:]

#knn第一步测距离
def distance (d1,d2): #欧几里得距离
    res=0
    for key in ("radius","texture","perimeter","area","smoothness","compactness","symmetry","fractal_dimension"):
        res+=(float(d1[key])-float(d2[key]))**2     # 注意书写,float得作用域
    return res**0.5

进行knn得核心部分,升序排列,取前K个(但要注意K值大小),加权平均

K=5
def knn(data):
    #算距离
    res=[
        {"result":train['diagnosis_result'],"distance":distance(data,train)}
        for train in train_set
    ]
    # 排序
    res =sorted(res, key=lambda item:item['distance'])
    # 取前n个
    res2=res[0:K]
    # 加权
    result = {'B':0,'M':0}
    #总距离 ,不是特别懂
    sum = 0
    for r in res2:
        sum+=r['distance']
    for r in res2:
        result[r['result']]+=1-r['distance']/sum
    if result['B']>result['M']:
        return 'B'
    else:
        return 'M'

测试代码,转化为百分比

#测试阶段
correct=0
for test in test_set:
    result=test['diagnosis_result']
    result2=knn(test)

    if result==result2:
        correct+=1
print("准确率:{:.2f}%".format(100*correct/len(test_set)))
    correct+=1

print(“准确率:{:.2f}%”.format(100*correct/len(test_set)))








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值