我是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数据集,它们都按预期工作。
答案 0 :(得分:5)
IBk 算法可用于回归(预测每个实例的数字响应的值)以及分类(预测每个实例属于哪个类。)
您的数据集(CSV中的d
列)中的class属性的所有值都是数字。当您将此数据加载到Weka时,Weka因此猜测此属性应被视为数字属性,而不是名义属性。你可以知道这已经发生了,因为Preprocess选项卡中的直方图看起来像这样:
而不是像这样(按班级着色):
运行IBk时看到的结果是回归拟合(预测每个实例的列d的数值)而不是分类(为每个实例选择列d的最可能名义值)的结果
要获得所需的结果,您需要告诉Weka将此属性视为名义属性。在“预处理”选项卡中加载csv文件时,请在文件对话框窗口中选中Invoke options dialog
。然后,当您点击打开时,您将看到此窗口:
字段nominalAttributes
是您可以向Weka提供哪些属性是名义属性的列表,即使它们看起来是数字的。在此处输入4
将指定输入中的第四个属性(列)是名义属性。现在IBk应该按照你的预期行事。
您也可以通过将 NumericToNominal 无监督属性过滤器应用于已加载的数据,再次指定属性4,否则过滤器将应用于所有属性。
用于Weka样本数据集的ARFF格式包括哪些属性是哪种类型的规范。在您导入(或过滤)上面的数据集后,您可以将其保存为ARFF,然后您就可以重新加载它而无需经过相同的过程。