关于KNN算法的中k的取值的问题
来源:4-5 超参数
宝慕林0794768
2021-03-26
我从网上自己找的西瓜书的模拟数据, 尝试着自己去找出合适的K值, 数据集有两种分类, 当k为偶数的时候时候,考虑了距离的权重, 之后把k从1到10 进行遍历, 输出结果很诧异, k= 1, 2, 3,4的时候 准确率都是1, 那么这种情况下,我们k值应 给如何去选取呢??? k=1 可以考虑,,会有过拟合, 那k=2 可以吗? 应该如何去理解呢??? 我们又该如何去理解呢???
另外k的遍历范围是多少合适? 从0开始,上限是数据集数量的平方根????
另外结果出现这个情况,是不是和我自己找的数据有关???
1回答
-
liuyubobobo
2021-03-26
首先,这说明你的数据太简单了。轻松达到 100%。在这种情况下,请考虑一下,是否有可能你的数据根本不需要使用机器学习的算法,就能很好地作区分。
其次,如果一定要使用 kNN,应该使用较大的 k。因为 k 越小,越容易过拟合;k 越大,越不容易过拟合。这一点,在课程后续介绍过拟合的时候会介绍。整体,让数据不过拟合,是非常重要的,甚至比几个点的准确率还重要。
你给出的 k 的取值范围,从数学的角度,是一个很好的取值范围(2 - 数据集的平方根)。
但是很多时候,k 的取值范围,也和具体业务场景相关。比如一个正常人认识的人的数量不会超过 100 人,那么在对人做分类的时候,可能最多看 100 个人就够了。哪怕你的数据集中有 1 个亿的数据量。
在很多时候,专有的领域有这样的先验知识可以使用。这也是机器学习在解决领域问题的时候,离不开领域专家的原因。(比如机器学习在金融领域的应用,大量依赖已有的金融指标。)
另外,k 从小到大的过程,肯定是从过拟合,到欠拟合的过程。所以,也可以不指定 k 的范围,k 从小到大,计算验证数据集的准确率,这个准确率肯定是一个从逐渐下降的过程(从过拟合,到欠拟合)。可以去观察这条曲线,找到这条曲线最合适的点(比如准确率在 75% 以上的最大的 k)。
这种绘制出一条曲线,曲线中找到一个合适的平衡点,也是机器学习中常用的一种参数选择的方式。这个课程中后续还会介绍一些这类曲线。但这种方式在更复杂的算法中,应用的更多。(比如神经网络,但这个课程不涉及神经网络。)
继续加油!:)
432023-10-28
相似问题