我正在尝试从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 ...
Run Code Online (Sandbox Code Playgroud)
然后,我加载模型,我获得预测:
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
Run Code Online (Sandbox Code Playgroud)
......它有效!但是,我错误地引入了一个错误的输入文件,我的模型是这样的:
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)
Run Code Online (Sandbox Code Playgroud)
请注意,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
Run Code Online (Sandbox Code Playgroud)
那么,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
Run Code Online (Sandbox Code Playgroud)
提前致谢!
PGAM