2

いくつかの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);
                }
4

1 に答える 1

6

これはメーリングリストからです。以前に保存しました

2つのデータファイルa.arffとb.arffを1つのデータリストにマージする方法は?

あなたが話しているマージに依存します。2番目のファイルを追加するだけですか(両方とも同じ属性を持っています)、それともマージを追加しますか(両方とも同じ数のインスタンスを持っています)?

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を使用して、2つのデータセットをマージします。

 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));
  }
于 2012-06-07T10:43:13.117 に答える