我使用此命令行命令行“转换” Java代码的Weka
java -cp weka.jar weka.classifiers.trees.RandomForest -T tdata.arff -l rndforrest.model -p 0 > data.out
但我想这样做在Java中不使用的文件,一切都应该是在飞行。该模型可以在开始时加载一次,并且tdata.arff应该是需要预测(分类?)的一个数据行。
像这样:
weka.classifiers.Classifier rndForrest = (weka.classifiers.Classifier)weka.core.SerializationHelper.read("rndforrest.model");
var dataInst = new weka.core.Instance(1, new double[] { 0, 9, -96, 62, 1, 200, 35, 1 });
double pred = rndForrest.classifyInstance(dataInst);
我得到一个错误
Instance doesn't have access to a dataset!
谢谢你的帮助。
编辑:我的代码
Stopwatch sw = new Stopwatch();
sw.Start();
var values = new double[] { 0, 9, -96, 62, 1, 200, 35, 0 };
weka.classifiers.Classifier rndForrest = (weka.classifiers.Classifier)weka.core.SerializationHelper.read("rndforrest.model");
var dataInst = new weka.core.Instance(1, values);
FastVector atts = new FastVector();
for(int i=0; i < values.Length; i++) {
atts.addElement(new weka.core.Attribute("att" + i));
}
weka.core.Instances data = new Instances("MyRelation", atts, 0);
data.add(dataInst);
data.setClassIndex(data.numAttributes() - 1);
double pred = rndForrest.classifyInstance(data.firstInstance());
Console.WriteLine("prediction is " + pred);
Console.WriteLine(sw.ElapsedMilliseconds);
Pleade办始终提供完整的堆栈跟踪。另外,这不是一个“将命令行转换为java代码”的问题,而是您使用实例的方式。看到这个问题和答案:http://stackoverflow.com/questions/12151702/create-an-unlabeled-instance-in-weka – Sentry 2014-11-25 16:02:02
我如何阅读训练有素的模型比我的方式更快? – Kronos 2014-11-26 12:47:43
我不认为有一个更快的方法,但你总是可以问一个关于这个问题的新问题。 – Sentry 2014-11-26 14:35:11