3

晚上好,

我正在做一个有监督的分类任务。我有一个大的 arff 文件,其中包含“文本”类格式的数据。只有两个班,E和I。

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

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

18:31:18:开始

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

18:31:18:被打断

18:31:18:出现 1 个错误

我不知道为什么会发生这种情况,究竟是什么错误,或者如何解决它。我用谷歌搜索了这个错误,但它并没有引导我找到任何解决方案。我不确定我应该从哪里解决这个问题。

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

4

3 回答 3

6

就我而言,文件中有名义属性。然而,Weka 期望这些是最后的,因为它们指示记录被分配到的类。以下是我如何重新排列数据以使标称值位于最后:

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

奇迹般有效。

于 2014-05-04T14:33:58.007 回答
3

If your class attribute is numeric (like 0,1) change it to a nominal form like true, false.

于 2012-12-03T11:44:31.263 回答
0

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

于 2017-09-05T10:47:27.087 回答