如何在 Weka 中对训练和测试数据集进行分类

Posted

技术标签:

【中文标题】如何在 Weka 中对训练和测试数据集进行分类【英文标题】:How to perform classification on training and test dataset in Weka 【发布时间】:2021-12-07 19:09:18 【问题描述】:

我正在使用 Weka 软件对模型进行分类。我对使用训练和测试数据集分区感到困惑。我将整个数据集的 60% 划分为训练数据集并将其保存到我的硬盘中,并将 40% 的数据用作测试数据集并将这些数据保存到另一个文件中。我使用的数据是不平衡的数据。所以我在我的训练数据集中应用了 SMOTE。之后,在 Weka 的分类选项卡中,我从Test options 中选择了Use training set 选项,并使用随机森林分类器对训练数据集进行分类。得到结果后,我从Test options 中选择了Supplied test set 选项并从硬盘加载我的测试数据集并再次运行分类器。

我尝试查找有关如何在 Weka 中加载训练集和测试集的教程,但没有得到它。上面的过程我是根据自己的理解做的。

因此,我想知道对训练和测试数据集进行分类的正确方法是什么?

谢谢。

【问题讨论】:

【参考方案1】:

无需在训练集上评估您的分类器(这将过于乐观,因为分类器已经看到了这些数据)。只需使用Supplied test set 选项,您的分类器将在当前加载的数据集上自动训练,然后在指定的测试集上进行评估。

除了手动拆分数据之外,您还可以使用Percentage split 测试选项,将60% 用于您的训练数据。

使用过滤器时,您应该始终将它们(在本例中为 SMOTE)和您的分类器(在本例中为 RandomForest)包装在 FilteredClassifier 元分类器中。这样,您将确保正确转换训练和测试集数据。这也将避免在使用监督过滤器转换完整数据集并随后将数据集拆分为训练/测试时将信息泄漏到测试集中的问题。最后,它还很好地记录了对输入数据进行了哪些预处理,所有这些都在一个命令行字符串中。

如果您需要应用多个过滤器,请使用MultiFilter 依次应用它们。

【讨论】:

我没有得到你。如果我使用百分比拆分,我该如何使用 SMOTE?我加载整个数据集并在预处理部分如果我使用 SMOTE,这意味着我将 SMOTE 用于整个数据集。但我喜欢只将 SMOTE 用于训练集。 使用 FilteredClassifier 方法,您根本不使用 Preprocess 面板(该面板只能用于探索)。改变行数的过滤器,如 SMOTE,不会在测试时(即进行预测时)修改数据,因为这是逐行完成的,而不是作为数据集。推荐使用 FilteredClassifier。 所以对于FilteredClassifier,我发现有两个变量面板用于选择分类器和过滤器。我选择 RandomForest 作为分类器,选择 SMOTE 作为过滤器。但这给了我一些奇怪的结果。你可以找到结果***.com/questions/69656295/… 你的配置是正确的。我回复了您链接的其他帖子。

以上是关于如何在 Weka 中对训练和测试数据集进行分类的主要内容,如果未能解决你的问题,请参考以下文章

WEKA - 分类 - 训练和测试集

如何在 python 的朴素贝叶斯分类器中对用户输入测试集进行分类?

weka中用J48(即C4.5)算法对数据集进行训练建模与测试,结果不是很理想,

使用 Weka 使用“一类分类器”进行训练和测试

Weka 中的训练和测试集不兼容

weka 中用于推文分类的 N 折交叉验证