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