在哪些情况下使用决策树更好,而在其他情况下使用 KNN?
为什么在某些情况下使用其中之一?而另一个在不同的情况下?(通过查看其功能,而不是算法)
有人对此有一些解释或参考吗?
在哪些情况下使用决策树更好,而在其他情况下使用 KNN?
为什么在某些情况下使用其中之一?而另一个在不同的情况下?(通过查看其功能,而不是算法)
有人对此有一些解释或参考吗?
它们服务于不同的目的。
KNN 是无监督的,决策树 (DT) 有监督。(KNN 是有监督学习,而 K-means 是无监督学习,我认为这个答案会引起一些混乱。) KNN 用于聚类,DT 用于分类。(两者都用于分类。)
KNN 确定邻域,因此必须有一个距离度量。这意味着所有特征都必须是数字的。距离度量可能会受到属性之间的不同尺度以及高维空间的影响。
另一方面,DT 预测给定输入向量的类别。属性可以是数字的或名义的。
所以,如果你想找到类似的例子,你可以使用 KNN。如果要对示例进行分类,可以使用 DT。
决策树、贝叶斯、反向传播、支持向量机等分类器属于“渴望学习者”的范畴,因为它们首先在训练数据集上构建分类模型,然后才能对来自测试数据集的 [unseen] 观察结果进行实际分类。学习模型现在“渴望”(阅读饥饿)来分类以前看不见的观察,因此得名。
然而,基于 KNN 的分类器不构建任何分类模型。它直接从训练实例(观察)中学习。只有在给定测试观察以进行分类后,它才开始处理数据。因此,KNN 属于“懒惰学习者”方法的范畴。
基于上述基本差异,我们可以得出以下结论:-
由于 KNN 执行现场学习,它需要频繁的数据库查找,因此计算成本可能很高。决策树分类器不需要这样的查找,因为它已经准备好内存中的分类模型。
由于 KNN 执行基于实例的学习,因此经过良好调整的 K 可以对具有任意复杂决策边界的复杂决策空间进行建模,而决策树等其他“急切”的学习器不容易对其建模。
“渴望”学习者分批工作,一次对一组训练观察进行建模。所以它们不适合增量学习。但是 KNN 自然支持增量学习(数据流),因为它是基于实例的学习器。
此外,KNN 分类器提供的测试错误率更接近于贝叶斯分类器(黄金标准)。正如ISLR中所引用的:
贝叶斯错误率类似于不可约错误
来自 Sebastian Raschka 的Python 机器学习:
这种基于记忆的方法 [KNN] 的主要优点是分类器会在我们收集新的训练数据时立即适应。然而,不利的一面是,在最坏的情况下,对新样本进行分类的计算复杂度随着训练数据集中的样本数量线性增长——除非数据集的维度(特征)非常少,并且算法已经使用高效的数据实现KD树等结构。JH 弗里德曼、JL 宾利和 RA 芬克尔。一种在对数预期时间内找到最佳匹配的算法。ACM Transactions on Mathematical Software (TOMS), 3(3):209–226, 1977。此外,我们不能丢弃训练样本,因为不涉及训练步骤。因此,如果我们使用大型数据集,存储空间可能会成为挑战。
然而,决策树可以快速分类新示例。您只是在运行一系列布尔比较。
我要补充一点,决策树可用于分类和回归任务。另一方面,DT通过描述分类树来预测已接受答案中的类会更具体,分类树在技术上是通用 DT 概念的子类型。一个参考(忽略讨论具体实现的底层):
从这里