KNN聚类的原理和实现

本文介绍了KNN(K-Nearest Neighbors)聚类算法的基本原理,包括计算距离的方法如欧几里得距离和马氏距离,以及如何根据距离对样本进行排序。讨论了k值的选择对分类结果的影响,并分享了实战应用中数据集的获取、数据分组及knn算法的实现。同时,提供了相关csv库函数的学习资源。
摘要由CSDN通过智能技术生成

1.认识KNN

一般来说,物以类聚人以群分,近朱者赤近墨者黑。
knn近邻算法的原理也是这样:
给定一个训练数据集,对新的的输入实例,在训练数据集中找到与该实例最邻近的的K个实例,这K个实例的多数属于某个类,就把该实例分为这个类。

在这里插入图片描述
k取值若为实线,则红三角数目多于蓝矩形数目,绿色待分类点即属于红三角
k取值若为虚线,则蓝矩形数目多于红三角数目,绿色待分类点即属于蓝矩形

2.算法原理

  • 计算距离(常用欧几里得距离或马氏距离)
  • 升序降序
  • 取前k个
  • 加权平均

1)计算距离(常用欧几里得距离或马氏距离)

计算样本之间的距离一般选择欧式距离。
在这里插入图片描述
有关欧式距离与马氏距离详解:https://blog.csdn.net/bluesliuf/article/details/88862918

2)升序降序

一般来说,当距离取定后,应对样本进行排序。
距离最近的排前边,距离最远的排后边 。在这里插入图片描述

k的取值

k的取值大小对分类结果有着很大的影响

  • k的选取
    k太大:导致分类模糊
    k太小:受个例影响,波动较大

  • 如何选取k
    经验
    均方根误差

3.实战应用

1)数据集

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

2)读取数据后分组(测试组和训练组)

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

#乱序
random.shuffle(datas)
n = len(datas)//3
#分组
test_set = datas[0:n]
train_set = datas[n:]

3)knn算法

def distance(d1,d2):
    res = 0

    for key in ("radius","texture",    "perimeter","area","smoothness
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值