【问题标题】:Weka continually throws error "Unable to determine structure as arff"Weka 不断抛出错误“无法将结构确定为 arff”
【发布时间】:2021-04-25 12:14:40
【问题描述】:

我正在尝试将 arff 文件导入 weka,但我不断收到以下错误

无法将结构确定为 arff(原因:java.io.IOException: } 预期在枚举结束时,读取 Token[EOL],第 20 行

右括号 } 存在,我在第 20 行找不到任何其他错误。事实上,在我删除第 20 行后,错误再次出现。我附上了一个指向 arff 的链接,其中包含几行数据:Link

【问题讨论】:

  • 你能发布整个标题,从@relation 到@data 吗?顺便说一句,REAL 已经过时了,应该改用numeric
  • @fracpete 谢谢我不知道。我添加了文件的图像
  • 而不是图像,将标题(和一些数据行)作为文本发布,这样我可以尝试输入它。也支持此评论,以便我在收件箱中收到一个标志,并记得尝试帮助你。
  • @zbicyclist 谢谢我附上了文件的链接。第 19 行有很多值,所以您必须滚动一下。

标签: weka


【解决方案1】:

我在这里看到三个问题。 FIRST:在您链接到的文件中,最后一个属性是 los_category,即 NUMERIC:

@ATTRIBUTE los_category NUMBERIC

但是数据行中的最后一个变量显然不是数字(低)。

21,22,165315,4/9/2196__12:26:00_PM,4/10/2196__3:54:00_PM,?,EMERGENCY,EMERGENCY_ROOM_ADMIT,DISC-TRAN_CANCER/CHLDRN_H,Private,?,UNOBTAINABLE,MARRIED,WHITE,4/9/2196__10:06:00_AM,4/9/2196__1:24:00_PM,BENZODIAZEPINE_OVERDOSE,0,1,1.144444444,Low

您已经使用 @ATTRIBUTE 语句定义了 20 个变量(第 3-22 行),但实际上您的数据行有 21 个变量。

第二,您有时间变量(例如,admittime)作为数字;但他们显然有非数字字符。我知道 ARFF 文件需要日期/时间的特定格式,但我不是这方面的专家,无法确定修复。不过,这绝对是个问题。当我创建一个仅包含前 3 个变量的文件时,它可以正常加载。当我添加第四个 (@ATTRIBUTE admissiontime NUMERIC) 时,我收到与您报告的相同的错误。

第三,第 19 行(@ATTRIBUTE 诊断)有数百个字符长。您现在可能希望将其视为 STRING 变量类型,以确保您不会因那条大行而使读取缓冲区超载。

【讨论】:

  • 还有一些 cmets:@ATTRIBUTE diagnosis 仅列出带有双引号的分类值,但缺少结束引号。 @ATTRIBUTE marital_status 将问号列为值,但是这往往是为缺失值保留的。如果要使用缺失值标记值而不是缺失值,则需要使用单引号对其进行转义(在标题定义和数据部分中)。总而言之,我建议不要手动创建 ARFF 文件,而是使用 Weka 创建它们,例如从 CSV 文件或数据库表/查询中加载它们。
  • @zbicyclist 是的,我使用在线转换器来创建此文件。我什至不知道字符串是一种有效的数据类型。感谢您所有周到的cmets。我现在在不同的线路上遇到错误,所以我想这是进步。我会像你说的那样看日期格式。
猜你喜欢
  • 1970-01-01
  • 2017-01-06
  • 2016-11-09
  • 1970-01-01
  • 2017-12-09
  • 2016-12-13
  • 2013-10-22
  • 2020-06-04
  • 2016-04-04
相关资源
最近更新 更多