关于一些数据挖掘算法的问题

最近我学习了 k 近邻和决策树,并且对它们之间的区别感到很好奇,例如,对于像分离目标函数“如果 x2>x1 则返回 1,否则返回 0”这样的任务,选择最近邻算法会更好,因为决策树会涉及到太多的分裂。所以我只是在考虑,在什么情况下,选择决策树会比 k 近邻更合适?

另一个问题是关于 K 近邻的,我理解当 K=1 时,它只是一个基线分类(将实例分类到其最近邻的类)。有没有人能提供一些想法,在什么样的分类任务中,一个 3-近邻肯定会优于一个 1-近邻分类器?

提前感谢!


回答:

k-NN vs. 决策树

我一直认为图片是获得算法直觉的最佳方式。你提出的目标函数会产生一个类似这样的数据集:

alt text

其中分离数据的函数是 x1 – x2 = 0。问题在于,通常情况下,决策树在节点上只有单变量函数,因此节点上的决策函数与轴对齐。我想象在这个数据集上学习的决策树会做类似这样的事情:

alt text

希望你能明白我的意思,显然,你可以通过在决策树中使用足够多的节点来近似最佳决策边界,但这意味着你会有过度拟合数据的风险。

实际上,我说的是决策树通常在节点上使用单变量函数,但还有另一种方法,在关于 多变量决策树 的 StackOverflow 问题中有所描述(我未能回答)。

顺便说一句,这种数据的最佳分类器是线性分类器,可能是 Logistic 回归,它可以找到最佳决策边界

k 在 k-NN 中的作用

我对 k 近邻中 k 的最佳描述是,k 的较高值会平滑决策边界。而且,更高的 k 并不总是比更低的 k 更好。

要考虑 k-NN,我们需要一个更复杂的数据集。对于 k=1,k-NN 模型可能会做出类似这样的决策:

alt text

如果我们增加 k 的值,决策将受到更大邻域的点的影响,因此决策边界将变得更平滑。特别是,那些小的红色和蓝色孤岛将被周围的数据点淹没:

alt text

使用较高的 k 是否更好取决于数据集上的噪声水平。那些小孤岛真的很重要,而我们学习了一个太简单的模型,不能很好地拟合数据,还是它们只是噪声,而我们避免了过度拟合?

一个实践角度

不幸的是,给定一些大型、复杂、真实世界的数据集,你可能没有一个很好的基础来决定哪个算法最有效(除非你借鉴了先前对相同或相似数据的研究)。大多数人所做的是仔细地将数据分割成训练集、参数调整集和测试集,然后运行他们能想到的尽可能多的算法。你可能还会发现,你的特定情况决定了算法必须具备的一些属性(快速、增量、概率等等)。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注