Weka实际上并不是文档的光辉榜样,但您仍然可以在其网站上找到有用的信息。你应该从Primer开始。我知道你想分类文本文件,所以你也应该看看Text categorization with WEKA。
您在问题中发布的命令行包含错误。我知道,你从我的回答中复制了另一个问题,但我也注意到了它。您必须省略-- -c last
,因为ReplaceMissingValue
过滤器不喜欢它。
底漆,它说:
weka.filters.supervised
类别下weka.filters.supervised类层次是为监督过滤,即趁着班级信息。一个类必须通过-c分配,对于WEKA默认行为使用-c last
。
但ReplaceMissingValue
为无监督滤波器,如StringToWordVector
。
多个过滤器
添加多个过滤器也没问题,那就是什么MultiFilter
是。但是命令行可能会有些混乱:(我在这里选择了RandomForest
,因为它比NN快很多)。
java -classpath weka.jar weka.classifiers.meta.FilteredClassifier \
-t ~/weka-3-7-9/data/ReutersCorn-train.arff \
-T ~/weka-3-7-9/data/ReutersCorn-test.arff \
-F "weka.filters.MultiFilter \
-F weka.filters.unsupervised.attribute.StringToWordVector \
-F weka.filters.unsupervised.attribute.Standardize" \
-W weka.classifiers.trees.RandomForest -- -I 100 \
进行预测
以下是底漆说,关于获取预测:
然而,如果对分类的预测更详细的信息是必要的,-p#输出只是预测对于每个测试实例,以及一系列基于一个属性的ID(0表示无)。
它是把像-p 0
那些常规选项你调用类后直接一个良好的习惯,所以命令行是WEKA分类的
java -classpath weka.jar weka.classifiers.meta.FilteredClassifier \
-t ~/weka-3-7-9/data/ReutersCorn-train.arff \
-T ~/weka-3-7-9/data/ReutersCorn-test.arff \
-p 0 \
-F "weka.filters.MultiFilter \
-F weka.filters.unsupervised.attribute.StringToWordVector \
-F weka.filters.unsupervised.attribute.Standardize" \
-W weka.classifiers.trees.RandomForest -- -I 100 \
结构/过滤器
但正如你所看到的,当从命令行调用它时,WEKA会变得非常复杂。这是由于WEKA分类器和过滤器的树结构。虽然每个命令行只能运行一个分类器/筛选器,但它可以按照您的喜好进行构建。对于以上命令,结构如下所示:
FilteredClassifier将初始化训练数据集上的过滤器,过滤训练数据和测试数据,然后训练训练数据上的模型并对给定的测试数据进行分类。
FilteredClassifier
|
+ Filter
|
+ Classifier
如果我们想要多个过滤器,我们使用与multifilter,这是只有一个过滤器,但它调用它们给出的顺序多等。
FilteredClassifier
|
+ MultiFilter
| |
| + StringToWordVector
| |
| + Standardize
|
+ RandomForest
在命令行中运行这样被分配到正确的类别所需的选项中最艰难的部分,因为经常选项名称是相同的。例如,-F
选项用于FilteredClassifier
和MultiFilter
,所以我不得不使用引号来清除哪个-F属于哪个过滤器。
在最后一行中,您将看到选项-I 100
,属于RandomForest
,不能直接追加,因为那将被分配到FilteredClassifier
,你会得到Illegal options: -I 100
。因此,你必须在它之前加上--
。
添加预测到数据文件
Adding the predicted class label也是可以的,但更加复杂。 AFAIK这不能一步完成,但你必须先训练并保存一个模型,然后使用这个模型来预测和分配新的类标签。
培训和保存模型:
java -classpath weka.jar weka.classifiers.meta.FilteredClassifier \
-t ~/weka-3-7-9/data/ReutersCorn-train.arff \
-d rf.model \
-F "weka.filters.MultiFilter \
-F weka.filters.unsupervised.attribute.StringToWordVector \
-F weka.filters.unsupervised.attribute.Standardize" \
-W weka.classifiers.trees.RandomForest -- -I 100 \
这将训练有素的FilteredClassifier
模型序列化到文件rf.model
。这里重要的是初始化的过滤器也将被序列化,否则测试集在过滤后将不兼容。
加载模型,进行预测,并将其保存:
java -classpath weka.jar weka.filters.supervised.attribute.AddClassification \
-serialized rf.model \
-classification \
-remove-old-class \
-i ~/weka-3-7-9/data/ReutersCorn-test.arff \
-o pred.arff \
-c last
注:
我想在这里写这个答案之前,补充一点,我还没有收到有关的命令进行预测知识无论如何。我GOOGLE了你的问题,然后通过试验和错误来到这个答案;)
这是开始使用WEKA进行预测的最有帮助的“指南”之一 - 谢谢! – SPi 2013-11-11 23:37:18
你是一个绝对的圣人。有什么方法可以给你更多的信用而不是加分?你应该得到1k分。 – Gthoma2 2014-04-26 00:58:50