gpt4 book ai didi

java - 如何将两组 weka 实例合并在一起

转载 作者:行者123 更新时间:2023-12-01 19:34:18 24 4
gpt4 key购买 nike

目前,我一次将一个实例从一个数据集复制到另一个数据集。有没有办法做到这一点,使字符串映射保持完整? mergeInstances 水平工作,是否有等效的垂直合并?

这是我用来将多个 arff 文件中相同结构的数据集读取到一个大型数据集中的循环的一个步骤。必须有一种更简单的方法。

Instances iNew = new ConverterUtils.DataSource(name).getDataSet();
for (int i = 0; i < iNew.numInstances(); i++) {
Instance nInst = iNew.instance(i);
inst.add(nInst);
}

最佳答案

如果您想要一种完全自动化的方法,并且可以正确复制字符串和标称属性,您可以使用以下函数:

public static Instances merge(Instances data1, Instances data2)
throws Exception
{
// Check where are the string attributes
int asize = data1.numAttributes();
boolean strings_pos[] = new boolean[asize];
for(int i=0; i<asize; i++)
{
Attribute att = data1.attribute(i);
strings_pos[i] = ((att.type() == Attribute.STRING) ||
(att.type() == Attribute.NOMINAL));
}

// Create a new dataset
Instances dest = new Instances(data1);
dest.setRelationName(data1.relationName() + "+" + data2.relationName());

DataSource source = new DataSource(data2);
Instances instances = source.getStructure();
Instance instance = null;
while (source.hasMoreElements(instances)) {
instance = source.nextElement(instances);
dest.add(instance);

// Copy string attributes
for(int i=0; i<asize; i++) {
if(strings_pos[i]) {
dest.instance(dest.numInstances()-1)
.setValue(i,instance.stringValue(i));
}
}
}

return dest;
}

请注意,应满足以下条件(函数中未检查):

  • 数据集必须具有相同的属性结构(属性数量、属性类型)
  • 类别索引必须相同
  • 标称值必须完全对应

要动态修改 data2 标称属性的值以匹配 data1 的标称属性值,您可以使用:

data2.renameAttributeValue(
data2.attribute("att_name_in_data2"),
"att_value_in_data2",
"att_value_in_data1");

关于java - 如何将两组 weka 实例合并在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10771558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com