目前我在使用Weka,并尝试使用最近邻方法对我的测试集进行分类。我的训练集和测试集都有11列数值数据,最后一列是用于分类的列。两者都已通过Weka工具从.csv转换为.arff格式。
首先,我上传了训练集,并在“分类”选项卡下的“测试选项”中选择了“使用训练集”。我选择了“IBk”分类器,并将邻居数量设置为10。得到的(糟糕的)输出如下:
接下来,我选择了“提供的测试集”并上传了我的测试集。除了标题外,只有最后一列是空的。但当我尝试运行时,得到的输出显示没有一个被分类:
此时我完全不知道该怎么办。据我所知,我的测试集和训练集是正确的,因为它们除了列中的数值不同外是相同的,我只是在训练集上训练后尝试使用我的测试集… 显然我做错了什么。
回答:
问题在于测试集上的评估,其类属性被设置为?
或empty
。你会在训练集上得到一些结果,因为对于训练数据,你知道所有数据标签。但对于测试集,你的标签是未知的,你怎么知道分类器预测的y
对于给定实例是正确的类,还是仅仅是误分类?这就是为什么:你可以得到测试实例的预测标签,但你无法进行任何评估。
以下内容仅为假设,与你的数据无关:
例如,在训练数据上,你可能会得到如下结果:
=== 训练数据上的错误 ===正确分类的实例 4 80 %错误分类的实例 1 20 %Kappa统计量 0.6154平均绝对误差 0.2429均方根误差 0.4016相对绝对误差 50.0043 %根相对平方误差 81.8358 %总实例数 5
但对于未知测试数据,输出可能如下所示:
=== 测试数据上的错误 ===总实例数 0 忽略的未知类实例 5 === 混淆矩阵 === a b <-- 分类为 0 0 | a = 1 0 0 | b = -1
然而,你可以得到未知数据实例的预测如下:
=== 测试数据上的预测 === 实例# 实际 预测 错误 预测 (特征1,特征2,特征3,特征4) 1 1:? 1:1 1 (1,7,1,0) 2 1:? 1:1 1 (1,5,1,0) 3 1:? 2:-1 0.786 (-1,1,1,0) 4 1:? 2:-1 0.861 (1,1,1,1) 5 1:? 2:-1 0.861 (-1,1,1,1) === 混淆矩阵 === a b <-- 分类为 2 1 | a = 1 0 2 | b = -1