本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍超参数相关的概念。
超参数
通过前面的小节,我们知道了kNN算法中k这个参数值,在sklearn中k这个值被封装成了k_neighbors参数。在前面我们随机的指定参数k的值,究竟k的值为多少的时候,模型才是最好的呢?这就涉及到了机器学习领域非常重要的问题~超参数问题。
我们将这些在运行机器学习算法之前需要指定的参数,称之为超参数。kNN算法中的k就是kNN算法的超参数。和超参数相对应的概念就是模型参数,模型参数就是在模型训练过程中,机器学习算法根据训练样本学习到的参数。其实可以简单理解:
如何寻找好的超参数:
实现自己寻找最好k值
下面使用实验搜索的方式寻找kNN算法中超参数k。
需要注意:
如果我们得到最好的k的值为10的话,此时我们有必要对10以上的数再次进行搜索,这是因为通常来讲不同参数决定不同准确率,他们之间呈现一个连续的变化的。如果我们寻找的最好参数值,他在边界上时候,就意味着有更好的值在边界的外面,此时我们需要稍微拓展一下搜索的范围。
比如:此时得到最好的值为10的话,我可能需要将范围指定到[8-20],在进行搜索。看看有没有可能得到更好的超参数。
KNN其他的超参数
kNN中不仅有k这一个超参数,考不考虑距离也是kNN算法的超参数。
此时我们只考虑了离绿色节点最近的三个节点,可是忽略了最近三个节点相应的距离是多少,从图中可以看出,红色节点离绿色节点距离最近,虽然两个蓝色节点距离次之,但是还是距离绿色的节点比较远,所以此时是不是应该为红色节点票赋予更高的权重,这就是kNN另外一个用法,考虑了距离的权重。
通常而言,考虑距离的权重,是将距离的导数作为权重,即距离越小,他相应的倒数越大,权重值相应的也就最大。
此外,如果考虑了距离,还有另外一个优点,比如当我们使用普通的kNN算法的话,指定k = 3的时候,如果分类的样本数也有三类的话,就很有可能产生平票的情况。比如如下图所示:
距离绿色节点最近的三个节点分属于三个类别,如果使用最开始学习到的kNN算法的话,可能会随机选择一个节点作为结果,这其实是不合理的。但是此时如果将距离考虑进来之后,就能够非常好的解决平票的问题,因为此时我们比较的是离绿色节点最近的那个节点,因此此时红色节点获胜。在sklearn中需不需要考虑距离,通过weight参数指定:
因此我们同样可以使用上面寻找最好k值的方式来寻找,需不需要考虑距离权重这个超参数。
此时我们考虑了距离,继续谈谈什么是距离,在kNN算法中说的距离都是欧拉距离:
说到距离,还有其他的距离:
曼哈顿距离具体就是在x方向上的差值加上在y方向上的差值,图中的红蓝黄都是曼哈顿距离,他们是相等的,绿色的线对应的就是欧拉距离。对距离继续推导:
因此我们又有了新的超参数p。在sklearn中构造函数中有p参数值,在sklearn中他的默认值为2,相当于默认使用的是欧拉距离。
上面介绍的搜索方式就是网格搜索,这里还有一些问题,比如当我们使用"uniform"的时候,也就是不考虑距离权重的时候,不需要指定p的值。但是当我们指定weight为"distance"的时候,也就是考虑距离权重的时候,此时和p就会牵扯到p值的设定,因此超参数之间可能还会有相互依赖的关系。