Weka不会将正确分类的实例显示为输出

时间:2017-12-07 07:59:32

标签: weka

我是weka的新手。我在csv中有一个包含5000个样本的数据集。这里有20个样本;当我将这个数据集上传到weka时,它看起来没问题,但是当我运行knn算法时,它会给出一个不应该给出的结果。这是样本数据。

A,B,C,d

74,85,123,1

73,84,122,1

72,83,121,1

70,81,119,1

70,81,119,1

69,80,118,1

70,81,119,1

70,81,119,1

76,87,125,1

76,87,125,1

82,92,146,2

74,86,140,​​2

68,80,134,2

64,76,130,2

64,75,132,2

83,96,152,2

72,85,141,2

71,83,141,2

69,81,139,2

65,79,137,2

结果如下:

===交叉验证=== ===摘要===

相关系数0.6148 平均绝对误差0.2442 均方根误差0.4004 相对绝对误差50.2313% 根相对平方误差81.2078% 实例总数5000

应该给出这样的结果: 正确分类的实例:69 92% 错误分类的实例:6 8%

应该是什么问题?我错过了什么?我在所有其他算法中都这样做,但它们都提供相同的输出。我使用了样本weka数据集,它们都按预期工作。

1 个答案:

答案 0 :(得分:5)

IBk 算法可用于回归(预测每个实例的数字响应的值)以及分类(预测每个实例属于哪个类。)

您的数据集(CSV中的d列)中的class属性的所有值都是数字。当您将此数据加载到Weka时,Weka因此猜测此属性应被视为数字属性,而不是名义属性。你可以知道这已经发生了,因为Preprocess选项卡中的直方图看起来像这样:

uncoloured histogram

而不是像这样(按班级着色):

histogram coloured by class

运行IBk时看到的结果是回归拟合(预测每个实例的列d的数值)而不是分类(为每个实例选择列d的最可能名义值)的结果

要获得所需的结果,您需要告诉Weka将此属性视为名义属性。在“预处理”选项卡中加载csv文件时,请在文件对话框窗口中选中Invoke options dialog。然后,当您点击打开时,您将看到此窗口:

Weka csv options dialog

字段nominalAttributes是您可以向Weka提供哪些属性是名义属性的列表,即使它们看起来是数字的。在此处输入4将指定输入中的第四个属性(列)是名义属性。现在IBk应该按照你的预期行事。

您也可以通过将 NumericToNominal 无监督属性过滤器应用于已加载的数据,再次指定属性4,否则过滤器将应用于所有属性。

用于Weka样本数据集的ARFF格式包括哪些属性是哪种类型的规范。在您导入(或过滤)上面的数据集后,您可以将其保存为ARFF,然后您就可以重新加载它而无需经过相同的过程。