Matlab中的Weka:为什么它使用错误的属性?

时间:2014-05-28 15:56:47

标签: matlab weka

我试图将一些测试从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

0 个答案:

没有答案