【问题标题】:Constructor error while creating an empty dataset in weka在 weka 中创建空数据集时出现构造函数错误
【发布时间】:2015-04-27 06:21:44
【问题描述】:

我正在尝试使用 Matlab 环境中的分类实例方法(在 weka 的文档 here 中描述)对实例进行分类。

此方法要求实例链接到数据集。我正在尝试使用this constructor 使用以下matlab 代码创建一个空数据集:

import java.util.ArrayList.*;
import weka.core.*;
import weka.core.Instances.*;


attInfo = java.util.ArrayList;

attInfo.add(weka.core.Attribute('att1'));
attInfo.add(weka.core.Attribute('att2'));
attInfo.add(weka.core.Attribute('att3'));

dataset= weka.core.Instances(java.lang.String('relation'), attInfo, 2);

当我尝试运行此代码时,matlab 返回以下错误:

找不到具有匹配签名的构造函数“weka.core.Instances”。

file_name(第 109 行)数据集中错误 = weka.core.Instances(java.lang.String('relation'), attInfo, 5);

我的构造函数的参数有什么问题?

【问题讨论】:

  • 不确定java.lang.String('relation') 不应该只是"relation" 吗? > dataset= weka.core.Instances("relation", attInfo, 2);
  • 由于我使用的是 Matlab,所以字符串是使用 '...' 定义的。

标签: java matlab constructor weka


【解决方案1】:

我最终找到了问题的解决方案。构造函数接受使用已弃用类FastVector 的签名。我刚刚添加了我的代码快照,以防它可能对某人有所帮助。

attInfo = FastVector();

attInfo.addElement(weka.core.Attribute('att1'));
attInfo.addElement(weka.core.Attribute('att2'));
attInfo.addElement(weka.core.Attribute('att3'));

% build the class attribute
classValues = FastVector();
classValues.addElement(java.lang.String('0'));
classValues.addElement(java.lang.String('1'));

attInfo.addElement(Attribute('Class', classValues));

% create the dataset and define the class attribute
dataset = Instances('relation', attInfo, 1);
dataset.setClassIndex(dataset.numAttributes() -1);

% build the instance
Inst = weka.core.Instance(10);
for ii = 1:D.numAttributes()
    Inst.setValue(D.attribute(ii-1), 1)
end
Inst.setDataset(dataset)

% classify the instance
classifier.classifyInstance(Inst)

使用java.lang.String()等java对象也会导致错误。

我仍然很好奇为什么会发生这种情况,但我怀疑这可能是因为我使用的 weka 版本 (3.6.11),其中文档可能是 3.7.12 版本。

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多