- 什么是KNN算法?
答:所谓的KNN算法就是:每个样本都可以用它最接近的k个邻居来代表。
例如:我们要判断绿色的点属于哪一类的时候
当k=3的时候,距离它最近的三个点里面有红色点1个,蓝色点2个,所以他属于蓝色点
当k=5的时候,距离它最近的五个点里面有红色点3个,蓝色点2个,所以他属于红色点
-
但是我们用少数服从多数的投票方法真的合理吗?
答:不合理,我们要根据情况来进行选择
(1)在进行分类预测时,一般采用多数表决(即:每一个点的权重都为1)
(2)在进行回归预测的时候,一般采用加权平均值法 -
怎么判断什么时候权重值为1,什么时候不为1,以及权重的计算?
答:我们知道在KNN算法中,KNeighborsClassifier有一个参数叫做weights
weights=‘uniform’的时候,说明每个样本的权重是一样的
weights=‘distance’的时候,则需要计算每一个样本所占的权重
我们不妨取一组二维的数据,A,B,C是一类,D,E是一类
我们知道,二维的时候,我们所谓的距离是欧氏距离,但是数据是n维的时候,关于距离的计算用的就是明可夫斯基距离:
明可夫斯基距离公式:
这个时候就引入了一个新的超参数p,当weights=‘distance’的时候,才会有超参数,而超参数p对我们的测试结果是有影响的,所以我们需要寻找到最优的超参数p
- 参数k和超参数p的查找
我们通过网格搜索的方式来实现简单的找出k和p
from datetime import datetime
from sklearn.model_selection import GridSearchCV
from sklearn import datasets
from sklearn.model_selection