我从命令行运行WEKA以创建用于训练的贝叶斯网络模型,然后使用此模型在单独的数据集上进行测试。贝叶斯网络使用TAN搜索选项和简单的估计器。我的训练命令行看起来像这样:
java -cp weka.jar:mysql-connector-java-5.0.8-bin.jar
weka.classifiers.bayes.BayesNet -d BN_model -p 0 -distribution -t tr2.arff -D
-Q weka.classifiers.bayes.net.search.local.TAN -- -S BAYES
-E weka.classifiers.bayes.net.estimate.SimpleEstimator -- -A 1 > tr_preds
现在,我刚刚意识到我需要使用FilteredClassifier,因为我想将实例ID添加到我的测试数据中。这就是我被困住的地方。我运行以下内容:
java -cp weka.jar:mysql-connector-java-5.0.8-bin.jar
weka.classifiers.meta.FilteredClassifier
-F weka.filters.unsupervised.attribute.Remove -R 1
-W weka.classifiers.bayes.BayesNet -d BN_model -p 1 -distribution -t tr2.arff -D
-Q weka.classifiers.bayes.net.search.local.TAN -- -S BAYES
-E weka.classifiers.bayes.net.estimate.SimpleEstimator -- -A 1 > tr_preds
我收到以下错误:
Weka exception: Illegal options: -S BAYES
为了解决问题,我删除了所有花哨的搜索选项和估算工具,并使用默认设置运行贝叶斯网络分类器。这很好,但显然不是我需要的。很明显,我在正确构造这个命令行语句时遇到了问题。
你可以告诉我我做错了吗?非常感谢!最佳, 旧金山
答案 0 :(得分:3)
问题是您的命令行参数的顺序错误。由于-- -S BAYES
是--
之后的第一个-W
,因此它认为此选项属于weka.classifiers.bayes.BayesNet
,这是非法选项。您在--
之后忘记了-W ...
来指定分类器的选项。
此外,像-t tr2.arff -d BN_model -p 1 -distribution
这样的常规选项放在中间的某个位置,最好将它们放在您正在调用的课程之后:
java -cp weka.jar:mysql-connector-java-5.0.8-bin.jar
weka.classifiers.meta.FilteredClassifier
-t tr2.arff -d BN_model -p 1 -distribution
-F "weka.filters.unsupervised.attribute.Remove -R 1"
-W weka.classifiers.bayes.BayesNet
-- -D -Q weka.classifiers.bayes.net.search.local.TAN
-- -S BAYES
-E weka.classifiers.bayes.net.estimate.SimpleEstimator
-- -A 1