java - 在 weka 中添加一个实例到 Instances

标签 java weka

我有几个 arff 文件。我想按顺序阅读它们并创建一个大数据集。 Instances.add(Instance inst) 不会向实例添加字符串值,因此尝试 setDataset() ...但即使这样也会失败。有没有办法为字符串完成直觉上正确的事情?

                ArffLoader arffLoader = new ArffLoader();
                arffLoader.setFile(new File(fName));
                Instances newData = arffLoader.getDataSet();
                for (int i = 0; i < newData.numInstances(); i++) {
                        Instance one = newData.instance(i);
                        one.setDataset(data);
                        data.add(one);
                }

最佳答案

这是来自邮件列表。我之前保存过

how to merge two data file a.arff and b.arff into one data list?

取决于您所说的合并。你只是想追加 第二个文件(两者具有相同的属性)还是要添加 合并属性(两者具有相同数量的实例)?

In the first case ("append"): 
java weka.core.Instances append filename1 filename2 > output-file 

and the latter case ("merge"): 
java weka.core.Instances merge filename1 filename2 > output-file 

这是相关的 Javadoc: http://weka.sourceforge.net/doc.dev/weka/core/Instances.html#main(java.lang.String[])

使用mergeInstances 合并两个数据集。

 public static Instances mergeInstances(Instances first,
                                   Instances second)

您的代码如下所示。对于相同的实例编号。

ArffLoader arffLoader = new ArffLoader();
arffLoader.setFile(new File(fName1));
Instances newData1 = arffLoader.getDataSet();
arffLoader.setFile(new File(fName2));
Instances newData2 = arffLoader.getDataSet();
Instances mergedData = Instances.mergeInstances( newData1 ,newData2);       

您的代码如下所示。对于相同的属性编号。我在 weka 中没有看到任何 java 方法。如果您阅读代码,就会发现类似下面的内容。

// Instances.java
//  public static void main(String[] args) {
// read two files, append them and print result to stdout
  else if ((args.length == 3) && (args[0].toLowerCase().equals("append"))) {
DataSource source1 = new DataSource(args[1]);
DataSource source2 = new DataSource(args[2]);
String msg = source1.getStructure().equalHeadersMsg(source2.getStructure());
if (msg != null)
  throw new Exception("The two datasets have different headers:\n" + msg);
Instances structure = source1.getStructure();
System.out.println(source1.getStructure());
while (source1.hasMoreElements(structure))
  System.out.println(source1.nextElement(structure));
structure = source2.getStructure();
while (source2.hasMoreElements(structure))
  System.out.println(source2.nextElement(structure));
  }

关于java - 在 weka 中添加一个实例到 Instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923947/

相关文章:

machine-learning - Weka FilteredClassifier arrayOutOfBoundsException

java - Weka 3.8.x 中的序列化错误

weka - Weka 中的 10 折交叉验证

java - 无法从 DenseInstance 转换为 Instance

java - 解析 XML 时将子节点与控制值进行比较

java - Mockito:验证模拟(带有 "RETURNS_DEEP_STUBS")返回比预期更多的调用

java - 使用 java 8 迭代和过滤两个列表

java - 如何在 Java 代码中使用 Weka 监督重采样过滤器?

java - jUnit 忽略来自基类的@Test 方法

java - 关于推荐引擎