Weka Experimenter'Class属性不是名义上的',但数据是从Explorer处理的

时间:2012-12-02 23:58:51

标签: machine-learning weka

晚安,

我正在进行有监督的分类任务。我有一个大的arff文件,其格式为“text”,类。只有两个班级,E和I.

我可以将这些数据加载到Weka Explorer中,在其上应用带有TF-IDF的StringToWordVector,然后使用LibSVM对其进行分类并获得结果。但我需要使用5x2交叉验证并获得ROC曲线下的区域。所以我保存了处理过的数据,打开Weka Experimenter,加载它,将其设置为2倍,5次迭代,然后将算法设置为libSVM。

当我进入RUN选项卡并按开始时,我收到以下错误:

  

18:31:18:开始

     

18:31:18:Class属性不是名义上的!

     

18:31:18:中断

     

18:31:18:有1个错误

我不知道为什么会这样,错误到底是什么,或者如何修复它。我谷歌这个错误,并没有引导我任何解决方案。我不知道应该从哪里开始解决这个问题。

我可以回到Explorer,重新加载该处理过的文件,并对其进行分类,没有任何问题,但我需要在Experimenter中进行。

3 个答案:

答案 0 :(得分:6)

就我而言,文件中有名义属性。但是,Weka希望这些是最后的,因为它们表明了分配记录的类。以下是我重新排列数据的方式,以便标称值为最后一次:

  1. 在资源管理器中,打开arff文件。
  2. 点击“编辑...”,然后找到应该是每条记录类的列。
  3. 右键单击列标题,然后选择“属性为类”。
  4. 点击“保存...”并在Experimenter中使用此新数据集。
  5. 像魅力一样。

答案 1 :(得分:2)

如果您的class属性为数字(如0,1),请将其更改为truefalse这样的标称格式。

答案 2 :(得分:0)

StringToWordVector过滤器将class属性作为其输出的数据中的第一个属性。 Experimenter期望数据中的最后一个属性是类。您可以对过滤后的数据的属性进行重新排序,但最好(在将过滤器与分类器组合时通常的正确方法)是使用FilteredClassifier将基本分类器(LibSVM)与StringToWordVector过滤器封装在一起。这应该很好,因为class属性是原始" text",类数据中的最后一个属性。