1.K近邻算法原理

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

KNeighborsRegressor kneighborsregressor算法原理_数据

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

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

KNeighborsRegressor kneighborsregressor算法原理_KNeighborsRegressor_02

具体实现代码: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

KNeighborsRegressor kneighborsregressor算法原理_归一化_03

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_

结果截图

KNeighborsRegressor kneighborsregressor算法原理_归一化_04

2.knn的超参数 

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

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

KNeighborsRegressor kneighborsregressor算法原理_归一化_05

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

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

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

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

KNeighborsRegressor kneighborsregressor算法原理_归一化_06

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

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

KNeighborsRegressor kneighborsregressor算法原理_数据_07

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

 

KNeighborsRegressor kneighborsregressor算法原理_归一化_08

 

KNeighborsRegressor kneighborsregressor算法原理_KNeighborsRegressor_09

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

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

 

KNeighborsRegressor kneighborsregressor算法原理_权重_10

KNN算法的缺点:

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

2.高度数据相关

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

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