KNN算法

KNN(K最近邻)是一种基于实例的学习算法,通过计算新样本与训练集中样本的距离来预测其类别。距离通常使用欧式距离或马氏距离。在实现过程中,包括升序排列、选取前K个最近邻和加权平均等步骤。K的选择直接影响分类准确性,过大过小都会带来问题。KNN算法简单快速,但对内存要求高且预测阶段可能较慢,对不相关特征不敏感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是KNN

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

二、KNN中的距离 

KNN属于距离类模型,原因在于它的样本之间的远近是靠数据距离来衡量的。KNN中使用的是欧氏距离和马氏距离。

欧式距离二维空间的公式为:

使用python代码实现


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

 三、实现步骤        

1.升序排列

2.取前k个

k的取值太大会导致分类模糊

k的取值太小会受个例影响,波动较大结果不准确

3.加权平均

代码实现

    #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

四、KNN的优缺点

KNN算法优点

 1.简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理

 2.模型训练时间快

 3.预测效果好

 4.对异常值不敏感

KNN算法缺点

 1.对内存的要求较高,因为该算法储存了所有训练数据

 2.预测阶段可能很慢

 4.对不相关的数据或功能规模不敏感

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值