KNN学习笔记

本文主要内容:

1.认识什么是knn算法

2.算法原理

3.实战应用

1.认识什么是knn算法:

 2.算法原理:

(1)通用步骤:

        a.计算距离(常用欧几里得距离或着马氏距离)

                欧几里得公式:

        

        b.升序排列

        c.取前k个数

                k的选取:

                        k太大会导致分类模糊

                        k太小会受个例影响,波动较大

                如何选取k:

                        可以依靠经验

                        均方根误差

           找到准确性峰值的点作为k的取值 

        d.加权平均 

3.实战应用

用一个癌症检测数据集为例(数据集较小)

(1)打开数据

import csv
import random

#读取数据
with open('Prostate_Cancer.csv','r') as file:
    reader=csv.DictReader(file)
    datas=[row for row in reader]

数据集链接:链接:https://pan.baidu.com/s/1w8cyvknAazrAYnAXdvtozw
提取码:zxmt

(2)分组(数据集的三分之二作为训练集,三分之一作为测试集)

random.shuffle(datas)
n = len(datas)//3

test_set=datas[0:n]
train_set= datas[n:]

(3)计算距离(测试数据与所有训练数据之间的距离)

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

    return res**0.5


K=5
def knn(data):
    #1.距离
    res=[
        {"result" : train['diagnosis_result'],"distance":distance(data,train)}
        for train in train_set
    ]

(4)升序排列

res = sorted(res,key=lambda item:item['distance'])

(5)取前k个数

res2 =res[0:K]

(6)加权平均(距离小的权重大,距离大的权重小),先测得总距离,利用1-(该测试数据的距离/总距离)作为该测试数据的权重

    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'

(7)测试

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)))

(8)结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值