我记得最近邻之类的算法不会基于训练数据构建模型,然后将该模型应用于测试数据。它只是获取每个新实例并将其与所有数据进行比较以找到最接近的实例,等等。
朴素贝叶斯呢?似乎很相似。例如,神经网络学习参数,然后在测试数据上使用相应的模型。但是对于朴素贝叶斯,我看不到学习发生在哪里。没有学习到的参数。它似乎再次查看每个预测的整个数据集。任何人都可以对此发表评论吗?
此外,那么训练/测试拆分的用途是什么。我可以看到我们想要一个测试集,因为我们希望它被标记但除此之外我不明白为什么我们需要测试/训练?
我记得最近邻之类的算法不会基于训练数据构建模型,然后将该模型应用于测试数据。它只是获取每个新实例并将其与所有数据进行比较以找到最接近的实例,等等。
朴素贝叶斯呢?似乎很相似。例如,神经网络学习参数,然后在测试数据上使用相应的模型。但是对于朴素贝叶斯,我看不到学习发生在哪里。没有学习到的参数。它似乎再次查看每个预测的整个数据集。任何人都可以对此发表评论吗?
此外,那么训练/测试拆分的用途是什么。我可以看到我们想要一个测试集,因为我们希望它被标记但除此之外我不明白为什么我们需要测试/训练?
与最近邻算法不同,朴素贝叶斯算法不是惰性方法;对朴素贝叶斯进行了真正的学习。在朴素贝叶斯中学习的参数是不同类的先验概率,以及每个类的不同特征的可能性。在测试阶段,这些学习参数用于估计给定样本的每个类别的概率。
换句话说,在朴素贝叶斯中,对于测试集中的每个样本,在训练期间确定的参数用于估计该样本属于不同类别的概率。例如,其中是一个类别,是一个测试样本。所有数量和都是在训练期间确定并在测试期间使用的参数。这与 NN 类似,但学习的类型和应用学习模型的类型不同。
例如,看一下nltk 中的朴素贝叶斯实现。请参阅train和prob_classify方法。在该train方法中,label_probdist和feature_probdist被计算,并且在该prob_classify方法中,这些参数用于估计测试样本的不同类别的概率。只需注意_label_probdist和_feature_probdist分别初始化为label_probdist和feature_probdist在构造函数中。
关于您的第二个问题(最后一段),即使对于最近邻方法等惰性方法,我们也需要将数据拆分为训练/测试。这是因为我们想在一些训练期间没有看到的样本上评估基于训练数据获得的模型的性能,以获得模型泛化的合理度量。
我在朴素贝叶斯分类器中没有看到任何参数。
我认为我们不需要像在神经网络中那样学习参数,但我们从训练数据中学习(或计算)先验概率。然后我们应用我们从训练数据计算的先验来对测试数据进行预测。