我试图将一些测试从Weka导入到Matlab。我已经用Weka 3.7创建了一个模型,现在我想在Matlab中重现结果。 首先,我创建了集合traindata和testdata,例如我有:
> ...
> @attribute Tmp numeric
> @attribute Hum numeric
> @attribute Wsp numeric
> @attribute Wnd numeric
> @attribute class {IN,no}
> @data ...
然后,我加载模型并获得预测:
classifier = weka.core.SerializationHelper.read('myMIX750.model');
numInst = testdata.numInstances();
pred = zeros(numInst,1);
predProbs = zeros(numInst, traindata.numClasses());
for i=1:numInst
pred(i) = classifier.classifyInstance( testdata.instance(i-1) );
predProbs(i,:) = classifier.distributionForInstance( testdata.instance(i-1) );
end
......它有效!但是,我错误地引入了一个错误的输入文件,我的模型是:
disp( char(classifier.toString()) )
J48 pruned tree
------------------
WxCat = 0: 0 (14003.0)
WxCat = 1
| WndVar <= 0
| | PcpCatVar <= 1.00015: 0 (4436.0/389.0)
| | PcpCatVar > 1.00015: 1 (2499.0/143.0)
| WndVar > 0: 1 (18636.0/1592.0)
请注意,traindata / testdata的属性与模型中的属性不同。但是,它运行的代码并返回分类......
=== Detailed Accuracy By Class ===
TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
1,000 1,000 0,500 1,000 0,667 0,000 0,500 0,500 IN
0,000 0,000 0,000 0,000 0,000 0,000 0,500 0,500 no
Weighted Avg. 0,500 0,500 0,250 0,500 0,333 0,000 0,500 0,500
因此,weka如何将包含不同属性的实例分类为模型使用的实例?
这是我使用的其余代码:
eval = weka.classifiers.Evaluation(traindata);
eval.evaluateModel(classifier, testdata, javaArray('java.lang.Object',1));
fprintf('=== Run information ===\n\n')
fprintf('Scheme: %s %s\n', ...
char(classifier.getClass().getName()), ...
char(weka.core.Utils.joinOptions(classifier.getOptions())) )
fprintf('Relation: %s\n', char(traindata.relationName))
fprintf('Instances: %d\n', traindata.numInstances)
fprintf('Attributes: %d\n\n', traindata.numAttributes)
fprintf('=== Classifier model ===\n\n')
disp( char(classifier.toString()) )
fprintf('=== Summary ===\n')
disp( char(eval.toSummaryString()) )
disp( char(eval.toClassDetailsString()) ) %Detailed Accuracy By Class
disp( char(eval.toMatrixString()) ) %Confusion Matrix
提前致谢!
PGAM