第一篇:1.1-KNN的学习记录—K近邻算法原理和超参数(KNeighborsClassifier)

本文是学习记录,介绍了K近邻算法原理,通过欧拉距离公式计算点间距离进行分类预测。还阐述了knn的常用超参数,如weights、P等,利用网格搜索找最优超参数。同时指出KNN算法存在效率低下、高度数据相关等缺点,后续将复习数据归一化内容。

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

本文为学习记录,写的不好请大家指正见谅,互相学习,也为自己巩固学习成果包括后续复习所用!

1.K近邻算法原理

      这个是网上找的图,自己就不制作图了,找了一张只有两个特征的图,简单明了 

 如图所示,横纵坐标分别表示时间和肿瘤大小两个特征值,绿色点为我们需要作出预测分类的值,当我们的k为3的时候(k为超参数,后面会提到),即表示,根据绿色点,找出3个离绿色点最近距离的三个点,如图所示,三个点都为蓝色,即将我们的绿色点分类为恶性肿瘤。

 下面我们来看下具体实现的原理
我们这里使用欧拉距离公式  ,即两个点的距离为他每个轴坐标的距离差的平方求和之后再开方,即:

具体实现代码:X_train 为我们训练集,求出的distances就是我们所有点的距离的集合


from math import sqrt
distances = []
for x_train in X_train:
    distances = [sqrt(np.sum((x_train - x)**2)) for x_train in X_train]

distances:

[4.812566907609877,
 5.229270827235305,
 6.749798999160064,
 4.6986266144110695,
 5.83460014556857,
 1.4900114024329525,
 2.354574897431513,
 1.3761132675144652,
 0.3064319992975,
 2.5786840957478887]

接下去我们对distances进行处理,由于用的jupyter,我就直接截图了,根据截图,我们得出x属于类别1

scikit-learn 中的knn,k与上文截图中一样,取3

from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train,y_train)
y_=knn.predict(x.reshape(1,2))
y_

结果截图

2.knn的超参数 

上文中我们提到n_neighbors为我们的超参数,但是knn中超参数不止一个,我们列出3个常用的超参数并进行说明

这里有个比较重要的就是weights这个超参数,代表距离的权重,有什么意义呢,我们来看一下下面这图 

根据我们上面如果只采用k为3作为我们的超参数,距离最近的三个点,蓝色点2个,红色点一个,所以系统用将绿色点预测为蓝色点,但是我们可以看到,绿色距离红色是最近的。距离蓝色点其实是偏远的。所以这里我们需要考虑距离的权重,也就是我们的超参数weights。

当weights=‘uniform’的时候代表不考虑权重,当weights=‘distance’的时候代表考虑权重, 

当我们提到距离的时候,就要提到另一个参数,也就是P参数

我们先来看看明可夫斯基距离公式

当我们的p=2的时候,我们可以看出上述就是我们的欧拉距离公式

再看看源码说明中 可知knn默认采用的是欧拉距离。也就是p=2,metric=‘minkowski’

我们利用网格搜索去代码实现来找出我们最优的超参数

 

 

上面部分基本实现了knn的原理和常用超参数说明,更多超参数大家可自行查阅文档,比如n_jobs代表使用的cpu核数等等

下面是距离公式的扩展,一并展示,有时间我还是要更多的自学的,

 

KNN算法的缺点:

1.效率低下,当有m个样本n个特征的时候,算法的时间复杂度为O(m*n),

2.高度数据相关

3.预测的结果不具有解释性

4,维度灾难:看似相邻的两个样本随着维度增加,距离也会越来越大,解决方法:降维

注释说明:以上截图均来自慕课网liuyubobo老师的课件,代码部分包括代码截图为自己手敲 ,也当做自己学习练习巩固使用。

下一篇:继续复习相关数据归一化的内容,数据归一化对我们的数据有很重要的作用,所以需要明白其中的原理和数学推导

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值