线程" main"中的例外情况java.lang.IllegalArgumentException:字符串+ Mahout中的属性数量错误

时间:2014-06-19 20:56:02

标签: mahout

我正在尝试使用以下命令创建文件描述符:

$ MAHOUT_HOME/core/target/mahout-core--job.jar org.apache.mahout.classifier.df.tools.Describe -p testdata/KDDTrain+.arff -f testdata/KDDTrain+.info -d N 3 C 2 N C 4 N C 8 N 2 C 19 N L 

来自链接: https://mahout.apache.org/users/classification/partial-implementation.html在我的数据文件上,但我采取的任何文件都会更改字符串N 3 C 2 N C 4 N C 8 N 2 C 19 N L的属性数。

我得到以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: Wrong number of attributes in the string

请帮忙!

2 个答案:

答案 0 :(得分:3)

有几个原因可能会导致错误......

  1. 错误的描述符:为了完整起见,请将其放入。您必须已经检查过这个。实际上,您已经为数据指定了错误的描述符。重新检查列的数量和类型,然后将它们正确地提供给描述符。
  2. 错误的分隔符:重新检查数据中使用的分隔符。这也可能会造成一些麻烦。可能是您拥有的数据在某些记录中有一些错误放置的分隔符。确保这一点。
  3. 特殊字符:在我的几个实验中,我注意到如果有某些特殊字符,或者数据由英语以外的语言字符组成,则mahout不会喜欢(除非当然,你调整一下代码)。因此,请确保你有办法处理它们,你应该好好去。
  4. 无论如何所有这些都只是为了你可以创建一个数据描述符。 ATB。

答案 1 :(得分:0)

老问题,但我在遇到同样的问题后发现了一个更敏锐的答案。

在这种特殊情况下,我发现的问题是数据文件的格式(来自http://nsl.cs.unb.ca/NSL-KDD/)似乎已从列出的示例更改在Mahout Random Forest example page

该示例列出了带有说明符

的行格式

N 3 C 2 N C 4 N C 8 N 2 C 19 N L

但是在行的末尾有一个额外的元素;例如:

13,tcp,telnet,SF,118,2425,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,26,10,0.38,0.12,0.04,0.00,0.00,0.00,0.12,0.30,guess_passwd,2

还有一个字段。将另一个数字字段(N)添加到说明符的末尾,作为

N 3 C 2 N C 4 N C 8 N 2 C 19 N L N

我很幸运只使用普通.txt文件格式而不是.arff文件格式。