我需要在weka中完成文本分类的任务。我有以下层次结构中包含数据的文件。
mobydick
part1
1
2
part2
1
2
part3
1
2
其中 1 和 2 是 partx 类文本的chucks。我用
加载数据java -cp /usr/share/java/weka-3.6.6.jar weka.core.converters.TextDirectoryLoader -dir mobydick > moby.arff
我使用默认设置应用过滤器 StringToWordVector 并保存输出。
我有一个关于输出的问题。输出如下
...
@attribute @@class@@ {part3,part1,part2}
...
@data
{1 1,6 1,10 1...82 1,83 1}
{2 1,3 1,4 1...84 1,85 1}
{0 part1,12 1,23 1,...134 1,137 1}
{0 part1,23 1,26 1,...135 1,136 1}
{0 part2,12 1,17 1,...219 1,220 1}
{0 part2,12 1,21 1,...214 1,215 1}
非常奇怪的输出,由于某种原因,weka将标签放入向量中,我希望看到像{},label这样的东西。另外weka没有将标签part3放在向量中,显然它是多余的,但为了简单起见,最好将它放在那里。
所以,在这里我看到有很多技巧,我的问题是什么原因这样做,如果它是正确的,也许我的输出是我用weka错误操作的结果。
答案 0 :(得分:1)
您的操作是正确的,但您的期望与WEKA格式数据集的方式不同。
该类是一个属性,即要预测的属性,因此它存在于向量中。由于您应用过滤器的方式,它是第一个属性。
输出格式稀疏,这意味着您可以获得非零值的属性索引和值的耦合。但是,在名义属性的情况下(因为类在此问题中),当值与默认值不同时,您将获得索引和值,这是第一个 - part3
案件。由于类是第一个属性(索引0
),因此0 part2
和0 part1
不是默认值。{/ p} >